使用 AWS ElastiCache for Redis 的终端节点

Using endpoints of AWS ElastiCache for Redis

我将 AWS ElastiCache 用于 Redis 作为我的 spring-boot 应用程序的缓存解决方案。我正在使用 spring-boot-starter-data-redisjedis 客户端连接我的缓存。

假设我在 cluster-mode-enabled 和 3 个分片中有我的缓存,每个分片有 2 个节点。我同意最好的方法是使用 configuration-endpoint。或者,我可以列出所有节点的所有端点并让工作完成。

但是,即使我使用来自其中一个分片的单个节点端点,我的缓存解决方案也能正常工作。这对我来说不合适。我觉得即使它有效,也可能在 long 运行 的集群中出现问题。当总共有 6 个节点被分成 3 个分片但只使用一个节点的端点时。我有以下问题。

使用一个节点的端点是否会在集群中造成不平衡?

是否由 AWS ElastiCacheRedis 自动处理?

如果我只使用一个节点的端点是否意味着其他节点永远不会被使用?

谢谢!

回答您的问题;

  1. 使用一个节点的端点是否会在集群中造成不平衡? 否

  2. 这是由 AWS ElastiCache for Redis 自动处理的吗? 有点

  3. 如果我只使用一个节点的端点是否意味着其他节点将永远不会被使用? 没有。所有节点都在使用中。

这就是启用集群模式的工作原理。在您的情况下,您有 3 个分片,这意味着您的所有插槽(存储 key-value 数据的位置)被分为 3 个 sub-clusters 即。碎片。

此答案中也对此进行了解释 -

因此,从本质上讲,您的节点足够智能,可以 re-direct 您向需要存储数据的 key-slot 节点发送请求。所以,没有不平衡。 Redis 为您处理重定向。

现在,在使用 Node 端点时,您将面临其他问题。 Elasticache 运行 在云端(本质上是 AWS 硬件)。所有硬件都面临问题。您有 3 个主节点(1p、2p、3p)和 3 个(1r、2r、3r)副本。 因此,如果主节点由于硬件问题(比如 1p)而宕机,副本将被提升为集群的新主节点 (1r)。 现在的问题是,您的应用程序直接连接到现在已降级为副本的 1p。所以,所有的 WRITE 操作都会失败。

每当发生这种情况时,您都必须手动更改应用程序代码。

或者,如果您使用的是配置端点(或其他集群级端点)而不是 node-endpoints,这个问题最多只会对您的应用程序造成影响,可能持续 1-2 秒。

干杯!