对特定键的请求可以转到分布式缓存中的不同缓存吗?

Posted

技术标签:

【中文标题】对特定键的请求可以转到分布式缓存中的不同缓存吗?【英文标题】:Can request for a particular key go to different caches in distributed caches? 【发布时间】:2021-05-16 14:22:01 【问题描述】:

我正在尝试深入了解分布式缓存。

比如说,我有 1、2 和 3 个分布式缓存。

假设进程一 p1 尝试将键“K1”和值“Value1”写入缓存。根据密钥,算法确定写入哪个缓存,K1 写入 1。K1 上的读取请求是否有可能转到分区号 2 或 3。或者理想情况下,为了使分区缓存正常工作,请求对 Key 的读取、写入和更新应始终转到特定分区(在这种情况下,对于 K1,所有请求都应始终转到分区 1?)

【问题讨论】:

【参考方案1】:

取决于分布式缓存服务和配置的操作模式

在独立模式下配置服务器的分布式感知客户端

    客户端是此配置中的分发感知代理 客户端使用服务器端点列表初始化 使用散列策略初始化客户端(最好在所有客户端中使用相同的散列策略,以有效检索另一个客户端设置的密钥) 服务器仅充当键/值 为了存储一个键值对,客户端将散列(根据策略)键并将请求转发到相应的服务器进行存储 如果服务器不可用,客户端可以选择回退散列策略来选择不同的服务器(这可以尝试到最后一个服务器)。在这种情况下,不同服务器上的值的协调可能会在网络分区的情况下导致数据不一致。 或者如果服务器不可用,客户端可以简单地不存储在缓存中并返回错误

从设置的角度来看,这很容易和简单,但从扩展和调试的角度来看,这会有点困难。

服务器处于集群模式,客户端仅作为代理

    服务器是此配置中的分布感知代理 服务器设置为 quoram,每个服务器都知道所有其他服务器 使用一些一致的散列策略初始化服务器,以在节点故障时处理负载和有效恢复 每个服务器都知道分配给其他每个服务器的键分区,因此可以转发请求 客户端配置了一组服务器 客户端可以调用任何服务器,服务器集群负责将请求委托给正确的服务器并将响应返回给客户端

这种组合的变体可以混合客户端和服务器中的分发意识。但它通常更倾向于将逻辑保留在一侧,以便在出现问题时进行高效调试

共识

或者,如果您正在寻找数据量小的共识系统(可以有高读取和低写入),那么请关注

    基于 ZAB 的设计(动物园管理员) 基于 Raft 的设计 (etcd) 基于 Paxos 的设计(Google 的分布式共识系统可能基于 Paxos)

【讨论】:

以上是关于对特定键的请求可以转到分布式缓存中的不同缓存吗?的主要内容,如果未能解决你的问题,请参考以下文章

可以为特定项目禁用 Qt 5.8 中的 QML 缓存吗?

读书笔记深入分布式缓存 第一章

19 分布式缓存集群的伸缩性设计

19 分布式缓存集群的伸缩性设计

19 分布式缓存集群的伸缩性设计

Django中的缓存机制