• 一致性哈希算法


    背景

      当前后台微服务架构盛极一时,docker技术日趋成熟,二者如同伯牙子期的相遇,天作之合。而服务容器化在任何业务背景下都会遇到动态扩缩容,随着业务的访问量级波动,容器资源的自动化增加和回收可以为运维减少压力。

      此外,在扩缩容前后,都需要负载均衡来维持各节点上的负载压力,从而使得扩缩容变得更加“优雅”。负载均衡技术中常用的算法模型就会涉及到一致性哈希算法

    求余哈希算法

      服务集群中每个节点都有个“哈希地址”作为唯一标识,其计算公式简写如下:

      add = hash(object) mod Nadd=hash(object)modN

      当发生扩缩容导致增加或减少一个节点时,剩余节点的地址映射都会发生改变

      add = hash(object) mod (N±1)add=hash(object)mod(N±1)

      进而导致所有节点的数据需要迁移,代价太大

    一致性哈希算法

      一致性哈希将哈希值空间设计成“环状”,值域为[0,2^32-1],定义域可以使用节点的IP或主机名来计算。

       假设我们有3个节点和4个数据,其地址在哈希值空间的分布如下:

      按照一致性哈希算法,每个数据按顺时针方向,绑定到距离它最近的节点,例如数据A绑定01节点,数据D绑定02节点,数据B、C绑定03节点。

      假设03节点被缩减掉,数据B和C就需要绑定到01节点,其余数据和节点不需要迁移。

      假设增加一个节点04,如下图,按照一致性哈希算法,只需要将数据B重新迁移到节点04即可。

    总结

      一致性哈希算法,因为其特殊的数据结构和数据绑定算法,使得在节点增加和减少时,可发生的数据迁移量大大减少,数据迁移减少,带来的应用价值就是减少动态扩缩容的时间。

      目前市面上“秒级”的扩缩容产品非常少,大部分都在“分钟级”,当扩缩容反应越灵敏,在业务运营大型活动时,发生服务宕机或者雪崩的概率就会大大降低

  • 相关阅读:
    centos已经安装了python2,同时安装python3
    linux下判断磁盘是ssd还是hdd
    Java中如何判断两个对象是否相等
    NPOI导出Excel和基于office导出Excel比较
    asp
    又找到了一个blog
    关于宋朝及中国历史的一点想法
    Android中实现EditText圆角
    Python小练习
    软件架构设计(三) 架构、架构师和架构设计
  • 原文地址:https://www.cnblogs.com/hzzjj/p/16140139.html
Copyright © 2020-2023  润新知