25|一致性哈希:如何在集群上合理分配流量?
黄清昊
该思维导图由 AI 生成,仅供参考
你好,我是微扰君。
上一讲我们学习了在分布式系统中,生成全局唯一 ID 的两种方式,既可以通过引入独立组件远程调用申请 ID,也可以通过约定的方式让各个节点独立生成唯一 ID。
那对于有多个节点的服务,其他服务或者客户端在访问这个服务的时候,具体应该访问哪一个节点呢?
负载均衡问题
大部分情况下,我们都希望集群在分配流量时,能够比较均衡或者按照某种预期的权重比例,这样每个机器都可以得到比较充分的使用,也不容易出现单点服务过载的情况,能够发挥集群的最大价值。
如何分配流量的问题,也通常被称为负载均衡问题,根据不同的业务需要,解决的方式也很多。
比如最直接的,我们可以引入一个中间的负载均衡层,集中记录收到的请求序号;然后按照 Round-Robin 的轮询方式,轮流将外界的请求转发给内部的服务集群,或者直接用随机转发的方式也可以。当然你也可以引入权重,让这两种算法对流量的分配不是均匀的,而是按照一定比重分配在不同的机器上。这两种算法也被称为加权轮询和加权随机。
其实,不止可以通过引入中间层实现,如果整个系统完全可信、可控,你也可以让客户端自己按照随机或轮询的策略,直接调用需要负载均衡的服务,同样可以达到负载均衡的效果。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
一致性哈希算法是解决分布式系统中负载均衡问题的有效方案。传统的负载均衡算法无法满足有状态请求或服务的需求,而一致性哈希算法通过哈希映射客户端ID到服务器节点,实现了对有状态请求的负载均衡,同时避免了引入额外的状态记录。该算法能够有效解决分布式系统中的负载均衡问题,保证请求能够正确地发送到指定的服务器节点,并且能够应对系统扩容等情况。文章通过实际案例和技术原理深入浅出地介绍了一致性哈希算法的应用和优势,对于理解分布式系统中负载均衡问题的读者具有很高的参考价值。文章还提到了一致性哈希算法的实现,通过Golang内置的数据结构和方法,简洁地解决了负载均衡问题。总之,一致性哈希算法是一种高效且可靠的负载均衡解决方案,对于分布式系统的设计和实现具有重要意义。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《业务开发算法 50 讲》,新⼈⾸单¥59
《业务开发算法 50 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- peter请教老师两个问题: Q1:长连接网关的问题 A 长连接网关有开源框架吗? B 长连接是双向还是单向的? 比如客户端连接到长连接网关,网关到客户端一直有数据流量,需要一直处于连接状态, 但是,客户端到网关数据量小,需要一直处于连接状态吗? (不过好像连接不可能是一个方向通而一个方向不通啊,哈) Q2:节点2移除后为什么需要移动4和3? 在“节点数量变化问题”部分,节点2下线后,为什么要移动4和3? Q3:实现部分,例子是练习LRU吗? “能很好地帮助你练习 LRU”,这句话是说此例子可以用来练习LRU。 应该是练习一致性Hash吧。
作者回复: Q1 网上有一些开源的推送组件 不过个人觉得和业务耦合比较紧密;开源的不多。 我们的长连是双工的。 Q2: 因为采用传统hash取模的方式,如果模数如果变化了,相应的节点数据肯定要搬迁的。 Q3: 我的项目里也实现了LRU。
2022-02-172 - 尔冬橙没有讲扩容或者缩容时,本来请求路由的问题2022-10-19归属地:湖南
- 尔冬橙讲的真好2022-10-19归属地:湖南
收起评论