【发布时间】: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