我正在努力探索如何扩展允许用户登录的任何类型的Web应用程序,并依赖于该用户登录以执行任何操作。
例如,假设我有一个Web应用程序,允许用户登录,编辑用户的地址簿,向其他用户发送消息以及从用户接收消息。
我收到的一些建议是使用动词将我的应用程序划分为服务。所以我会有一个地址簿编辑服务,一个消息发送服务,一个消息接收服务和一个认证服务。所有这些都可以单独地进行水平扩展,并且不会共享数据。这将是理想的,只有他们必须共享数据 - 当前登录的用户。我在概念上无法理解这将如何工作?我应该只是在服务之间发送用户ID吗?它是隐含的,即登录的用户?如果我想维护会话状态以及有关用户当前正在做什么的信息,该怎么办?
答案 0 :(得分:1)
在某些时候,所有的Web服务器都必须在某处融合。那个地方通常是数据库集群。初始身份验证后,您可以生成随机字符串并将其存储在用户当前的数据库中的身份验证Cookie列表中。每次将cookie传递给其中一个服务器时,服务器都可以检查数据库集群,以查看与cookie关联的用户(如果有)。
我将补充说,您不需要数据库集群。您可以将数据库分布在各个站点上。但是,某些操作需要同步。在初始登录时生成cookie(这种情况不会经常发生)就是其中之一。否则,您将拥有可识别cookie但无法识别cookie的服务器。