Azure Functions - Java CosmosClientBuilder 初始连接速度慢

Azure Functions - Java CosmosClientBuilder slow on initial connection

我们将 Azure Cloud Functions 与 Java SDK 一起使用,并使用以下 Java API

连接到 Cosmos DB
CosmosClient client = new CosmosClientBuilder()
                .endpoint("https://my-cosmos-project-xyz.documents.azure.com:443/")
                .key(key)
                .consistencyLevel(ConsistencyLevel.SESSION)
                .buildClient();

此 buildClient() 启动与 CosmosDB 的连接,这需要 2 到 3 秒。 使用该客户端的后续数据库查询很快。
只有第一次连接设置很慢。

我们将 CosmosClient 保留为静态变量,因此我们可以在转到我们函数的多个 http 请求之间重用它。

但是一旦函数变冷(当 Azure 在几分钟未使用后将其关闭时),静态变量就会丢失并在函数再次启动时重新连接。

有没有办法使与 cosmos DB 的初始连接更快?

或者如果我们需要更快的响应时间,您认为我们需要增加功能保持在线的时间吗?

这是预期的行为,请参阅 https://youtu.be/McZIQhZpvew?t=850

客户端的第一个请求需要经过预热步骤。此预热包括获取帐户信息、容器信息、路由和分区信息,以便了解将请求路由到何处(如您所见,进一步的请求不会获得这种额外的延迟)。因此维护单例实例的重要性。

在某些 Functions 计划(消耗)实例中,如果没有 activity,则会取消配置,在这种情况下,客户端的任何现有实例都会被销毁,因此在配置新实例时,您的第一个request 将支付这笔预热费用。

我目前在 Java SDK 中没有发现任何解决方法,但这应该不会影响您的 P99 延迟,因为它只是冷客户端上的第一个请求。

希望这个和视频对原因有所帮助。