戳蓝字“CSDN云计算”关注我们哦!

来源 | 靳刚同学

作者 | 靳刚

致性hash的设计初衷是解决分布式缓存问题,它不仅能起到hash作用,还可以在服务器宕机时,尽量少地迁移数据。因此被广泛用于状态服务的路由功能

01

分布式系统的路由算法

假设有一个消息推送系统,其简易架构如下

设备接入层不仅要接收设备的登录、下线等状态命令,还要把开发者的消息推送给设备。这个时候设备接入层就需要维护设备的状态信息(当然可以专门拆一个状态服务去维护这些信息,要求这部分必须少有代码更新,具体原因自己去想哦=_=)。这个时候设备接入层的每台server都保留一批设备的状态信息cache,设备应该连接哪台server去获取数据,同时中间层的消息又该发往哪个server去推送呢?这就用到了一致性hash算法。

02

什么是一致性hash算法

一致性hash由对象、静态资源段、算法和机器组成。它要做的是:对象通过算法判断连哪台机器。在如上系统中:设备id(userID)为对象;固定号段(cache)为资源段;服务器为机器。

在一致性hash算法中,这些资源段围成了一个闭环,每台机器又保存着目标资源段的数据,每个资源段对应一批对象/设备;这样如果某台机器挂了,那它对应的资源段转移到离它较近的机器x,这台dead server对应的设备连接到机器x就行。

现在假设这四个资源段对应的设备,活跃情况相差较大。比如说资源段1、2对应的设备特别活跃,而资源段3和4几乎没活动。这样机器1-2需要保存大量的状态数据,而3-4则有大量的空置,显然是不合理的。改进版的一致性hash算法是这样操作的:它不再是每台机器去保存一个连续的资源段,而是让每台机器都保存多个区域的部分资源段。如机器1保存每个资源段的1/4,机器2保存每个资源段的1/4,机器3、4同样如此。这样即使个别号段有热点,也会均摊到不同的机器。

03

一致性hash在系统中的应用

