redis - 不均匀的缓存命中

标签 redis amazon-elasticache twemproxy

我已经将 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/

相关文章:

amazon-web-services - 使用 ElastiCache redis 服务器和密码解析服务器

redis - Redis 2.8 到 3.x 的增量是多少?

python - 如何在 Django 中设置 Memcached 检索超时

ruby-on-rails - Redis:在 httparty 客户端中正确缓存来自 API 的响应,根据 api 响应中的缓存 header 使缓存过期

amazon-web-services - 从 ElasticBeanstalk EC2 到 Redis (ElastiCache) 的连接失败

redis - Twemproxy/nutcracker是否支持Redis的MGET命令

redis - 我可以使用 twemproxy 通过 redis 队列大小进行负载平衡吗?

.net - .net ServiceStack.Redis 客户端的 twemproxy(胡桃夹子)性能下降

python-3.x - redis - 如何创建事务

redis - Redis 集合中管理按需缓存的成语