Play Framework应用部署到多台服务器怎么办?
What should I do if I want to deploy Play Framework app to multiple servers?
如果我想使用 Play Framework 2.x 将我的应用程序部署到多个服务器,我需要注意哪些事项?
如果我使用(内置)会话,它是否对所有节点可用,因为它们存储在浏览器端?
除了将变量存储在数据库中之外,我如何在应用程序范围内共享变量?
将 Play 应用程序投入生产到多个服务器节点时,您应该检查以下步骤:
- 确保应用程序机密(对
session
cookie 进行加密和签名)在每个节点上都是相同的,因为您无法将 HTTP 响应发送到哪个节点。
- 确保您没有使用内置缓存系统 (ehcache) 来存储用户特定信息(因为缓存存储在服务器的内存中)。
就这些了...
所以回答你的其他问题:
- 如果您正在使用(内置)会话,存储在
session
cookie 中的信息将可供每个服务器节点使用(因为它来自客户端)。请记住,在某些旧浏览器 (IE6) 中,cookie 的大小限制为 4kb,因此请注意您在会话中输入的信息量。
如果您想共享其他应用程序范围的变量:
如果信息是用户特定的,您还可以将它们存储在 session
或其他 cookie 中。例如,如果你想保存当前用户的主题:response().setCookie("theme", "blue");
。然后您可以使用 Http.Request.current().cookies.get("theme")
检索存储的信息。您可以深入了解 play sessions and cookie.
如果您想在多个节点之间共享其他变量,则必须使用分布式缓存解决方案,例如 memcached 或者,您建议的数据库。
如果还没有完成,您应该看看 how to deploy play to production
如果我想使用 Play Framework 2.x 将我的应用程序部署到多个服务器,我需要注意哪些事项?
如果我使用(内置)会话,它是否对所有节点可用,因为它们存储在浏览器端?
除了将变量存储在数据库中之外,我如何在应用程序范围内共享变量?
将 Play 应用程序投入生产到多个服务器节点时,您应该检查以下步骤:
- 确保应用程序机密(对
session
cookie 进行加密和签名)在每个节点上都是相同的,因为您无法将 HTTP 响应发送到哪个节点。 - 确保您没有使用内置缓存系统 (ehcache) 来存储用户特定信息(因为缓存存储在服务器的内存中)。
就这些了...
所以回答你的其他问题:
- 如果您正在使用(内置)会话,存储在
session
cookie 中的信息将可供每个服务器节点使用(因为它来自客户端)。请记住,在某些旧浏览器 (IE6) 中,cookie 的大小限制为 4kb,因此请注意您在会话中输入的信息量。 如果您想共享其他应用程序范围的变量:
如果信息是用户特定的,您还可以将它们存储在
session
或其他 cookie 中。例如,如果你想保存当前用户的主题:response().setCookie("theme", "blue");
。然后您可以使用Http.Request.current().cookies.get("theme")
检索存储的信息。您可以深入了解 play sessions and cookie.如果您想在多个节点之间共享其他变量,则必须使用分布式缓存解决方案,例如 memcached 或者,您建议的数据库。
如果还没有完成,您应该看看 how to deploy play to production