如上介绍了一致性hash的概念和改进,在系统实践中,我们用户量非常大,往往不只一个集群。我们是如此使用一致性hash:

  • 首先根据不同号段选择对应的集群,这部分是可配置的

  • 确定集群后,根据一致性hash把设备匹配到server的某个instance上(每台server部署多个设备接入层实例(1.每个instance保存的状态信息更分散;2.服务的gc问题会有缓解)

  • 建立机器虚拟节点:把user逆序(打乱之前连续userId),组成新的资源段;相当于建立了server虚拟节点

  • 记录每台server锁服务的设备数,如果机器A挂了,挑选服务设备数最少的机器去承接kicked-device

04

不是所有情况都适合一致性hash

以上介绍了一致性Hash的原理和实践,但不是所有的服务都适合用一致性hash来路由。比如01节中的消息推送系统,中间层是无状态的,开发者接入层请求cluter-A的哪台机器都行,它只要做完基本校验后,把消息异步发给MQ即可,无需等待结果直接返回; 而设备接入层是有状态的,且对较高时延无法忍受,更适合一致性Hash选择好server-instance,然后通过TCP/UDP来通信。

福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

推荐阅读:

  • mysql表设计要注意什么?

  • 漫话:如何给女朋友解释鸿蒙OS是怎样实现跨平台的?

  • 换脸软件 ZAO 刷屏:你在玩换脸,别人想要你的脸!

  • 只给测试集不给训练集,要怎么做自己的物体检测器?

  • 华为鸿蒙为什么非要碰物联网?

  • Dropout、梯度消失/爆炸、Adam优化算法,神经网络优化算法看这一篇就够了

真香,朕在看了!

给面试官讲明白:一致性Hash的原理和实践相关推荐

  1. 我用动画给大厂的面试官讲明白了 KMP 算法

    大家好,我是一个每天在互联网都被读者催更催到爆肝,爆肾小鹿童鞋. 说实话,一些数据结构和算法我这辈子都不可能用到实际当中,但个人一直觉得能把复杂的东西讲明白是一件很牛逼的事情. 毕竟想牛逼也是很难的, ...

  2. 一文搞懂一致性hash的原理和实现

    在 go-zero 的分布式缓存系统分享里,Kevin 重点讲到过一致性hash的原理和分布式缓存中的实践.本文来详细讲讲一致性hash的原理和在 go-zero 中的实现. 以存储为例,在整个微服务 ...

  3. Mycat(三)——几种分片规则 分库 一致性hash的原理及使用

    文章目录 Mycat分片规则 取模 分库 schema.xml 分片枚举 schema.xml 测试 问题: 固定hash分片 优点 范围约定分片 按日期分区 按天分 一致性HASH 解决什么问题? ...

  4. Java算法之 一致性hash算法原理及实现

    为什么80%的码农都做不了架构师?>>>    一致性hash算法原理及实现 转载于:https://my.oschina.net/90888/blog/1645131

  5. 一致性hash环原理

    转自信仰<一致性hash环原理>(知乎), 吴帝永<一致性Hash算法(hash环)> 1. 为什么需要一致性Hash环 假设我们有N个Cache服务器的Node,我们的要求就 ...

  6. 跟面试官讲Binder(零)

    面试的时候,面试官问你说,简单说一下Android的Binder机制,你会怎么回答? 我想,我会这么说. 在Android启动的时候,Zygote进程孵化出第一个子进程叫SystemServer,而在 ...

  7. 看完此文,必须明白一致性Hash算法

    一致性Hash算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot Spot)问题,初衷和CARP十分相似.一致性Hash修正了CARP使用的 ...

  8. 面试官再问你 HashMap 底层原理,就把这篇文章甩给他看

    来自:烟雨星空 前言 HashMap 源码和底层原理在现在面试中是必问的.因此,我们非常有必要搞清楚它的底层实现和思想,才能在面试中对答如流,跟面试官大战三百回合.文章较长,介绍了很多原理性的问题,希 ...

  9. 查询已有链表的hashmap_面试官再问你 HashMap 底层原理,就把这篇文章甩给他看...

    前言 HashMap 源码和底层原理在现在面试中是必问的.因此,我们非常有必要搞清楚它的底层实现和思想,才能在面试中对答如流,跟面试官大战三百回合.文章较长,介绍了很多原理性的问题,希望对你有所帮助~ ...

最新文章

  1. 关于idea使用SpringMVC配置正确却404问题及解决办法
  2. FPGA之道(12)FPGA芯片的配置方式
  3. 【Vue】component学习笔记
  4. vue实现移动端圆形旋钮插件
  5. Http Handler 介绍
  6. centos7如何添加开机启动服务/脚本
  7. 拜托,面试别再问我堆(排序)了!
  8. Ansys-模态分析基础上的谱分析学习收获
  9. 工商银行区块链专利 为提高证书发放的效率
  10. WxErrorException: 错误代码:40163
  11. 100行代码实现HarmonyOS“画图”应用,eTS开发走起
  12. rust键位失灵_switch手柄按键失灵不响应怎么办 NS手柄按键没反应解决办法
  13. 基于Proteus学习单片机系列(二)——驱动数码管
  14. matlab符号及其运算(1)
  15. Lect2 BFS总结
  16. 【白板推导系列笔记】降维-主成分分析-概率角度(Probabilistic PCA)
  17. torch.nn 和 torch.functional 的区别
  18. MATLAB学习体会(来自小木虫)
  19. 中国省份及其地级市整理JSON版(2015-08-23)
  20. Kali安装常用的软件工具——第二课

热门文章

  1. oracle插入性能优化,Oracle- insert性能优化
  2. 上传文件和提交textfield_0基础掌握Django框架(37)文件上传
  3. 【物理女神】谁是中国第一位物理学女博士?
  4. 某高校刚入职的青年教师工资曝光!
  5. 顶尖机器学习学习路线,6个月让你的技术成为行业TOP5%
  6. 作为一个上市公司HR,跟大家分享一些面试的真相
  7. 清华网红自行车火了!背后是登在《自然》上的黑科技
  8. c语言边序列构造邻接表,结构C语言版期末考试考试(有答案).doc
  9. linux网络编程--数据结构与函数原型
  10. String、StringBuilder和StringBuffer的区别和用法