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

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

640?wx_fmt=jpeg

来源 | 靳刚同学

作者 | 靳刚

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

01

分布式系统的路由算法

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

640?wx_fmt=png

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

02

什么是一致性hash算法

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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来通信。

640?wx_fmt=png

640?wx_fmt=jpeg

福利

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

640?wx_fmt=jpeg

推荐阅读:

  • mysql表设计要注意什么?

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

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

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

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

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

真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python读取excel列数据库_python中读取excel数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

mysql如何逻辑删除_mysql逻辑删除如何恢复

在项目中,一般会遇到这种情况:逻辑删除以及多关联不删除逻辑删除(软删除):逻辑删除就是对要被删除的数据打上一个删除标记,通常使用一个is_deleted字段标示行记录是不是被删除(或者使用一个status字段代表所谓的“删除”状态)&…

手把手,教你用MaxCompute+OpenSearch搭建分布式搜索引擎

摘要: 最近,经常有客户咨询如何低成本搭建高性能的海量数据搜索引擎,比如实现公众号检索、影讯检索等等。由于客户的数据在阿里云上,所以希望找到云上解决方案。笔者开始调研一些云上产品,很多人向我推荐了OpenSearch&…

再获绿色等级5A称号!揭开腾讯数据中心节能环保黑科技

9月3日北京,腾讯目前位于深圳最大的数据中心,“腾讯光明中国移动|万国数据数据中心二期”荣获运行5A绿色数据中心称号,达到了“数据中心绿色等级评估”的最高等级。该数据中心绿色分级评估由ODCC联合中国信通院、绿色网格TGGC发起&#xff0c…

MaxCompute_2_MaxCompute数据迁移文档

摘要: 乍一看标题会以为是不是作者写错了怎么会有从MaxCompute到MaxCompute迁移数据的场景呢在实际使用中已经有客户遇到了这种场景比如两个网络互通的专有云环境之间数据迁移、公共云数加DataIDE上两个云账号之间数据迁移、还有网络不通的两个MaxCompute项目数据迁…

printf 指针地址_指针搞都不懂,好意思说自己会C语言?

C语言面试必问知识点之「指针」一、指针相关概念指针与地址我们使用的计算机,系统为了更好地管理我们的内存,就为内存区的每一个字节都分配一个唯一编号,这就是“地址”。指针的实质就是地址,就是这一个个编号。指针变量变量在编译…

mysql 前端proxy_mysql-proxy中间件使用

下载安装mysql_proxy:解压后,该目录包含已经编译好的二进制文件.可以通过mysql-proxy --help查看帮助1: 利用mysql_proxy实现负载均衡执行mysql_proxy./mysql-proxy-path/bin/mysql-proxy \--proxy-backend-addresses192.168.1.199:3306 \--proxy-backend-addresses192.168.1.2…

开启数据科学职业生涯的8个基本技巧

