http://memcached.org/about
问候所有,我喜欢memcached,但迄今为止只用于单机设置作为本地caching。 我已经广泛地阅读了关于memcached的分布式特性以及客户端如何确定要写入和读取的memcached服务器列表中的哪一个。 根据我的理解,通过select确定性散列algorithm,我们可以确保始终将数据写入正确的服务器并从正确的服务器读取,而不pipe请求来自何处。
所以,我的问题是,考虑以下情况:
服务器A在纽约,服务器B在洛杉矶。 两者都是彼此的镜像。 两个正在运行与复制的MySQL数据库。 在只读的情况下并不重要,但可以说A是主,B是奴隶。 两者都在运行memcached,并且他们的客户端有一个memcached服务器列表(在这种情况下是服务器A和B)。
某个数据,比如说博客文章的主体,是从服务器A的数据库中读取的,因此存储在A的memcached中。 不同地区的不同用户访问服务器B并请求相同的博客post。 服务器B的memcached客户端检查并确认这个数据已经被caching了,所以它到达OVER THE NETWORK从服务器A的memcached抓取这些数据。
现在,首先,我的理解到目前为止是正确的? 请指出我所做的任何错误或不正确的假设:)。
所以,我的问题是,这应该如何提高性能? 在这种情况下,更好的计划似乎是让服务器A和服务器B都将自己独立的memcached实例作为本地caching运行( http://memcached.org/about中的顶层数字),但这种做法是不合适的分布式devise的整体思路。 那么分发的优势是什么呢? 从服务器B到服务器A的networking操作比服务器B从它自己的本地数据库读取要慢。
请帮我理解。 我觉得在这里我基本上忽略了memcached是如何工作的。
谢谢! ķ
你的问题的简短答案是:不是。
分布式memcached在您的系统能够从caching中检索有效答案的地方是有意义的,而不是花费大量的查找/计算才能得到正确的答案。
在memcached的情况下,可能在60-100ms或更长的时间内通过互联网进行交谈,实际上没有什么可以获得的。 很有可能你的系统能够快速查找/计算正确的答案,比在互联网中间的caching中find正确的答案要快得多。
在memcached节点之间需要千兆(或更快)的networking来获得任何性能优势。 您的设置旨在用于故障切换和基于地理位置的性能。 如果你的服务器A和B真的是A1,A2和B1,B2 memcached可能适合你。