web-applications - 扩展 Web 应用程序并使其无状态

标签 web-applications scaling

我正在努力弄清楚如何扩展允许用户登录的任何类型的 Web 应用程序,并依赖于该用户登录来执行任何操作。

例如,假设我有一个 Web 应用程序,它允许用户登录、编辑用户地址簿、向其他用户发送消息以及接收来自用户的消息。

我收到的一些建议是使用动词将我的应用程序划分为服务。所以我会有一个地址簿编辑服务、一个消息发送服务、一个消息接收服务和一个身份验证服务。所有这些都可以单独进行水平扩展,并且不会共享数据。这将是理想的,只有他们必须共享数据 - 当前登录的用户。我无法从概念上理解这将如何工作?我应该只是在服务之间发送用户 ID 并且隐含的是登录的用户吗?如果我想使用有关用户当前正在做什么的信息来维护 session 状态,该怎么办?

最佳答案

在某个时候,所有的 Web 服务器都必须汇聚到某个地方。那个地方通常是数据库集群。在初始身份验证时,您可以生成一个随机字符串并将其存储在数据库中用户当前的身份验证 cookie 列表中。每次将 cookie 传递到其中一台服务器时,服务器都可以检查数据库集群以查看 cookie 与哪个用户(如果有)相关联。

我会补充一点,您不需要数据库集群。您可以将数据库分布在各个站点上。但是,某些操作需要同步。在初始登录时生成 cookie(不会经常发生)就是其中之一。否则,您将混合使用识别和不识别 cookie 的服务器。

关于web-applications - 扩展 Web 应用程序并使其无状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773332/

相关文章:

java web 应用程序初始化和关闭

testing - 如何使用 BDD 从头开始​​创建 Web 应用程序?

google-apps-script - iFrame 中的应用程序脚本 HTMLService 应用程序

android - 相对缩放 View 及其分层 subview

android - 如何从html页面中提取文本?

django - Django 和 React 的部署和开发环境

html - 如何使用 `use` 在 SVG 中缩放/挤压三 Angular 形符号

java - 缩放图像并将其放置在Android的LinearLayout中的特定位置(坐标)

jquery - 缩放图像并保持其比例

android - 将位图的大小调整为固定值但不更改纵横比