python 在Azure无服务器功能应用程序中管理连接

a64a0gku  于 2023-02-15  发布在  Python
关注(0)|答案(1)|浏览(94)

Microsoft recommends您在整个应用程序中维护CosmosClient的单个示例,我正尝试在我的Function App中实现这一点(不仅仅使用CosmosClient)。然而,即使在重用数据库和容器代理时,我总是看到一个警告,提示我已经达到了Cosmos的最大连接数(10),当我发送足够多的请求时,它将丢弃连接。
对于上下文,它是一个由消息队列触发的无服务器Python函数应用程序,连接在helper函数的共享代码中管理。我必须使用Cosmos SDK,因为我必须读取和更新Cosmos文档。
过去有人成功地导航过这个吗?为 * 每个函数调用 * 示例化一个新的连接是否是最佳实践?我尝试在接收突发流量时创建一个新的CosmosClient,但事实证明很难有效地完成。
下面是我用来管理连接的类的一个示例:

COSMOS_CLIENT = None

class Client:
    def __init__(self):
        self.cosmos_client: CosmosClient = self._get_global_cosmos_client()
    
    def _get_global_cosmos_client(self) -> CosmosClient:
        global COSMOS_CLIENT
        if COSMOS_CLIENT is None:
            logging.info('[COSMOS] NEW CLIENT CONNECTION')
            COSMOS_CLIENT = CosmosClient.from_connection_string(COSMOS_DB_CONNECTION_STRING
        return COSMOS_CLIENT
h22fl7wq

h22fl7wq1#

从概念上讲,因为您是基于ConnectionString(始终为1)创建客户端,所以此代码应始终创建1个客户端。
连接数不是客户端数。
不要创建多个客户端,请始终为您要交互的每个帐户创建一个客户端。该单个客户端可以对帐户中的所有现有数据库/容器执行操作。
创建多个客户端只会产生一个问题,因为每个客户端都将维护自己的独立连接,而不会重用它们,并且与重用单个客户端相比,它将创建更多的连接,最终导致SNAT端口耗尽。
你收到的警告消息是什么?它是否来自Azure Functions的限制?

相关问题