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

时间:2017-03-14 18:38:32

标签: azure azure-cosmosdb

我有一个非常标准的(Asp.Net Core)Web应用程序,它部署在Azure中。我使用多个不使用会话亲缘关系的应用服务器,因此同一用户可能会在后续请求期间点击不同的服务器。

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

在阅读了有关一致性的DocumentDB文档后,我留下了一些关于它们如何工作的问题。

我的要求是

  1. 用户必须始终阅读最新版本的记录,无论他们在登录时连接到哪个AppServer。
  2. 如果用户注销然后稍后重新登录(可能是30秒,可能是一小时),他们需要阅读最新版本的记录,包括可能发生的任何写入。
  3. 我需要DocumentDb的区域故障转移功能。这似乎排除"强"一致性水平,否则我很乐意支付。
  4. 我认为我需要使用" Session"一致性,但我不确定如何在Web场方案的上下文中处理SessionToken。

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

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

    如果我的主要数据中心区域有一个主要的读/写DocumentDB,而且有一个辅助"读取"另一个地区的DocumentDB是否符合我的一致性和故障转移要求?

    非常感谢任何澄清!

1 个答案:

答案 0 :(得分:2)

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