作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力弄清楚如何扩展允许用户登录的任何类型的 Web 应用程序,并依赖于该用户登录来执行任何操作。
例如,假设我有一个 Web 应用程序,它允许用户登录、编辑用户地址簿、向其他用户发送消息以及接收来自用户的消息。
我收到的一些建议是使用动词将我的应用程序划分为服务。所以我会有一个地址簿编辑服务、一个消息发送服务、一个消息接收服务和一个身份验证服务。所有这些都可以单独进行水平扩展,并且不会共享数据。这将是理想的,只有他们必须共享数据 - 当前登录的用户。我无法从概念上理解这将如何工作?我应该只是在服务之间发送用户 ID 并且隐含的是登录的用户吗?如果我想使用有关用户当前正在做什么的信息来维护 session 状态,该怎么办?
最佳答案
在某个时候,所有的 Web 服务器都必须汇聚到某个地方。那个地方通常是数据库集群。在初始身份验证时,您可以生成一个随机字符串并将其存储在数据库中用户当前的身份验证 cookie 列表中。每次将 cookie 传递到其中一台服务器时,服务器都可以检查数据库集群以查看 cookie 与哪个用户(如果有)相关联。
我会补充一点,您不需要数据库集群。您可以将数据库分布在各个站点上。但是,某些操作需要同步。在初始登录时生成 cookie(不会经常发生)就是其中之一。否则,您将混合使用识别和不识别 cookie 的服务器。
关于web-applications - 扩展 Web 应用程序并使其无状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773332/
我是一名优秀的程序员,十分优秀!