一致性哈希和随机树:用分布式缓存协议解决互联网中的热点数据

无人久伴 提交于 2019-11-26 10:59:24

【Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web】

Abstract

我们描述了一族用于分布式网络中的缓存协议族,它们可以用来减少或者消除网络中热点的产生。我们的协议是特地为了像因特网这种大型的网络而设计的,在这里由于热点导致的延迟可能非常严重,并且让每台服务器拥有整个网络当前状态的完整信息也不可行。利用现有的网络协议,例如TCP/IP很容易实现我们提出的协议,而且开销很少。所提出的协议使用局部控制,有效利用现有的资源,并且随着网络规模的增加可以优雅地扩容。

我们的缓存协议是基于一种我们称之为一致性哈希的特殊哈希。粗略来说,一致性哈希函数在函数范围发生发生改变时受到的影响最小。通过开发一些较好的一致性哈希函数,我们能构在这个基础上开发出一些不需要用户必须有网络的当前乃至一致性视图。我们相信一致性哈希函数也许最终会被证明在其他的应用中,比如分布式命名服务器或者配额系统(quorum system)。

1 Introduction

我们在本中描述了分布式网络中的缓存协议,可以用来减少或者消除"热点"的发生。大量的客户同时访问一个服务器上的数据时,这个时候就会产生热点。如果站点并没有同时处理这么客户访问的能力的话,服务很可能会降级或者不可用。大部分人在上网的时候都经历过热点现象。当一个网站突然之间变得很受欢迎,并且在较短的时间内接收到了远远超过最开始配置的处理量。事实上,一个网站可能会接收到这么多的请求以至于它变得应接不暇,然后就造成了网站不可用了。除了造成站点不可访问之外,对一个地方繁重的通信也会使得它附近的网络变得拥挤,干扰到附近站点的通信。

随着网络不断使用,热点数据的出现频率更快,影响也越大。网络热点比较又名的例子包括Shoemaker-Levy 9 comet struck Jupiter的JPL站点,在Deep Blue-Kasparov象棋对战时的IBM站点以及大选之夜的几个政治站点。在这里案例中,用户被拒绝访问一个站点长达数小时乃至数天。其他例子包括被认定为"Web-site-of-the-day"的网站以及提供流行软件新版本的站点。

我们的工作最开始是由万维网的热点问题所推动。我们相信我们开发的工具和许多的客户端-服务器模型相关,因为在互联网中的中心化服务器例如域名服务器,组播服务器以及内容标签服务器都容易遭遇到热点问题。

【总结】互联网中会存在热点数据问题,当服务器处理不了大量请求会导致服务降级。

1.1 以往的工作

已经有几种方法被提出来用于解决热点问题。大多数都使用某种复制策略来存储整个因特网的热门网页;这种做法可以让多个服务器提供热门网页。其中一种广泛应用的方法是让某些客户端共享一份代理缓存。所有用户的请求都指向代理,代理服务器中会试图保存访问经常访问的网页的备份。它尝试用缓存的拷贝来响应请求;如果失败的话,它就会将请求指向主服务器。这种方案有个矛盾的地方是如果使用同一份缓存的用户月多话,效果越好,但是,缓存本身容易变得拥挤。

Malpani等人通过将一组缓存函数合成一个来解决这个问题。一个用户对某个页面的请求直接指向任意一个缓存。如果页面刚好在这个缓存中,就会把这个页面响应给用户。否则,这个缓存服务器会把这个请求通过一种称为"IP Multicast"的特殊协议将请求广播给其他所有的缓存服务器。如果在其他的地方也没有缓存这个页面,那么请求就会转发给该网页所在的主站点。这种技术的缺点是当缓存服务器的个数增加的时候,即使是使用组播方式,缓存之间的消息数量也会变得难以管理。我们在本文开发的工具,一致性哈希,提供了一种完全不需要缓存服务器之间进行通行的分布式缓存的实现方法。我们会在第4部分讨论。

Chankhunthod等人则开发了Harvest缓存,一种使用树结构组织缓存服务器的方法,有更好的可扩展性。一个用户通过请求附近的叶节点缓存服务器。如果它自己和它的兄弟节点某没有缓存这个页面,那么请求就会转发到缓存服务器的父节点。如果页面也没缓存在这个树中,那么请求最终会到到根结点,然后被转发给了页面所在的站点。一个缓存服务器会在一段时间内继续保留它所获得的网页拷贝。缓存服务器树的优点在于一个缓存只从他的子节点(和兄弟节点)接收页面请求,从而确保了不会有太多的请求同时到达。因此,在短时间内对一个页面的大量请求只会对该页面所在的站点造成一次请求,同时也不会使缓存服务器过载。这种做法,至少在理论上有一个缺点就是相同的树被用来缓存所有的页面,意味着根结点至少会对整个缓存树中每个单独的页面处理一次请求。如果不同页面的请求增长规模很大,会导致根结点的拥堵,意味着这种方案存在潜在的扩展性问题。

1.2 我们的贡献

1.3 章节分布

1.4 对于随机和哈希的笔记

2 模型

目标

3 随机树

3.1 协议

3.2 分析

3.2.1 延迟

3.2.2 拥堵

3.2.3 存储

4 一致性哈希

4.1 定义

4.2 构造

4.3 实现

4.4 一致性哈希的一些理论

5 不一致世界中的随机树

5.1 拥堵

5.2 存储

6 不统一的通信代价

6.1 协议

6.2 分析

6.2.1 拥堵

6.2.2 存储

7 容错

8 给模型增加时间

9结论

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!