分方式缓存常用的一致性hash是什么原理

一致性hash是用来解决什么问题的? 先看一个场景 有n个cache服务器,一个对象object映射到哪个cache上呢? 可以采用通用方法计算object的hash值,然后均匀的映射到到n个cache hash(object) % n 初始阶段运行正常,但当cache服务器发生变动后就会出现问题 例如 (1)一个cache服务器down掉了,这样所有映射到此cache的对象都会失效,需要把此cache移除,这时候映射公式变成了 hash(object) % (n-1) (2)由于访问加重,需要添加cache ,这时候映射公式变成了 hash(object) % (n+1) 这两种情况几乎会使所有的cache都失效,大量的访问都会直接访问后台服务器,造成极大的压力 一致性hash算法就是为了解决普通hash的不足,把损失降到最低 一致性hash的原理 一致性hash将整个哈希值空间组织成一个虚拟的圆环 假设某哈希函数H的值空间为0-2^32-1(2^32为2的32次方) 整个空间按顺时针方向组织,0和232-1在零点中方向重合

把各个cache服务器通过hash计算,根据hash值顺时针排列到圆环上,可以根据服务器的IP或者主机名进行计算 例如有 A B C 三台服务器

现在可以映射object了,映射规则为: 将key使用相同的hash计算出值,并确定此数据在环上的位置,从此位置顺时针行走,第一台遇到的cache服务器就是其应该定位到的服务器 例如有4个object需要映射到cache服务器

根据映射规则 object 1 -> A object 2、3 -> B object 4 -> C 下面看cache服务器的增减情况 (1)移除 例如A出现异常,需要移除

object 1 失效,需要映射到B 受影响的只有object 1 (2)添加 cache压力增加,需要添加服务器,新增cache服务器D

object 2 需要重新映射到D 受影响的只有object 2 可以看到一致性hash比普通hash高效了很多

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-12-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SeanCheney的专栏

《Scikit-Learn与TensorFlow机器学习实用指南》 第12章 设备和服务器上的分布式 TensorFlow

在第 11 章,我们讨论了几种可以明显加速训练的技术:更好的权重初始化,批量标准化,复杂的优化器等等。 但是,即使采用了所有这些技术,在具有单个 CPU 的单台...

1061
来自专栏macOS 开发学习

Mac开发跬步积累(一):Cocoa Drawing 之 NSImage imageNamed: 到底做了什么?

首先,NSImage提供了支持多种格式图像数据进行管理的api, 但是NSImage对被其管理的实际图像数据几乎是一无所知的,这是因为NSImage并没有直接与...

1173
来自专栏AI科技大本营的专栏

十图详解TensorFlow数据读取机制(附代码)

作者 | 何之源 在学习TensorFlow的过程中,有很多小伙伴反映读取数据这一块很难理解。确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料。今天...

39711
来自专栏AI研习社

将 TensorFlow 训练好的模型迁移到 Android APP上(TensorFlowLite)

最近在做一个数字手势识别的APP(关于这个项目,我会再写一篇博客仔细介绍,博客地址:一步步做一个数字手势识别APP,源代码已经开源在github上,地址:Chi...

3723
来自专栏机器之心

教程 | 如何使用Keras、Redis、Flask和Apache把深度学习模型部署到生产环境?

1.3K11
来自专栏Deep learning进阶路

caffe随记(八)---使用caffe训练FCN的pascalcontext-fcn32s模型(pascal-context数据集)

本篇讨论利用caffe进行FCN训练(采用的是pascal-context数据集) 1、下载FCN的框架 https://github.com/shelham...

5130
来自专栏专知

浅显易懂的分布式TensorFlow入门教程

【导读】分布式TensorFlow可以有效地提神经网络训练速度,但它的使用并不简单。虽然官方提供了文档和示例,如链接【1】,但是它们太难懂了。本文是一篇浅显易懂...

3177
来自专栏文武兼修ing——机器学习与IC设计

P2P接口串行FIR设计

配置接口使用寄存器组实现,掉电丢失,因此每次使用之前需要进行配置FIR参数,配置接口时序如下所示:

1484
来自专栏ATYUN订阅号

将Keras深度学习模型部署为Web应用程序

建立一个很酷的机器学习项目确实很不错,但如果你希望其他人能够看到你的作品怎么办呢?当然,你可以将整个项目放在GitHub上,但这只能给程序员看,如果你想给自己家...

5631
来自专栏PaddlePaddle

【进阶篇】在不同的集群框架下完成分布式训练

编写|PaddlePaddle 排版|wangp 本文将介绍如何使用PaddlePaddle在不同的集群框架下完成分布式训练。分布式训练架构如下图所示: ? A...

4055

扫码关注云+社区

领取腾讯云代金券