Azure Cosmos DB SQL SDK 连接模式

适用于: SQL API

客户端连接到 Azure Cosmos DB 的方式对性能有重大影响,尤其是在观察到的客户端延迟方面。 Azure Cosmos DB 提供基于 HTTPS 的简单开放式 RESTful 编程模型(称为网关模式)。 此外,它还提供了高效的 TCP 协议,该协议在其通信模型中也是 RESTful,并使用 TLS 进行初始身份验证和加密流量(称为直接模式)。

可用的连接模式

两种可用的连接模式为:

  • 网关模式

    可在任意 SDK 平台上使用网关模式。 如果应用程序在有严格防火墙限制的企业网络中运行,则网关模式是最佳选择,因为它使用标准 HTTPS 端口与单个 DNS 终结点。 但是,对于性能的影响是:每次在 Azure Cosmos DB 中读取或写入数据时,网关模式都涉及到额外的网络跃点。 在套接字连接数量有限的环境中运行应用程序时,我们也建议使用网关连接模式。

    在 Azure Functions 中使用 SDK 时,尤其是在消耗计划中使用时,请注意当前的连接限制

  • 直接模式

    直接模式支持通过 TCP 协议进行连接,由于网络跃点更少,因此性能更好。 应用程序直接连接到后端副本。 直接模式目前仅在 .NET 和 Java SDK 平台上受支持。

    The Azure Cosmos DB connectivity modes

这些连接模式实质上限制了数据平面请求(文档读取和写入)从客户端计算机到 Azure Cosmos DB 后端中的分区的路由方式。 直接模式是获得最佳性能的首选选项,它允许客户端直接与 Azure Cosmos DB 后端中的分区建立 TCP 连接,并且在不通过中介的情况下直接发送请求。 与之相反,在网关模式下,客户端发出的请求会路由到 Azure Cosmos DB 前端中所谓的“网关”服务器,该服务器接下来会将你的请求扇出到 Azure Cosmos DB 后端的相应分区。

服务端口范围

使用直接模式时,除了网关端口外,还需确保 10000 到 20000 这个范围的端口处于打开状态,因为 Azure Cosmos DB 使用动态 TCP 端口。 当在专用终结点上使用直接模式时,应打开从 0 到 65535 的整个 TCP 端口范围。 如果这些端口未处于打开状态,你可能会在尝试使用 TCP 协议时收到“503 服务不可用”错误。

下表显示了可用于各种 API 的连接模式以及用于每个 API 的服务端口的摘要:

连接模式 支持的协议 支持的 SDK API/服务端口
网关 HTTPS 所有 SDK SQL (443)、MongoDB(10250、10255、10256)、表 (443)、Cassandra (10350)、Graph (443)
端口 10250 映射到没有异地复制功能的默认 Azure Cosmos DB API for MongoDB 实例。 而端口 10255 和 10256 映射到具有异地复制功能的实例。
直接 TCP .NET SDK Java SDK 使用公共/服务终结点时:端口介于 10000 到 20000 之间
使用专用终结点时:端口介于 0 到 65535 之间

后续步骤

对于特定 SDK 平台性能优化: