Kapcsolatok kezelése az Azure Functionsben
A függvényalkalmazás függvényei erőforrásokat osztanak meg. A megosztott erőforrások között vannak kapcsolatok: HTTP-kapcsolatok, adatbázis-kapcsolatok és olyan szolgáltatásokhoz való kapcsolatok, mint az Azure Storage. 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ódolni a függvényeket, hogy elkerülje a szükségesnél több kapcsolat használatát.
Megjegyzés
A cikkben ismertetett kapcsolati korlátok csak használatalapú 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ú csomagban 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 példányonként jelenleg 600 aktív (összesen 1200) kapcsolat. Ha eléri ezt a korlátot, a függvény-futtatókörnyezet a következő üzenetet írja a naplókba: Host thresholds exceeded: Connections
. További információ: A Functions szolgáltatás korlátai.
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ányhoz külön kapcsolati korlát tartozik. Ez azt jelenti, hogy nincs globális kapcsolati korlát, és sokkal több mint 600 aktív kapcsolat lehet az összes aktív példányon.
A hibaelhárítás során győződjön meg arról, hogy engedélyezte az Application Insights szolgáltatást a függvényalkalmazáshoz. Az Application Insights lehetővé teszi a függvényalkalmazások, például a végrehajtások metrikáinak megtekintését. 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 minden függvényhívással újakat hoz létre. Javasoljuk, hogy az ügyfélkapcsolatokat minden olyan nyelvhez újrahasználja, amelybe a függvényt írhatja. A .NET-ügyfelek, például a HttpClient, a DocumentClient és az Azure Storage-ügyfelek kezelhetik a kapcsolatokat, ha egyetlen statikus ügyfelet használ.
Az alábbiakban néhány útmutatást követünk, amikor 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 az ügyfelek függvénykódból történő létrehozására és használatára vonatkozó ajánlott eljárásokat mutatja be.
HTTP-kérések
Íme egy példa egy C#-függvénykódra, amely statikus HttpClient-példányt hoz létre:
// 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
}
A HttpClient .NET-ben való használatával kapcsolatos gyakori kérdés a következő: "Szabad-e megszabadulni az ügyfelemtől?" Általában a használatuk után implementálható IDisposable
objektumokat kell megsemmisíteni. A statikus ügyfeleket azonban nem szabadíthatja fel, 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 is működőképes legyen.
Azure Cosmos DB-ügyfelek
A CosmosClient egy Azure Cosmos DB-példányhoz csatlakozik. Az Azure Cosmos DB dokumentációja azt javasolja, hogy egy egyszeri Azure Cosmos DB-ügyfelet használjon az alkalmazás teljes élettartama alatt. Az alábbi példában egy minta látható, amely ezt egy függvényben hajtja végre:
#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 a SQL Server (SqlClient) .NET-keretrendszer adatszolgáltatóját használhatja az SQL relációs adatbázissal való kapcsolatok létrehozásához. 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 egy konfigurációs fájl ConnectionStrings szakaszából szerzik be a kapcsolati sztringeket. Ebben az esetben explicit módon hozzá kell adnia az SQL-adatbázis kapcsolati sztringeit a függvényalkalmazás beállításainak Kapcsolati sztringek gyű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, tekintse meg a nem megfelelő példányosítási kizárási szűrőt ismertető cikket.
További Azure Functions teljesítménnyel kapcsolatos tippekért lásd: A Azure Functions teljesítményének és megbízhatóságának optimalizálása.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: