大家好,我喜欢 memcached,但到目前为止,我只在单机设置中将其用作本地缓存。我广泛阅读了有关 memcached 的分布式特性以及客户端如何确定要写入和读取的 memcached 服务器列表中的哪个服务器的文章。据我所知,通过选择确定性哈希算法,我们可以确保数据始终写入和读取正确的服务器,无论请求来自何处。
因此,我的问题是,考虑以下情况:
服务器 A 在纽约,服务器 B 在洛杉矶。两者互为镜像。两者均运行具有复制功能的 mysql 数据库。在只读的情况下,这并不重要,但假设 A 为主服务器,B 为从服务器。两者均运行 memcached,并且其客户端具有 memcached 服务器列表(在本例中为服务器 A 和 B)。
某段数据(比如博客文章正文)从服务器 A 的数据库读取,然后存储在 A 的 memcached 中。不同国家/地区的不同用户访问服务器 B 并请求同一篇博客文章。服务器 B 的 memcached 客户端检查发现该数据确实已被缓存,因此它通过网络从服务器 A 的 memcached 中获取该数据。
现在,首先,我目前的理解正确吗?请指出我所犯的任何错误或不正确的假设:)。
那么,我的问题是,这应该如何提高性能?在这种情况下,似乎更好的计划是让服务器 A 和服务器 B 都运行各自的 memcached 实例作为本地缓存(图 2 中的上图http://memcached.org/about),但这违背了分布式设计的整体理念。那么分布式有什么好处呢?从服务器 B 到服务器 A 的网络操作比服务器 B 从自己的本地数据库读取要慢得多。
请帮我理解一下。我感觉我在这里根本就不了解 memcached 的工作原理。
谢谢!K
答案1
对你的问题的简短回答是:不是。
分布式 memcached 很有意义,因为您的系统可以从缓存中检索有效答案,而不需要进行昂贵的查找/计算来获取正确答案。
对于 memcached 来说,通过互联网进行通信的延迟可能为 60-100 毫秒或更长,实际上并没有什么好处。您的系统查找/计算正确答案的速度可能比在互联网另一端的缓存中找到正确答案的速度快得多。
您需要在 memcached 节点之间建立千兆(或更快)网络才能获得任何性能优势。您的设置是为故障转移和基于地理位置的性能而设计的。如果您的服务器 A 和 B 实际上是 A1、A2 和 B1,那么 B2 memcached 可能适合您。