Google app engine 谷歌应用引擎/云主机中的缓存

Google app engine 谷歌应用引擎/云主机中的缓存,google-app-engine,caching,Google App Engine,Caching,我很好奇缓存在谷歌应用程序引擎或任何基于云的应用程序中是如何工作的。由于不能保证请求被发送到同一台服务器,这是否意味着如果在服务器A上的第一个请求上缓存数据,那么在服务器B处理的第二个请求上,它将无法访问缓存 如果是这种情况(缓存仅在服务器本地),请求使用缓存的可能性(取决于用户数量)是否不大?谷歌可能有数千台服务器,你可以使用memcached缓存appengine。这意味着缓存服务器将把数据保存在内存中(而不是每个应用服务器)。应用程序服务器(对于给定的应用程序)都与同一个缓存服务器通信(从

我很好奇缓存在谷歌应用程序引擎或任何基于云的应用程序中是如何工作的。由于不能保证请求被发送到同一台服务器,这是否意味着如果在服务器A上的第一个请求上缓存数据,那么在服务器B处理的第二个请求上,它将无法访问缓存


如果是这种情况(缓存仅在服务器本地),请求使用缓存的可能性(取决于用户数量)是否不大?谷歌可能有数千台服务器,你可以使用memcached缓存appengine。这意味着缓存服务器将把数据保存在内存中(而不是每个应用服务器)。应用程序服务器(对于给定的应用程序)都与同一个缓存服务器通信(从概念上讲,可能会在引擎盖下进行分片或复制)

应用服务器本身的内存缓存可能不会非常有效,因为存在多个缓存(尽管对于给定的应用程序,只有少数实例处于活动状态,但它不会分布在所有Google服务器上),而且Google可以随时关闭它们(这对于需要一段时间才能重新启动的Java应用来说是一个真正的问题,所以现在你可以花钱让空闲实例保持活动状态)


除了这些性能/有效性问题外,应用程序服务器上的内存缓存可能会导致一致性问题(每次刷新都会在缓存不同步时显示不同的数据)。

使用memcached对App Engine进行缓存。这意味着缓存服务器会将数据保存在内存中(而不是每个应用程序服务器)。应用程序服务器(对于给定的应用程序)都与同一个缓存服务器通信(从概念上讲,可能会有分片或复制在后台进行)

应用服务器本身的内存缓存可能不会非常有效,因为存在多个缓存(尽管对于给定的应用程序,只有少数实例处于活动状态,但它不会分布在所有Google服务器上),而且Google可以随时关闭它们(这对于需要一段时间才能重新启动的Java应用来说是一个真正的问题,所以现在你可以花钱让空闲实例保持活动状态)


除了这些性能/有效性问题外,应用程序服务器上的内存缓存可能会导致一致性问题(每次刷新都会在缓存不同步时显示不同的数据)。

取决于要实现的缓存类型

如果您有复杂的内存中对象结构,需要花费时间从数据库加载的数据重建,则在应用程序服务器上进行缓存可能会很有趣。在这种特定情况下,您可能希望缓存计算结果。如果结构较大,则使用本地缓存比使用共享memcache加载更快

如果内存和数据库之间的值保持一致是至关重要的,那么每次使用缓存的值时,您都可以对数据存储上的存储值进行校验和/时间戳检查。将校验和/时间戳存储在小对象或全局缓存中将加快这一过程


使用全局memcache的一个大问题是确保“重新填充”时的正确同步当一个值尚未出现或已刷新时,它将被删除。如果有多个服务器同时执行检查并在缓存中重新填充值,则最终可能会有多个不同的服务器同时进行重新填充。如果操作是idem-power,则这不是问题;如果不是,则可能是一个潜在且很难跟踪的错误。

D根据您想要实现的缓存类型进行设置

如果您有复杂的内存中对象结构,需要花费时间从数据库加载的数据重建,则在应用程序服务器上进行缓存可能会很有趣。在这种特定情况下,您可能希望缓存计算结果。如果结构较大,则使用本地缓存比使用共享memcache加载更快

如果内存和数据库之间的值保持一致是至关重要的,那么每次使用缓存的值时,您都可以对数据存储上的存储值进行校验和/时间戳检查。将校验和/时间戳存储在小对象或全局缓存中将加快这一过程


使用全局memcache的一个大问题是确保“重新填充”时的正确同步当一个值尚未出现或已刷新时,它将被删除。如果有多个服务器同时执行检查并在缓存中重新填充值,则最终可能会有多个不同的服务器同时进行重新填充。如果操作是idem-power,则这不是问题;如果不是,则可能是一个潜在的且很难跟踪的错误。

do y你有没有参考资料解释应用引擎的拓扑结构,缓存服务器与应用服务器是分开的?他们使用memcached(在官方文档中)。我不知道memcache在哪里运行(可能与应用实例在同一台物理机上)重要的一点是,它不在应用程序实例的主进程内存中,而是在所有实例之间共享(它们都看到相同的缓存内容)。您是否有任何参考资料解释应用程序引擎拓扑,其中缓存服务器与应用程序服务器分开?他们使用memcached(即在官方文档中)。我不知道memcache在哪里运行(可能与应用程序实例在同一台物理机上)重要的一点是,它不在应用程序实例的主进程内存中,而是在所有实例之间共享(它们都看到相同的缓存内容)。