一致性hash解决节点弹缩问题

一致性hash解决节点弹缩问题

1 引流目标

    Top 节点到 flow mater 节点的引流

    SEP 数据面中top层节点引流到flow master层节点,要求 flow master节点横向弹缩的过程中,对整个top层流量到flow master节点的流量震荡最小,而不会引起top层的所有流量重新计算flow master节点再引流。

2 引流拓扑

  如下图1 和图 2 分别为 flow master 扩展 和 收缩 情况下的流量拓扑图。

                                    

                                                        图 1                                                                      图 2

3 引流分析

  3.1 前置条件

      * top层中的节点已知 flow master层中所有flow master节点的列表信息。如 M个flow master Node,编号为:flow_master_ip-1, …, flow_master_ip-M。

      * top层的引流规则为通过top层中vxlan网络包的内层五元组HASH进行引流。即protocol、src ip、dst ip、src port、dst port。

  3.2 引流分析

     通常情况下,对于top节点,其数据包发送到flow master,将根据其内层五元组进行hash计算: hashValue = HASH(protocol + src_ip + dst_ip + src_port + dst_port); 然后通常通过hash值与flow master 节点列表总数值进行

取模运算得到一个值作为其选择 flow master 列表的下标,从而把flow master 节点选出来。比如:

i = hashValue % length(flow_master_node_list);  其中0=< i <= length(flow_master_node_list) -1

选出来的flow master 节点为 flow_master_node_list[i]。

     上述flow master选择过程在flow master数量不变的情况下,相同数据流都将会引流到相同的flow master节点;但当flow master 进行扩容或者缩容后,由于flow_master_node_list 发送变化,将导致相同的数据流被引流到不同的flow master Node,并且是全局性的,即所有top节点上的数据流被引流到的flow master节点都将发送变化,出现缓存雪崩现象。

  3.3 解决方法

解决上述问题,可以通过一致性hash算法进行解决。

由于Hash函数对key进行hash得到的哈希值为32位的无符号的整形值,因此可将32位无符号整形的所有值(即0-232-1)组成一个圆环,该圆环被均分成了232-1等分,0和232-1重合。如下图:

                                                                    

然后我们在将整个圆环均分成length(flow_master_node_list)份,假设flow_master_node_list中有ABCD四个flow master 节点,其分布如下:

                                                                   

Node节点的位置不一定通过均分的形式,也可以通过节点的特征在进行hash,将得到的hashValue表示其在环上的位置。然后对top节点上的数据量的内层五元组进行hash计算,objectX = HASH(protocol + src_ip + dst_ip + src_port + dst_port);将得到的hash值(假设为objectC)按顺时针方向找到第一个flow master Node(Node C)的hash值,则该flow master(Node C) 节点为top选出来的引流的flow master节点。

   当flow master进行扩容(NodeX)的时候,假设其hash值位于nodeB 和 NodeC 间,那么只有top上对数据流五元组hash后的值在 nodeB 和nodeX的hash值之间时,该数据流才会被引流到新的flow master节点NodeX,top上的其他数据流还是引流到原来的flow master上。因此能保证受影响的数据流最小(受影响的范围和flow master上的节点数有关)。缩容类似,如果NodeC 缩容下线了,则只会影响hash值在NodeB和NodeC间对应的top上的流量。

                                                    

上述解决方法中,受影响的范围与flow master上的节点数有关,当flow master数节点较少时,受影响的范围较大,并且会出现数据流量倾斜的情况。比如当有三个flow master节点NodeA,NodeB,NodeC时,NodeA,NodeB,NodeC三个节点的hash值位置按上述圆环顺时针排列,当NodeB down的时候,hash值分布在NodeA 和 NodeB hash值之间的数据流将全部引流到NodeC,而原先hash值分布在NodeB 和 NodeC hash值之间的数据流引流不变,也是引流到NodeC, 因此NodeC 将承担top层的2/3流量(假设NodeA,NodeB,NodeC hash 值均匀分布在圆环上),NodeA 承担1/3 的流量。此时出现1/3的数据流量重新分配了flow master,并且出现了数据流量倾斜现象。

当flow maser节点较少时,可以通过复用flow master节点来解决数据流量倾斜现象。复用flow master节点时,给同一flow master加上不同的hash key tag来完成,并且所有的flow master同时增加标记tag。如给NodeA 加上tag 变成NodeA_tag1,NodeA_tag2;NodeB 变为NodeB_tag1, NodeB_tag2, NodeC 变为NodeC_tag1, NodeC_tag2。这样圆环上由原来的三个节点变为六个节点,从而达到数据流量趋向均匀分布的目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

andy-guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值