我已经将 twemproxy 集成到 web 层并且我有 6 个 Elasticache(1 个主副本,5 个只读副本)在每次测试中仍然执行了几次负载测试,我得到了相同的结果。我有单独的数据引擎写入该集群的主节点,其余 5 个副本与其同步。所以我使用 twemproxy 只是为了从 Elasticache 读取数据,而不是为了分片。所以我的简单问题是,为什么我在 Elasticache 的单个只读副本上获得了 90% 的命中,它应该在所有只读副本中平均分配命中吗?对吧?
提前致谢
最佳答案
我记得 Twemproxy 会散列所有内容。这意味着它将尝试在您提供给它的主人之间拆分 key 。如果你有一个主机,这意味着它会将所有内容散列到一台服务器上。因此,就它而言,您只有一台服务器来处理可接受的查询。因此,在这种情况下它对您没有帮助。
如果您希望有一个单一端点在一组相同的从站之间分发读取,您需要在从站前面放置一个 TCP 负载均衡器,并让您的应用程序与负载均衡器的 IP:port 通信。常见的选项是基于软件的 Nginx 和 HAProxy,在 AWS 上你可以使用他们的负载均衡器,但你可能会遇到各种无法控制的资源限制,几乎任何硬件负载均衡器都可以正常工作(尽管这很难,如果在 AWS 上并非不可能)。
使用哪种负载均衡器取决于您(或您的人员)对每个选项的熟悉程度和知识水平。
关于redis - 不均匀的缓存命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32322612/