路由算法总结

目录

内容概述

随机选择

轮询 roundribbon

取模 mod

权重

一致性hash算法


内容概述

列举常见的几种路由算法以及基本思路。

随机选择

随机数作为节点数组索引

轮询 roundribbon

按照节点集合顺序依次返回

取模 mod

  • 节点信息数组nodes
  • index=key%nodes.length
  • 命中nodes[index]

权重

  • 每个节点的权重映射为一个数字逻辑区间,如[A(上个权重逻辑区间上限),B(A+权重))
  • 通过随机数选择命中区间
  • 获得本次路由节点

计算区间时可将权重适当扩大,例如权重都是两位小数,则可扩大100倍,即.25扩大为25。
举例
        N1,权重2;N2,权重4
        N1对应区间[0,2),即0、1
        N2对应区间[2,6),即2、3、4、5
        获取随机整数,例如3
        随机数3对应N2区间,则选择N2节点。

一致性hash算法

优点

  • 增减服务器后,不会造成大量key迁移。

对数据结构的要求

  • 要求路由结果稳定且时间复杂度不高。

why选择TreeMap数据结构

  • 稳定 红黑树,具有集合的sorted order特性
  • 时间复杂度log(N)

大致流程

  • 每次路由都需要重建ring,根据"真实节点信息"创建虚拟Node
    • 虚拟node的key:真实ID+"_"+虚拟节点index,如"123456_0"、"123456_1",然后进行hash。
    • 虚拟node的val为真实节点信息
  • 获取大于"待路由key"的节点构成的sortedMap,即treeMap.tailMap(key)
  • 获取距离"待路由key"最近的虚拟节点的key,即sortedMap.isNotEmpty() ? sortedMap.firstKey() : ring.firstKey()
  • key-->虚拟节点-->虚拟节点的val

 

你可能感兴趣的:(技术思考总结,路由算法,路由方式)