Megosztás a következőn keresztül:


Kapcsolatok kezelése az Azure Functionsben

A függvényalkalmazás függvényei erőforrásokat osztanak meg. Ezek között a megosztott erőforrások között vannak kapcsolatok: HTTP-kapcsolatok, adatbázis-kapcsolatok és szolgáltatások, például az Azure Storage kapcsolatai. Ha egy használatalapú csomagban számos függvény fut egyidejűleg, előfordulhat, hogy elfogynak az elérhető kapcsolatok. Ez a cikk bemutatja, hogyan kódozza a függvényeket, hogy ne használjon több kapcsolatot, mint amennyi szükséges.

Feljegyzés

A cikkben ismertetett kapcsolati korlátok csak használati csomagban való futtatáskor érvényesek. Az itt leírt technikák azonban hasznosak lehetnek, ha bármilyen terven futnak.

Kapcsolati korlát

A használatalapú csomagokban elérhető kapcsolatok száma részben azért korlátozott, mert a csomag egyik függvényalkalmazása tesztkörnyezetben fut. A tesztkörnyezet által a kódra vonatkozó korlátozások egyike a kimenő kapcsolatok számának korlátozása, amely jelenleg példányonként 600 aktív (összesen 1200) kapcsolat. Ha eléri ezt a korlátot, a függvények futtatókörnyezete a következő üzenetet írja a naplókba: Host thresholds exceeded: Connections. További információkért tekintse meg a Functions szolgáltatás korlátait.

Ez a korlát példányonként van megadva. Amikor a skálázási vezérlő függvényalkalmazás-példányokat ad hozzá a további kérések kezeléséhez, minden példánynak van egy független kapcsolati korlátja. Ez azt jelenti, hogy nincs globális kapcsolatkorlát, és sokkal több mint 600 aktív kapcsolattal rendelkezhet az összes aktív példányon.

Hibaelhárításkor győződjön meg arról, hogy engedélyezte az Application Insights szolgáltatást a függvényalkalmazáshoz. Az Application Insights segítségével megtekintheti a függvényalkalmazások metrikáit, például a végrehajtásokat. További információ: Telemetriai adatok megtekintése az Application Insightsban.

Statikus ügyfelek

A szükségesnél több kapcsolat megtartásának elkerülése érdekében használja újra az ügyfélpéldányokat ahelyett, hogy újakat hoz létre az egyes függvényhívásokkal. Javasoljuk, hogy az ügyfélkapcsolatokat minden olyan nyelvhez használja újra, amelybe a függvényt írhatja. Az olyan .NET-ügyfelek, mint például a HttpClient, a DocumentClient és az Azure Storage-ügyfelek, egyetlen statikus ügyfél használata esetén kezelhetik a kapcsolatokat.

Az alábbiakban néhány útmutatást követhet, ha szolgáltatásspecifikus ügyfelet használ egy Azure Functions-alkalmazásban:

  • Ne hozzon létre új ügyfelet minden függvényhívással.
  • Hozzon létre egyetlen statikus ügyfelet, amelyet minden függvényhívás használhat.
  • Érdemes lehet egyetlen statikus ügyfelet létrehozni egy megosztott segédosztályban, ha a különböző függvények ugyanazt a szolgáltatást használják.

Ügyfélkód példák

Ez a szakasz bemutatja a függvénykódból származó ügyfelek létrehozásának és használatának ajánlott eljárásait.

HTTP-kérések

Íme egy példa a statikus HttpClient-példányt létrehozó C# függvénykódra:

// Create a single, static HttpClient
private static HttpClient httpClient = new HttpClient();

public static async Task Run(string input)
{
    var response = await httpClient.GetAsync("https://example.com");
    // Rest of function
}

Gyakori kérdés a HttpClientről a .NET-ben: "Szabad-e megszabadulni az ügyfelemtől?" Általában a használatuk befejezésekor implementálható IDisposable objektumokat kell megsemmisíteni. De nem szabadít fel statikus ügyfelet, mert a függvény befejeződésekor még nem használja. Azt szeretné, hogy a statikus ügyfél az alkalmazás időtartama alatt éljen.

Azure Cosmos DB-ügyfelek

A CosmosClient egy Azure Cosmos DB-példányhoz csatlakozik. Az Azure Cosmos DB dokumentációja azt javasolja, hogy egyetlen azure Cosmos DB-ügyfelet használjon az alkalmazás teljes élettartama alatt. Az alábbi példa egy függvényben ezt egy mintával szemlélteti:

#r "Microsoft.Azure.Cosmos"
using Microsoft.Azure.Cosmos;

private static Lazy<CosmosClient> lazyClient = new Lazy<CosmosClient>(InitializeCosmosClient);
private static CosmosClient cosmosClient => lazyClient.Value;

private static CosmosClient InitializeCosmosClient()
{
    // Perform any initialization here
    var uri = "https://youraccount.documents.azure.com:443";
    var authKey = "authKey";
   
    return new CosmosClient(uri, authKey);
}

public static async Task Run(string input)
{
    Container container = cosmosClient.GetContainer("database", "collection");
    MyItem item = new MyItem{ id = "myId", partitionKey = "myPartitionKey", data = "example" };
    await container.UpsertItemAsync(document);
   
    // Rest of function
}

Emellett hozzon létre egy "function.proj" nevű fájlt az eseményindítóhoz, és adja hozzá az alábbi tartalmat:


<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.Azure.Cosmos" Version="3.23.0" />
    </ItemGroup>
</Project>

SqlClient-kapcsolatok

A függvénykód az SQL Server .NET-keretrendszer adatszolgáltatója (SqlClient) használatával létesíthet kapcsolatokat egy SQL relációs adatbázissal. Ez a ADO.NET, például az Entity Frameworkre támaszkodó adatkeretek mögöttes szolgáltatója is. A HttpClient- és DocumentClient-kapcsolatoktól eltérően a ADO.NET alapértelmezés szerint implementálja a kapcsolatkészletezést. Mivel azonban továbbra is elfogyhatnak a kapcsolatok, optimalizálnia kell az adatbázis kapcsolatait. További információ: SQL Server-kapcsolatkészletezés (ADO.NET).

Tipp.

Egyes adat-keretrendszerek, például az Entity Framework általában kapcsolati sztring kapnak egy konfigurációs fájl ConnectionStrings szakaszából. Ebben az esetben explicit módon hozzá kell adnia az SQL Database-kapcsolati sztring a függvényalkalmazás beállításainak kapcsolati sztringgyűjteményéhez és a helyi projekt local.settings.json fájljához. Ha sqlConnection-példányt hoz létre a függvénykódban, a kapcsolati sztring értéket az alkalmazásbeállításokban kell tárolnia a többi kapcsolattal együtt.

Következő lépések

További információ arról, hogy miért javasoljuk a statikus ügyfelek használatát, olvassa el a nem megfelelő példányosítási antipattern című témakört.

További Azure Functions-teljesítménytippek : Az Azure Functions teljesítményének és megbízhatóságának optimalizálása.