• 一致性哈希 分布式扩容问题


    如果有3台服务器作为分布式存储的负载均衡节点(我们这里不谈备份),三台机子各村一部分数据,理想情况下,各存1/3

    存入数据的时候,数据取hash,然后模3,得到0-2,分别对应三台服务器。

    查询的时候,同样计算出hash,取模,取对应的机子上取数据。

    如果三台机子快满了,需要扩容怎么办?如果数据分布不均匀,我们需要在指定地方加入一台机子来分档压力怎么办?

    明显,任意节点的变动都需要全量数据的重新分配,重新计算hash,必须停服。

    怎么解决这个问题?

      第一种方式,即便我只有3 台服务器,我算hash 的时候依旧取模3W,然后,0-1W分一台,1-2W分一台,2-3W分一台 (一致性哈希算法)

        扩容的时候,我把0-5000分给新的机器,5000-1W给原来的机器。加入这台机子以后大部分服务是可用的。只有0-5000的算计短时间内无法查询和写入,只有等加入的机制同步完成0-5000的数据才能使用,影响小了很多。

      第二种方式:算出来的哈希我在做一个区间映射表,1000范围一份,共计30 份,然后分别按照三台服务器的性能,指定每一份应该存储到那台计算机上,比如A服务器比较牛逼,我吧其中的任意15 份给它,B一般给10 份,C很差给5份。后面如果要扩容也是只需要在  映射表里里面吧指定服务器的压力分给新的服务器就行了,也是部分服务暂停就行了。

  • 相关阅读:
    介绍Asta4D
    Mac下terminal的常用命令
    Mac下的终端(Terminal)简介
    SCA简介及配置示例
    抽象
    自助式微软BI工具PowerPivot简介!
    C编译: 使用gdb调试
    operamasksui2.0 +MVC4.0+EF5.0实战 当EntityFramework遇上Json,引爆 循环引用 这颗雷
    ASP.NET MVC分部类的使用
    GWT入门教程
  • 原文地址:https://www.cnblogs.com/cxygg/p/16201075.html
Copyright © 2020-2023  润新知