路由算法总结

目录

内容概述

随机选择

轮询 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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值