【问题标题】:Redis cluster-network latencyRedis 集群-网络延迟
【发布时间】:2015-08-31 07:27:38
【问题描述】:
有一个新的 Redis 集群设置,我知道我公司的一个团队正在研究,以改进基于 Redis 的应用程序数据缓存。设置如下,一个 Redis 集群,有一个 Redis 主服务器和许多从服务器,比如 40-50(但当应用程序扩展时可以增长更多),每个虚拟机一个 Redis 实例。有人告诉我,这种设置有助于部署在每个虚拟机上的服务器中的应用程序查询本地 Redis 实例中存在的数据,而不是查询网络中的实例,以避免网络延迟。定期地,Redis 主服务器仅使用修改或新创建或删除的任何数据(由关系数据库支持的数据)更新,例如每 5 秒左右。这将启动与所有 Redis 从属实例的数据同步操作。 Redis(从属)的数据消费者(部署在所有虚拟机上的应用程序)读取更新的值进行处理。对于应用程序在从数据中心网络内的 Redis 实例进行查询时所面临的网络延迟问题,这种方法是否正确?当 Redis 主节点与其所有从节点同步数据时,此设置不会产生大量网络流量吗?
我在互联网上找不到太多关于此的答案。非常感谢您对此的意见。
【问题讨论】:
标签:
caching
networking
redis
【解决方案1】:
这种架构的相关性很大程度上取决于工作负载。以下是重要的标准:
写入和读取操作之间的比率。显然,读操作越多,架构就越相关。 IMO 的主要好处不一定是延迟增益,而是可扩展性、它带来的额外可靠性以及网络资源消耗。
本地 Redis 访问成本与远程 Redis 访问成本之间的比率。不要假设远程 Redis 访问的唯一成本是网络延迟。它不是。在我的系统上,本地 Redis 访问的成本约为 50 us(平均而言,工作负载非常低),而远程访问的成本约为 120 us(平均而言,工作负载非常低)。网络延迟约为 60 us。使用您自己的数据在您自己的系统/网络上测量相同类型的数据。
以下是一些建议:
不要对多个从属实例使用单个 Redis 主控。它将限制系统的可扩展性。如果要扩展,则需要构建从属的层次结构。例如,让主服务器复制到 8 个从服务器。每个从站复制到在您的 64 个应用程序服务器上本地运行的 8 个其他从站。如果您需要添加更多节点,您可以在主节点或从节点级别调整复制因子,或者在此树中再添加一层以获得极高的可扩展性。它为您带来灵活性。
考虑在应用程序和本地从站之间使用 unix 套接字,而不是 TCP 套接字。如果它对延迟和吞吐量都有好处。
关于您的最后一个问题,您确实需要评估平均本地和远程延迟,以确定这是否值得。请注意,Redis 用于同步主从的协议接近于正常的客户端服务器流量。应用于主机的每个 SET 命令也将应用于从机。因此,网络带宽消耗是相似的。所以说到底,这实际上是你期望读多少和写多少的问题。