分布式 Web 应用程序的 Azure DocumentDB 一致性

Azure DocumentDB Consistency for Distributed Web Apps

我有一个部署在 Azure 中的非常标准(Asp.Net 核心)网络应用程序。我正在使用多个未使用会话亲和性的应用程序服务器,因此同一用户可能会在后续请求期间访问不同的服务器。

我想使用 Azure DocumentDB 为我处理一些数据存储。使用模式是每个登录用户每分钟最多发出 10 次命令来读取然后更新一条数据记录。每个用户将读写一条记录。每个用户都有自己的记录。

在阅读了有关一致性的 DocumentDB 文档后,我对它们的工作原理有一些疑问。

我的要求是

  1. 用户必须始终读取最新版本的记录,无论他们在登录时连接到哪个 AppServer。
  2. 如果用户注销并稍后(可能是 30 秒,可能是一个小时)重新登录,他们需要读取最新版本的记录,包括可能发生的任何写入。
  3. 我需要 DocumentDb 的区域故障转移功能。这似乎排除了 "Strong" 一致性水平,否则我很乐意为此付出代价。

我想我需要使用 "Session" 一致性,但我不确定如何在网络场场景的上下文中处理 SessionToken。

我想我可以将 SessionToken 存储为 cookie,但是 DocumentDB "session" 的生命周期是多长?文档似乎对此保持沉默。此外,如果用户注销并重新登录并且会话已过期,会发生什么情况?

也许我不完全了解写入是如何在 DocumentDB 中复制的,也许我还没有完全了解如何配置 DocumentDB 的 read/write 区域来解决所有这些问题?

如果我在主要数据中心区域有一个主要 read/write DocumentDB,在另一个区域有一个辅助 "read" DocumentDB,这是否满足了我的一致性和故障转移要求?

任何澄清将不胜感激!

DocumentDB 会话令牌永不过期。您当然可以遵循 cookie 模式来保证跨 login/logout 的用户的强一致性。如果帐户设置为具有有限的陈旧性,您还可以通过使用仅从帐户的写入区域读取的第二个 DocumentClient 来保证强读取。