Consistent Hashing算法及相关技术

Distributed Algorithms in NoSQL Databases, http://highlyscalable.wordpress.com/2012/09/18/distributed-algorithms-in-nosql-databases/
NOSQL Patterns, http://horicky.blogspot.com/2009/11/nosql-patterns.html
Consistent Hashing(ZZ) , 使用memcached结合Consistent hasning 算法, 实现非常完备的分布式缓存服务器
The Simple Magic of Consistent Hashing, http://www.paperplanes.de/2011/12/9/the-magic-of-consistent-hashing.html
Amazon's Dynamo, 4.2 4.3, 6.2确保均匀的负载分布, 6.4

 

当面对bigdata, scale-up思路完全行不通, 需要使用scale-out来进行系统扩展的时候 
Data Sharding将是必须要面对的问题, how to map records to physical nodes?

1. Load balance, 避免出现hotspots

2. 节点发生变化时, fail, new add, leave, 不会影响到sharding的结果

 

使用的方法,

1. 基于master, 比如google的bigtable, master来协调一切, 避免hotspots, 当节点失效或加入时, 经行相应的调整 
    所有的数据分布状况信息都存在master上, 当然问题就是单点

2. 基于内容的划分, 比如时间, 地点, 问题在于无法解决hotspots问题

3. 基于hash的划分 (partition = key mod (total_VNs)), 这个可以比较有效的解决hotspots问题, 但是无法解决节点变化问题 
   当节点变化时, 会导致之前的所有划分失效

4, 一致性hash, 比较理想的方案, 并且是去中心化设计

 

Consistent Hashing

The idea of consistent hashing was introduced by David Karger et al. in 1997 (cf. [KLL+97]) in the context of a paper about “a family of caching protocols for distributed networks that can be used to decrease or eliminate the occurrence of hot spots in the networks”.

A到B就是, 普通hash到一致性hash的转化 
C, 当节点增加或删除时, 一致性hash可以简单的应对 
D, 为了load balance, 使用虚拟节点的概念, 并可以根据节点的能力分配不同个数的节点

算法实际使用例子可以参考Amazon's Dynamo, 4.2 划分算法

直接使用一致性hash在效率上, 会存在一些问题, 参考Amazon's Dynamo, 6.2确保均匀的负载分布, 看看dynamo是怎样优化一致性hash以达到更好的load balance

关于一致性hash, 由谁来进行coordinate的问题, 参考Amazon's Dynamo, 6.4 Client-driven or Server-driven Coordination 
client是否需要保存一致性hash环信息, 并如何更新的问题? 
如果能容忍多一跳的延迟, client可以不保存任何一致性hash环信息, 就近将request发给任一server, 由server进行coordinate

 

Data replication

To provide high reiability from individually unreliable resource, we need to replicate the data partitions.

关于使用一致性hash后的复本机制参考Amazon's Dynamo, 4.3

 

Membership Changes

In a partitioned database where nodes may join and leave the system at any time without impacting its operation all nodes have to communicate with each other, especially when membership changes.

一致性hash有效解决节点动态变化的问题, 也只是将影响降到较小的范围, 在节点变化时, 邻接的节点仍然需要做一定的调整和数据transfer 
When a new node joins the system the following actions have to happen (cf. [Ho09a]): 
1. The newly arriving node announces its presence and its identifier to adjacent nodes or to all nodes via broadcast
2. The neighbors of the joining node react by adjusting their object and replica ownerships
3. The joining node copies datasets it is now responsible for from its neighbours. This can be done in bulk and alsoasynchronously
4. If, in step 1, the membership change has not been broadcasted to all nodes, the joining node is now announcing its arrival.

 

When a node leaves the system the following actions have to occur (cf. [Ho09a]):

1. Nodes within the system need to detect whether a node has left as it might have crashed and not been able to notify the other nodes of its departure.

2. If a node’s departure has been detected, the neighbors of the node have to react by exchanging data with each other and adjusting their object and replica ownerships.

  

本文章摘自博客园,原文发布日期:2013-04-13

时间: 2024-08-30 20:46:59

Consistent Hashing算法及相关技术的相关文章

一致性哈希算法 Consistent Hashing 探讨以及相应的新问题出现解决

一.业务场景 假如我们现在有12台Redis服务器(其它的什么东西也行),有很多User(用户)的数据数据从前端过来,然后往12台redis服务器上存储,在存储中就会出现一个问题,12台服务器,有可能其中几台Redis服务器上(简称集群A)存了很多的数据,然后另外几台Redis服务器(简称集群B)上存的数据很少,这样的话那 A 上的读写压力就会很大(当然,这个要看你的数据量的大小了,如果你数据量很小的话,基本无压力了,但是数据量很大,那就 ...),对于这样的问题,我们通常的解决办法是什么呢 ?

一致性 hash 算法(consistent hashing)

一致性 hash 算法(consistent hashing)  consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛: 1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N

一致性hash算法 - consistent hashing

consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛: 1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache : hash(object)%N 一切都运行正常,

基于一致性hash算法(consistent hashing)的使用详解_Mysql

1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache : hash(object)%N 一切都运行正常,再考虑如下的两种情况: 1 一个 cache 服务器 m down 掉了(在实际应用中必须要考虑这种情况),这样所有映射到 cache m 的对象都会失效,怎么办,需要把 cache m 从 c

hash算法 consistent hashing 详解[图]

1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ; hash(object)%N 一切都运行正常,再考虑如下的两种情况; 1 一个 cache 服务器 m down 掉了(在实际应用中必须要考虑这种情况),这样所有映射到 cache m 的对象都会失效,怎么办,需要把 cache m 从 c

memcached的分布式算法-Consistent Hashing

前言: 我们知道以往资料要放到 M 台服务器上,最简单的方法就是取余数 (hash_value % M) 然后放到对应的服务器上,那就是当添加或移除服务器时,缓存重组的代价相当巨大. 添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器, 从而影响缓存的命中率. 下面这篇文章写的非常好,结合memcached的 特点利用Consistent hasning 算法,可以打造一个非常完备的分布式缓存服务器. 我是Mixi的长野. 本次不再介绍memcached的内部结构, 开始介绍me

【转载】五分钟理解一致性哈希算法(consistent hashing)

   转载自:http://blog.csdn.net/cywosp/article/details/23397179 简介:     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用.     一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义

ArchSummit2016移动端架构相关技术一些思考

  有幸参加ArchSummit2016全球架构师峰会,作为一名移动端开发人员,比较关注移动端架构相关主题,可惜的是此次会议关于移动端主题太少了,很多都停留在技术表面泛泛而谈,不够深入.除了移动端主题外,还关注了一下新技术方向主题:微服务架构,移动直播,区块链.阿里的技术专场场面火爆,反响不错,本文暂不讨论,主要就集团外几个印象深刻的移动相关技术主题聊聊自己的一些感受,比较杂. 移动架构设计变化 随着前端技术的渗入,原来只能应用到浏览器上的技术,现在纷纷出现在原生应用的开发阵营.另外一个就是后端

目前正在快速演进的Docker相关技术

Docker无疑是今年以来最火的开源技术,Docker现在已经成为目前IT界创业者和创新者的宠儿.无论谷歌.微软.亚马逊.IBM等科技厂商都积极支持Docker技术,Docker虽然入门和使用起来非常简单,但整个生态系统还是挺庞大的,而且其底层技术也都很复杂,目前基于Docker技术的项目如雨后春笋般出现,今天,笔者总结了目前正在快速演进的Docker相关技术,分享给大家. Kubernetes 在今年夏天Dockercon 上Google基础设施副总裁EricBrewer宣布Kubernete