我试图了解通过 .NET 客户端 SDK 使用 Azure DocumentDb 时 session 一致性的实际含义,即定义(和限制) session 的内容。每次我们创建 DocumentClient 的新实例时是否都会创建一个新 session ,如果是这样,如果我们使用 IReliableReadWriteDocumentClient 包装器,行为会发生变化吗?

最佳答案

是的,每次创建 DocumentClient 类的新实例时都会创建一个新 session 。每个 DocumentClient 实例维护一个集合映射 -> session token 映射。客户端保存从服务器收到的最新 session token ,并在读取请求期间将其作为 header (x-ms-sessiontoken) 回显。这使 DocumentDB 能够定位您的集合的最新副本,以提供 session (或读写)一致性。这与 IReliableReadWriteDocumentClient 相同,因为它是 DocumentClient 的包装器。

注意: 实现 session 一致性的最简单方法是让单个 DocumentClient 实例自动为您管理它。您还可以管理跨多个 DocumentClient 实例的逻辑 session ,但稍微复杂一些。例如,假设您有一个负载平衡的 Web API,其中有两个服务器,每个服务器都有一个 DocumentClient 实例,并且您希望这些服务器之间的 session 保持一致。

  • 客户端写入 -> App Server 1 -> DocumentDB
  • 客户端读取 -> App Server 2 -> DocumentDB

  • 您可以通过将步骤 1 中返回的 x-ms-sessiontoken 保存为客户端中的 cookie,然后在读取请求中回显该 x-ms-sessiontoken 来实现此目的。通过往返 session token ,您可以获得 session 一致性。

    关于azure-cosmosdb - session 一致性和 .NET 客户端 SDK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36877491/

    10-10 14:33