【问题标题】:Any alternatives to Memcache on Google App engine?Google App 引擎上的 Memcache 有什么替代品吗?
【发布时间】:2013-06-11 14:10:58
【问题描述】:

我目前正在使用 GAE 提供的 Memcache 服务来缓存服务器上的内容。当前缓存的大小接近20~30MB。

最初缓存的生命周期为 6-7 小时。随着流量的增加,缓存的生命周期已降至 20 分钟。

我们计划将缓存大小增加到 1-2GB。我们可以使用 GAE 上的分布式缓存的替代实现吗?

下面提到了我已经尝试过的方法列表。但是,这些步骤并不能解决我们在 GAE 上提供更好的缓存服务的需求

  • 使用 Memcache(缺点 - 缓存大小有限)
  • 将对象存储在实例内存中(缺点 - 无法保持跨实例的数据一致性)
  • 压缩存储的 JAVA 对象(略有改进 - 缓存寿命仅提高 20%)

【问题讨论】:

  • 你在 Memcache 中存储了什么?原始数据,还是 HTML 和图像等文件?如果您在其中存储文件,您可以使用@dlebech 的选项。
  • @BrentWashburne 我正在存储原始 Java 对象。每个对象的平均大小约为 1KB。我使用 GzipCompressorInputStream 压缩对象,然后将它们存储在缓存中。缓存中的内容是高度动态的(每 2-3 分钟更改一次)。缓存根据用户触发的不同事件使用“任务队列”进行更新。使用边缘缓存无法让我定期更新客户端浏览器显示的内容
  • 我认为您唯一的选择(在 App Engine 上)是将所有数据放入数据存储并根据请求缓存数据。这样只有被请求的数据在缓存中。
  • @BrentWashburne 我已经在这样做了……我们只有 2500 个 JAVA 对象存储在缓存中。对于低流量站点来说,这个数字很好。但是随着站点的扩展,它需要更大的缓存大小来存储更多的对象。 20-30MB 的缓存太低了。由于缓存的生命周期/大小较短,大多数请求的响应时间会越来越长。
  • 您可以通过创建更多应用程序并在它们之间分片数据来创建分布式缓存。新应用程序将简单地响应来自您的主应用程序的 HTTP 请求并执行 memcache 调用。

标签: google-app-engine memcached


【解决方案1】:

由于您最初依赖 6-7 小时的缓存,因此这听起来像是利用 Google 边缘缓存的绝佳用例。理论上,这是基于 Google 的网站分布式缓存的免费缓存。

基本上,您要设置缓存标头,例如:

Cache-Control: public, max-age=600

参见this SO answerthis Google Groups post

【讨论】:

  • 感谢您的回复......但我有一个不同的问题。缓存中的内容是高度动态的(每 2-3 分钟更改一次)。缓存根据用户触发的不同事件使用“任务队列”进行更新。使用边缘缓存无法让我定期更新客户端浏览器显示的内容。
  • 好的,设置让我有点困惑。一方面,您拥有高度动态的内容,每 2-3 分钟更改一次,另一方面,您将缓存内容提前 6-7 小时。对我来说,听起来你想要实现的是一个所有东西都在内存/缓存中运行的应用程序。如果您不了解您的应用程序,听起来如果您想继续使用 GAE,您可能需要重新考虑整体设计和架构的某些部分。或许你可以在the gaming world找到一些灵感?
【解决方案2】:

如果您是 Python 开发人员,也许 Nick Johnson 的这篇博文会对您有所帮助:http://blog.notdot.net/2010/11/Storage-options-on-App-Engine

【讨论】:

    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多