欢迎光临散文网 会员登陆 & 注册

分布式缓存的设计方案与策略

2023-07-30 23:28 作者:小技术君  | 我要投稿

分布式缓存

分布式缓存将频繁访问的数据存储在多个节点的内存中。缓存的数据被分区到许多节点上,每个节点仅存储缓存数据的一部分。节点将数据存储为键值对,其中每个键被确定性地分配给特定的分区或分片。当客户端请求数据时,缓存系统从适当的节点检索数据,减少了对后备存储的负载。

有不同的分片策略,包括模数、基于范围和一致性哈希。

模数分片

模数分片涉及将键分配给一个分片,该分片基于键的哈希值对分片总数取模。虽然这种策略很简单,但当分片的数量增加或减少时,它可能导致许多缓存未命中。这是因为当池的大小调整时,大多数键将被重新分配到不同的分片中。

图片

基于范围的分片

基于范围的分片根据预定义的键范围将键分配给特定的分片。使用这种方法,系统可以将键空间分成特定的范围,然后将每个范围映射到特定的分片。基于范围的分片对于某些业务场景非常有用,其中数据自然地分组或分区在特定的范围内,例如基于地理位置的数据或与特定客户段相关的数据。

图片

但是,这种方法也可能难以扩展,因为分片的数量是预定义的,不能轻松更改。更改分片的数量需要重新定义键范围并重新映射数据。

一致性哈希

一致性哈希是一种广泛使用的分片策略,提供比其他分片方法更好的负载平衡和容错能力。使用一致性哈希,键和节点都映射到固定大小的环上,使用哈希函数将每个键和节点分配到环上的位置。

图片

当请求一个键时,系统使用相同的哈希函数将键映射到环上的位置。然后,系统从该位置顺时针遍历环,直到到达第一个节点。该节点负责存储与该键相关联的数据。向系统添加或删除节点仅需要重新映射以前存储在受影响节点上的键,而不是重新分配所有键,使得使用有限的数据重新哈希可以轻松更改分片的数量。

缓存策略

在本文中,我们将深入分析各种缓存策略、它们的特点和适用的用例。

缓存策略可以根据它们处理读取或写入数据的方式进行分类:

1.读取策略:缓存旁路和读取穿透2.写入策略:写入旁路、写入穿透和写入回写

读取策略

缓存旁路

缓存旁路,也称为惰性加载,是一种流行的缓存策略,其中应用程序直接与缓存和存储系统通信。它遵循特定的读取数据工作流程:

1.应用程序从缓存请求一个键。2.如果在缓存中找到该键(缓存命中),则将数据返回给应用程序。3.如果在缓存中未找到该键(缓存未命中),则应用程序继续从存储中请求该键。4.存储将数据返回给应用程序。5.应用程序将键和相应的数据写入缓存以供将来读取。

图片

缓存旁路

缓存旁路是通用的,因为它可以适应各种用例,并且适应读取密集的工作负载。

优点:

•系统可以容忍缓存故障,因为它仍然可以从存储中读取。•缓存中的数据模型可以与存储中的数据模型不同,为各种用例提供了灵活性。

缺点:

•应用程序必须管理缓存和存储,使代码复杂化。•由于缺乏缓存和存储上的原子操作,确保数据一致性是具有挑战性的。

在使用缓存旁路时,必须考虑其他潜在的数据一致性问题。例如,如果将一条数据写入缓存,并且之后更新了存储中的值,则应用程序只能从缓存中读取过时的值,直到它被驱逐。解决此问题的一种方法是为每个缓存记录设置可接受的生存时间(TTL),确保过时数据在一定时间后变得无效。对于更严格的数据新鲜度要求,应用程序可以将缓存旁路与下面讨论的写入策略之一相结合。

读取穿透

读取穿透策略是另一种常见的缓存方法,其中缓存作为应用程序和存储系统之间的中介,处理所有读取请求。这种策略通过将数据检索责任委托给缓存来简化应用程序的角色。读取穿透特别适用于读取密集的工作负载,并且通常用于缓存库和一些独立缓存提供程序中。读取穿透的基本工作流程如下:

1.应用程序请求从缓存读取一个键。2.如果在缓存中找到该键(缓存命中),则将数据返回给应用程序。3.如果在缓存中未找到该键(缓存未命中),则缓存从存储中请求该键。4.缓存从存储中检索数据,将键和相关数据写入缓存,并将数据返回给应用程序。

分布式缓存的设计方案与策略的评论 (共 条)

分享到微博请遵守国家法律