我有一个golang服务(2个荚),使用部署在kubernetes中的redis集群(每个主服务器3个主服务器和1个从服务器),所有的redis节点都隐藏在kubernetes的集群ip后面。当对我的golang服务进行负载测试时,我发现所有的redis请求都只会发送到一个节点(不确定为什么会发生这种情况,根据文档副本,还将使用它从redis读取数据,而且由于服务上有2个豆荚在任何时候都在运行,所以我们应该能够从2个副本读取数据)。
用于golang服务的上下文
Golang服务在应用程序开始时只打开一个连接,并使用它从redis获取数据。
发布于 2021-07-14 14:33:29
Golang服务在应用程序开始时只打开一个连接,它正在使用该连接从redis获取数据。
这就是为什么。当应用程序打开连接时,它当然会被路由到副本之一。在保持连接打开之前,您将对所有请求使用相同的副本。这与kubernetes服务的工作方式无关。
一个简单的解决方案是每次您需要redis客户端时打开一个新连接,但这当然会带来性能损失。
另一种选择是在客户端打开一个连接池并使用所有这些连接。每个连接都应该在一个不同的副本中结束,这样,您应该更好地分散负载。
https://stackoverflow.com/questions/68379958
复制相似问题