摘要: 本文为数据科学家开创数据科学事业铺平了道路。只要按照这八个小贴士来做,你就能让自己的职业生涯有一个良好的开端。Nick Bostrom(译者注:Nick Bostrom是牛津大学哲学系的教授,是人类未来研究院的创始人和主任。…

WIAC上,华为展区都有点儿啥?

戳蓝字“CSDN云计算”关注我们哦!谈及计算产业的变迁,我们了解到其先后经历了大型计算机、小型机/x86服务器阶段,并同时开创了敏捷、创新、体验好、省成本的Cloud 1.0以及Cloud 2.0时代,在云计算、5G与AI等创新技术不断叠加发展的…

【技术系列】浅谈GPU虚拟化技术(第一章)

摘要: GPU深度好文系列,阿里云技术专家分享 第一章 GPU虚拟化发展史 GPU的虚拟化发展历程事实上与公有云市场和云计算应用场景的普及息息相关。如果在10年前谈起云计算,大部分人的反应是“不知所云“。但是随着云计算场景的普及,概…

检测到目标FTP服务可匿名访问

漏洞名称:检测到目标FTP服务可匿名访问 解决方案:关闭FTP服务可匿名访问 具体操作步骤如下 #编辑 vim /etc/vsftpd/vsftpd.conf #修改 anonymous_enableYES 为 NO #保存退出 #重起服务 /etc/init.d/vsftpd restart 生效漏洞1参考连接: htt…

pythonpygame中主函数_从0开始学Python-14.2 pygame的核心对象

Surface Objects(平面对象) 和窗口Surfaceobjects代表了一个巨型的2D图像,这个2D图像上的点可以通过pygame的drawing函数来更改并展示到屏幕上。pygame上的大多数控件都是Surfaceobjects。但是游戏的外边框、标题栏、按钮不是Surfaceobjects。尤其是,pyg…

php如何删除数据mysql数据库_php如何删除数据库

php如何删除数据库1、首先查看有哪些数据库2、使用php删除test2<?php $dbhost localhost; // mysql服务器主机地址$dbuser root; // mysql用户名$dbpass root; // mysql用户名密码$conn mysqli_connect($dbhost, $dbuser, $dbpass);if(! $conn ){die(连接失败: . mysq…

Mac 神兵利器(二) 极简软件清单

摘要&#xff1a; 作为一个非常爱好折腾的Mac重度用户&#xff0c;在尝试了不少于50次重装系统经历以及安装了几乎所有软件类别的N多软件后&#xff0c;决定分享一下自己的软件清单。 选择app的三个原则&#xff1a; 尽量使用系统原生软件&#xff0c;比如日历&#xff0c;提醒…

解决 idea 运行 Spring Boot 项目启动慢的问题

同事win10启动Spring Boot工程只要3秒左右&#xff0c;我的启动要30秒。开始以为是CPU差距太大&#xff0c;后来才觉得不是这样&#xff01; 解决方案 hostname命令查看自己的 hostname 注意修改 hosts 文件时&#xff0c;ip 与域名之间要换成两个 tab 键。 127.0.0.1 PC-2…

亚马逊首席科学家李沐「实训营」国内独家直播,马上报名 !

开学了&#xff0c;别人家的学校都开始人工智能专业的学习之旅了&#xff0c;你呢&#xff1f;近年来&#xff0c;国内外顶尖科技企业的 AI 人才抢夺战愈演愈烈。华为开出200万年薪吸引 AI 人才&#xff0c;今年又有 35 所高校新增人工智能本科专业&#xff0c;众多新生即将开展…

Windows Server Version 1709 管理之入门篇

摘要&#xff1a; 相信有部分同学们会有这样的体验&#xff0c;在公有云上购买了Windows Server Version 1709数据中心版的虚拟机&#xff0c;通过远程连接进去之后&#xff0c;里面全是黑乎乎的一个命令行&#xff0c;其它啥也没有。这&#xff0c;一脸懵懂啊。 相信有部分同学…

切面是异步还是同步操作‘_细说JS异步发展历程

知其然知其所以然&#xff0c;首先了解三个概念&#xff1a;1.什么是同步&#xff1f;所谓同步&#xff0c;就是在发出一个"调用"时&#xff0c;在没有得到结果之前&#xff0c;该“调用”就不返回。但是一旦调用返回&#xff0c;就得到返回值了。换句话说&#xff0…

数据科学家需要掌握的10项统计技术,快来测一测吧

摘要&#xff1a; 本文给出了数据科学应用中的十项统计学习知识点&#xff0c;相信会对数据科学家有一定的帮助。无论你是不是一名数据科学家&#xff0c;都不能忽视数据的重要性。数据科学家的职责就是分析、组织并利用这些数据。随着机器学习技术的广泛应用&#xff0c;深度学…

java获取mysql的自增列_java - MyBatis如何获取Mysql自增id

问 题INSERT INTO USER(name,age,address,loan_type)VALUES(#{name},#{age},#{address},#{loanType});user表中id自增&#xff0c;添加过一条数据后&#xff0c;可以得到主键id&#xff1b;DEBUG [main] - > Preparing: INSERT INTO USER(name,age,address,loan_type) VALUE…