在 Direct 模式下,哪些数据通过网关连接到 CosmosDB?
Posted
技术标签:
【中文标题】在 Direct 模式下,哪些数据通过网关连接到 CosmosDB?【英文标题】:What data goes through Gateway connection to CosmosDB in Direct mode? 【发布时间】:2022-01-14 11:21:04 【问题描述】:我们在 Azure 上使用 CosmosDB 实例。对于我们拥有的每个区域,它都有多个只读副本,以及一个写入主机。
我注意到随着时间的推移导致超时的调用次数。我们使用的是直接连接模式,但在查看 Azure 指标时,我发现网关调用的延迟很长。所以一定有某种调用/数据仍然使用网关连接(可能是某种元数据?)与数据库对话。
下面是网关延迟的屏幕截图,您可以看到一些东南亚呼叫需要 10 秒,并导致上述端到端超时。
那么为什么有些呼叫在 Direct 模式下使用网关连接?以及通过网关模式发送什么?
【问题讨论】:
【参考方案1】:这在https://www.youtube.com/watch?v=McZIQhZpvew上有详细解释
Direct 模式下的 SDK 需要对 Gateway 进行 HTTP 调用才能获取:
账户信息(有哪些区域可用,一致性配置是什么等) 容器信息(分区键定义是什么?) 路由信息(数据平面操作要连接到哪些 TCP 地址) 任何元数据资源操作(数据库/容器上的 CRUD)这些都被视为元数据/管理平面操作,并通过网关。 数据平面操作(对项目/文档的 CRUD/查询)通过 TCP 完成。
【讨论】:
感谢您的评论和信息丰富的视频 Matias。因此,初始连接始终通过网关,并缓存帐户信息、路由等的结果。那个缓存会永远存在吗?即除非连接中断,否则将直接进行以下所有调用,对吗?如果出现网络中断,SDK 是否使用现有缓存重新连接?另外,除了网络问题,您能想到为什么只有一个区域对我们来说总是出现延迟问题吗? 初始交互(网关调用)是 HTTP,只要 .NET 中的 HttpClient 决定,连接就会保持,但从 SDK 的角度来看,这不是必需的,我们只是做了几个HTTP 调用并获取信息并将其存储在内部缓存中。这些缓存会定期刷新(例如,帐户信息每 5 分钟刷新一次以获取任何新区域),并且如果以前的连接被系统关闭,它将重用 HTTP 连接或创建新连接。 这些 HTTP 请求也不在热路径上。基本上不在您的数据平面请求中(除非它是创建客户端后的第一个请求)。这意味着您在图表中看到它们并不意味着它正在影响您的数据操作。如果您确实看到影响每小时 P99 或 P95 的缓慢数据请求,我的建议是检查:docs.microsoft.com/en-us/azure/cosmos-db/sql/…以上是关于在 Direct 模式下,哪些数据通过网关连接到 CosmosDB?的主要内容,如果未能解决你的问题,请参考以下文章
在传统模式下使用 Wifi Direct API 每 2 分钟断开一次
通过 Direct Query 连接到 Azure 专用 SQL 池的 Power BI 报表性能缓慢