缓存分片中的哈希算法与一致性哈希算法

什么是缓存分片

在高并发场景下,缓存往往成为了瓶颈。这时候,我们可以通过缓存数据分片的方式来解决问题。所谓缓存数据分片,就是将缓存数据按照一定的规则分成多个片段,每个片段由不同的缓存节点负责。这样做有两个好处:

第一,能够降低单个缓存节点的负载压力,提高缓存的并发性能。如果单个缓存节点存储大量数据,在高并发的访问中容易造成缓存击穿或缓存雪崩等问题,从而导致系统性能下降。采用缓存数据分片后,每个缓存节点存储的数据量变少,可以有效避免这些问题的发生。

第二,缩短缓存查找时间,提高缓存的命中率。在缓存中查找数据需要一定的时间,如果缓存的数据量很大,查找时间就会变长,从而降低缓存的命中率。采用缓存数据分片后,每个缓存节点存储的数据比较少,缩短了查找时间,提高了缓存的命中率。

在缓存分片中,常用的2种算法:哈希算法与一致性哈希算法。

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。常见的Hash函数有:MD4,MD5,SHA-1等

哈希算法

哈希算法通过某种哈希算法散列得到一个值,按该值将数据分配到集群响应节点进行缓存,哈希算法在扩展缓存节点时,取模参数也需要更改,并且所有节点的缓存都受影响。

一致性哈希算法

一致性哈希算法将整个哈希值空间映射成一个按顺时针方向组织的虚拟圆环,使用哈希算法算出数据哈希值,然后根据哈希值的位置沿圆环顺时针查找,将数据分配到第一个遇到的集群节点进行缓存。

实现思路:

1.对不同节点服务器的某些参数(mac地址、IP地址等)进行hash计算,用hash值对2^32取模,确定当前服务器落在环某一个节点上

2.数据存储时,对指定的key进行hash计算,然后用hash值对2^32取模,确定数据落在环的哪一个节点上,得到环的节点值之后,顺时针方向找到遇到的第一台服务器,这台服务器就是存储当前数据的地方。

一致性哈希算法有两大优点:

减少节点:服务器2发生故障,存在上面的数据都需要迁移,那么,此时只需要迁移服务器1与服务器2之间的数据B、C到服务器3即可。

增加节点:在数据B、C之间添加服务器4,那么只需要迁移存储在服务器2上的数据B到服务器4即可。

1)可扩展性。一致性哈希算法保证了增加或减少服务器时,数据存储的改变最少,相比传统哈希算法大大节省了数据移动的开销。

2) 更好地适应数据的快速增长。

相关推荐
I_belong_to_jesus9 小时前
C++关于分支预测的优化1
开发语言·c++·算法
威嵌神州11 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
Code_Solitude16 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司16 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
YLCHUP18 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
思麟呀19 小时前
背包DP(01背包+完全背包)
c++·算法
笑容掩饰我的失落20 小时前
区块链从小白到精通(七):Solidity 语法精讲——数据类型、函数、修饰器与事件
算法·区块链·php·智能合约·哈希算法
Pniubi21 小时前
力扣24. 两两交换链表中的节点(递归)
算法·leetcode·链表
nice_lcj52021 小时前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru