一致性Hash算法

一致性Hash算法

一致性Hash算法是现代系统架构中最关键的算法之一,它在分布式计算系统、分布式存储系统、数据分析等众多领域中被广泛应用。
一致性Hash算法_第1张图片
- 一致性Hash算法的关键思路在于它能够根据不同的属性数据,生成一串不相同的Hash值,并且能够将这个Hash值转换喂0至2^32-1范围的整数(或者有可排列依据的其他数据类型),形成如图的圆环。请注意这个圆环是一个抽象结构,在实际编程中需要使用各种数据结构进行模拟,例如在数据库中间件MyCat中,开发人员就使用了红黑树来形成这个抽象的环;Ceph文件系统在若干个PG中选择一个PG进行Object存储时,也使用一致性Hash算法完成。
- 一台服务器的某个或者某一些属性当然可以进行Hash计算(参与计算的属性通常是这个服务器的IP端口和开放端口),并且根据计算分布在这个圆环上的某一个点。
- 一个“处理请求”当然也可以根据这个请求的某一个或者某一些属性进行Hash计算(参与计算的属性可以是这个请求的IP、端口、Cookie值、URL值或请求时间等),并且根据计算记过分布在这个圆环上的某一个点上。
- 我们约定“处理请求”经过Hash计算后,落在A点左侧和B点右侧,则表示这些“处理请求”都由A点所代表的服务器进行处理,这样就完全解决了“谁来处理”的问题。在服务器Hash落点稳定存在的前提下,来自于同一个IP和端口的“处理请求”经过Hash计算后的数值,落在圆环上的位置都是一样的,这就保证了服务器处理映射的稳定性。
- 当某一个服务器Hash计算结果的落点由于某种原因下线,其所影响的处理请求落点也是有限的。即下一次客户端的请求将由其他的服务器Hash落点所代表的服务器进行处理。
- 一致性Hash算法中,并没有严格规定必须试用什么样的值带入什么样具体的Hash算法来计算。
- Hash算法是否优秀的三大标准:计算速度、散列速度和碰撞度。


你可能感兴趣的:(nginx)