我将AWS ElastiCache
用于Redis
,作为spring-boot
应用程序的缓存解决方案。我正在使用spring-boot-starter-data-redis
和jedis
客户端连接我的缓存。
想象一下,我在集群模式下启用了缓存,并且有3个碎片,每个碎片有2个节点。我同意,那么最好的方法是使用配置端点。或者,我可以列出所有节点的所有端点,然后完成任务。
然而,即使我使用其中一个碎片中的单个节点的端点,我的缓存解决方案也能工作。这在我看来不太合适。我觉得即使它有效,从长远来看,这可能会导致集群出现问题。当所有6个节点都被分割成3个碎片,但只使用一个节点的端点时。我有以下问题。
使用一个节点的端点是否会在集群中造成不平衡?
或
这是由AWS ElastiCache
为Redis
自动处理的吗?
如果我只使用一个节点的端点,这是否意味着其他节点永远不会被使用?
谢谢!
回答您的问题;
-
使用一个节点的端点是否会在集群中造成不平衡?无
-
这是由AWS ElastiCache for Redis自动处理的吗?某种
-
如果我只使用一个节点的端点,这是否意味着其他节点永远不会被使用?否。所有节点都在使用中。
这就是启用群集模式的工作方式。在您的案例中,您有3个碎片,这意味着您的所有插槽(存储键值数据的位置(都被划分为3个子集群,即碎片。
这个答案也解释了这一点——https://stackoverflow.com/a/72058580/6024431
因此,从本质上讲,您的节点足够智能,可以将您的请求重定向到具有需要存储数据的密钥槽的节点。因此,没有失衡。Redis为您处理重定向。
现在,在使用节点端点时,您将面临其他问题。Elasticache运行在云端(本质上是AWS硬件(。所有硬件都面临问题。您有3个主副本(1p、2p、3p(和3个副本(1r、2r、3r(。因此,如果主服务器由于硬件问题(比如1p(而停机,则复制副本将升级为群集的新主服务器(1r(。现在的问题是,您的应用程序直接连接到1p,而1p现在已降级为副本。因此,所有的WRITE操作都将失败。
无论何时发生这种情况,您都必须手动更改应用程序代码。
或者,如果您使用配置端点(或其他集群级端点(而不是节点端点,那么这个问题对您的应用程序来说最多只是一个小问题,可能会持续1-2秒。
干杯!