我们正处于开发新 的初始阶段网络应用程序并想使用亚马逊云平台。但是,我们可以选择使用 Java spring
开发 Web 应用程序。框架或任何其他编程语言/框架。多页应用程序不是无状态的,即一旦登录,应用程序就需要跟踪用户 session 的事务。一旦通过多个页面从用户那里捕获了所有必需的信息,事务就会提交到数据库。
但是,我们有可能使用 AWS lambda 此应用程序的服务。使用 开发具有上述要求的 Web 应用程序是否是正确的决定? AWS Lambda (知道 Lambda 服务是无 session 的)?
最佳答案
您的问题并非特定于 Lambda。 session 管理简单的唯一情况(例如可以通过内存或基于文件的存储解决)是在单个服务器环境中。那可能是你来自哪里。
当您开始水平扩展(将更多服务器放入混合中,而不是将更多 RAM/CPU 放入服务器)时,您需要一个用于 session 的中央存储(以及缓存)。如果您选择 docker、EC2 甚至是负载均衡器后面的金属服务器,情况也是如此。
这是因为您永远无法判断来自同一用户的下一个请求是否会落在同一环境中。这当然也适用于 lambda。但是有一种解决方法:也就是说,如果您使用负载均衡器来使用“粘性 session ”:这会将同一用户的每个请求路由到同一台机器,请参阅 this AWS doc on session management .但是粘性 session 总是次优的(例如,缩小意味着破坏 session )加上对于 lambda,粘性 session 是不可能的 afaik。
正如这里的其他答案所建议的那样,真正的解决方案包括通过 Elasticache 进行中央 session 存储。来自上述链接的引用:
In order to address scalability and to provide a shared data storage for sessions that can be accessible from any individual web server, you can abstract the HTTP sessions from the web servers themselves. A common solution to for this is to leverage an In-Memory Key/Value store such as Redis and Memcached.
关于web-applications - 带有 session 和数据库的 AWS lambda 和 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942665/