memcached是否在谷歌应用引擎中的服务器之间共享?

时间:2009-08-09 21:23:25

标签: google-app-engine memcached

在memcached网站上,它说memcached是一个分布式内存缓存。这意味着它可以跨多个服务器运行并保持某种一致性。当我在谷歌应用引擎中发出请求时,同一服务器中的请求很可能会被同一服务器提供服务。

我的问题是,有两台服务器正在处理我的请求,这两台服务器的memcached视图是一样的吗?也就是说,我把memcached放在一个服务器上的东西反映在另一个服务器的memcached实例中,还是这两个完全独立的memcached实例(每个服务器一个)?

具体来说,我希望每个服务器实际运行自己的memcached实例(在其他memcached实例中没有复制)。如果这两个memcached实例相互更新有关对它们所做的更改,是否有办法禁用它?

如果这些问题很愚蠢,我很抱歉,因为我刚刚开始阅读它,但这些是我遇到的初步问题。感谢。

4 个答案:

答案 0 :(得分:12)

App Engine并不真正使用memcached,而是与API兼容的重新实现(主要是same guy,我相信 - 在他的“20%时间”; - )。

缓存值可能随时消失(通过显式到期,一台服务器崩溃,或者由于内存稀缺,在这种情况下,它们被最近最少使用的订单驱逐等),但是如果它们没有当不同服务器查看时,它们会保持一致。

答案 1 :(得分:4)

所选的memcached服务器不依赖于您正在使用的实体组(实体组是来自数据存储区的概念,不同的野兽)。

每个服务器都运行自己的memcached实例,每个服务器将存储您在memcache中存储的对象的百分比。它的工作方式是,当您使用memcached API在给定键下存储某些内容时,会选择一个memcached服务器(基于该键)。

memcached实例之间没有复制,如果其中一个框出现故障,则会丢失1 / N的memcached'数据(N是在AppEngine中运行的memcached实例的数量)。

答案 2 :(得分:2)

通常,memcached不会在服务器之间共享数据。应用程序服务器散列密钥以选择memcached服务器,然后与该服务器通信以获取或设置数据。

答案 3 :(得分:0)

根据我所知,整个应用程序中只有一个实例的Memcache,可能有许多代码运行每个实例及其内存,以及世界各地的许多数据存储区,但是一次只有一个Memcache服务器,请记住,这很容易受到故障服务的影响,即使它没有SLA。