当数据库本身分布在多个服务器上时,数据库如何在Web应用程序中维护会话?如何在自定义数据库中实现此类功能?
答案 0 :(得分:1)
简而言之,Riak的一些关键属性使其可以轻松地分集:
使用Riak进行会话存储的Web应用程序将提供与会话相对应的密钥,例如通过cookie或用户ID传递的会话ID。群集中的任何服务器都可以获取该密钥,应用SHA-1哈希函数,并确定哪些数据分区[*]应该具有该密钥,然后将请求路由到当前具有这些数据分区的物理服务器。
随着成员资格的变化,群集会使用八卦来跟踪谁拥有哪些分区。
[*]为了提供可用性,所有单个数据的副本都存储在多个分区上
答案 1 :(得分:0)
正如我在上一篇评论中所说的那样,我确实开始将其添加为评论,但这种情况过于冗长,所以这里就是这样。
我习惯使用Microsoft Web堆栈。当我管理会话时,通常是在Web应用程序中完成的。 Web应用程序进入数据库时会出现诸如“从那里发生这种情况时选择此项”或“将此存储映射到此ID”的问题。从我对RIAK的简要介绍中,我看到如果你有四个节点,那么向一个节点添加数据会触发复制到另外三个节点。
我知道可以在SQL Server数据库中维护会话状态。在使用负载均衡器时我需要这样做,但我需要做的就是在web.config中添加一个键。为了尝试通过示例解释这一点,我有一个负载均衡器将Web请求分发到三个Web服务器。每个都有一个相同的Web应用程序副本。大多数Web请求都链接到会话,并且由于添加了密钥,因此Web服务器会从SQL数据库中的存储中获取信息。
对于分布式数据库,我猜测会话信息会在其所有节点上复制,因此Web应用程序可以将RIAK视为一个来源,而不必指定特定节点。