gpt4 book ai didi

Azure Functions 在与 Azure Cosmos DB 或 SQL 数据库结合进行负载测试时失败

转载 作者:行者123 更新时间:2023-12-03 02:19:56 28 4
gpt4 key购买 nike

我获得了包含我所在国家/地区所有地址的大型数据集 (3.8GB)。我正在创建一个 API,它将在数据库中查询一个特定地址并以基本 JSON 数据(300 字节)进行响应。该 API 在 Azure Functions 上以 Python 形式运行。

到目前为止一切都很好。当我执行单个请求时,我得到的响应时间为 +/- 100-150 毫秒。伟大的!但是...如果我尝试在 1 分钟内使用 200 个请求对 API 进行负载测试。平均响应时间约为 4-6 秒。

这是我迄今为止尝试过的

  • 将 API 连接到 SQL 数据库
  • 将 API 连接到 Cosmos DB 数据库
  • 较小的表格(较少的列)

每个数据库的连接数是否有限制? SQL 数据库或 Cosmos DB 似乎不是问题(CPU/Mem 的百分比很好)。我创建了一个简单的 /status 端点,没有 API 上的数据库连接,它可以在 1 分钟内轻松处理 200 个请求。希望有人能把我推向正确的方向。

    import azure.functions as func
import os

from azure.functions import AsgiMiddleware
from fastapi import Query
from typing import Optional
from api_app import app

import azure.cosmos.documents as documents
import azure.cosmos.cosmos_client as cosmos_client
import azure.cosmos.exceptions as exceptions
from azure.cosmos.partition_key import PartitionKey

@app.get("/status")
def get_status():
return ({"status": 200})

@app.get("/postcode_cosmosdb/{postcode}/{huisnummer}")
async def postcode_cosmosdb(postcode: str, huisnummer: int):
settings = {
'host': os.environ.get('ACCOUNT_HOST', 'XXXXXX'),
'master_key': os.environ.get('ACCOUNT_KEY', 'XXXXXX'),
'database_id': os.environ.get('COSMOS_DATABASE', 'WoningAdressen'),
'container_id': os.environ.get('COSMOS_CONTAINER', 'AdressenLight'),
}

HOST = settings['host']
MASTER_KEY = settings['master_key']
DATABASE_ID = settings['database_id']
CONTAINER_ID = settings['container_id']

client = cosmos_client.CosmosClient(HOST, {'masterKey': MASTER_KEY}, user_agent="CosmosDBPythonQuickstart", user_agent_overwrite=True)
db = client.get_database_client(DATABASE_ID)
container = db.get_container_client(CONTAINER_ID)

items = list(container.query_items(
query="SELECT l.postcode, l.huisnummer, l.huisletter, l.nummeraanduiding_id as bagid, l.gemeente FROM AdressenLight as l WHERE l.postcode=@postcode AND l.huisnummer=@huisnummer",
parameters=[
{ "name":"@postcode", "value": postcode },
{ "name":"@huisnummer", "value": huisnummer }
]
))

return items

def main(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
return AsgiMiddleware(app).handle(req, context)

最佳答案

官方建议跨函数调用重用客户端。这可以减少连接数量并提高调用效率。

请引用文档: https://learn.microsoft.com/en-us/azure/azure-functions/manage-connections

关于Azure Functions 在与 Azure Cosmos DB 或 SQL 数据库结合进行负载测试时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69501957/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com