【问题标题】:Should I use sessions in Google App Engine?我应该在 Google App Engine 中使用会话吗?
【发布时间】:2014-08-12 12:19:41
【问题描述】:
我刚刚从this questions 那里得知 Google 应用引擎现在支持会话。我希望能够使用它们,但不确定我是否应该仅仅因为我可以。由于可扩展性问题。
我的问题是真的,
我会将会话信息存储在哪里?在数据存储中还是需要很长时间?而且肯定成本高得离谱?
内存缓存呢?我只知道 GAE 几天,仍在阅读。 Mem 缓存是否被认为是快速/可扩展的,是否需要成本?
会话可扩展性的最佳做法是什么?
非常感谢
【问题讨论】:
标签:
java
google-app-engine
http
session
【解决方案1】:
你真的别无选择。 Appengine 透明地为您处理会话持久性和快速访问。
引用the official documentation:
App Engine 包括使用 servlet 会话接口的会话实现。该实现将会话数据存储在 App Engine 数据存储中以实现持久性,并且还使用 memcache 来提高速度。
【解决方案2】:
我会将会话信息存储在哪里?在数据存储中或
这需要很长时间吗?而且肯定成本高得离谱?
如果您在 GAE 上启用会话,它会自动将会话信息存储在内存缓存中并将其备份到数据存储中。
内存缓存呢?我只知道 GAE 几天,
我还在读书。 Mem 缓存是否被认为是快速/可扩展的?
收费吗?
memcache 查询没有成本,并且比数据存储查询快得多。缺点是 memecache 是易失的,可能随时被刷新。这就是 GAE 也在数据存储上备份会话信息的原因。
会话可扩展性的最佳做法是什么?
关于这点有很多观点,但理想情况下,您的应用应该是“无状态的”,以便在 GAE 上实现最大的“可扩展性”,因此您应该能够在没有任何额外信息的情况下处理每个请求,但这通常是真的很难得到。
在您的实例之间拥有共享空间(如 memcahce/datastore/blobsotre)实际上消除了与“分布式和动态”设置相关的所有问题,但从哲学上讲,您应该尝试使应用程序尽可能无状态。