Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A célalapú skálázás gyors és intuitív skálázási modellt biztosít az ügyfelek számára, és jelenleg az alábbi kötésbővítmények támogatják:
- Apache Kafka
- Azure Cosmos DB
- Azure-eseményközpontok
- Azure Queue Storage
- Azure Service Bus (üzenetsor és témakörök)
A célalapú skálázás a korábbi Azure Functions növekményes skálázási modellt váltja fel alapértelmezettként ezekhez a bővítménytípusokhoz. A növekményes skálázás minden új példányszámon legfeljebb egy feldolgozót adott hozzá vagy távolított el, és összetett döntéseket hozott a méretezés időpontjáról. Ezzel szemben a célalapú skálázás egyszerre négy példány felskálázását teszi lehetővé, a skálázási döntés pedig egy egyszerű célalapú egyenleten alapul:
Ebben az egyenletben az eseményforrás hossza a feldolgozandó események számát jelenti. A példányonkénti alapértelmezett célvégrehajtások az Azure Functions-bővítmények által használt szoftverfejlesztői készletekből (SDK-kból) származnak. A célalapú skálázás működéséhez nem kell módosításokat végeznie.
Megfontolások
A célalapú skálázás használatakor a következő szempontokat kell figyelembe venni:
- A célalapú skálázás alapértelmezés szerint engedélyezve van a használati csomagban, a Rugalmas használat csomagban és az Elastic Premium csomagban lévő függvényalkalmazások esetében. Az eseményvezérelt skálázás nem támogatott dedikált (App Service-) csomagok futtatásakor.
- A célalapú skálázás alapértelmezés szerint engedélyezve van a Functions-futtatókörnyezet 4.19.0-s verziójától kezdve.
- Ha célalapú skálázást használ, a méretezési korlátok továbbra is teljesülnek. További információkért lásd : Vertikális felskálázás korlátozása.
- A metrikák alapján a legpontosabb skálázás eléréséhez függvényalkalmazásonként csak egy célalapú aktivált függvényt használjon. Érdemes megfontolni a Rugalmas használat csomag futtatását is, amely függvényenkénti skálázást kínál.
- Ha ugyanabban a függvényalkalmazásban egyszerre több függvény is vertikális felskálázást kér, a függvények közötti összeg a kívánt példányok változásának meghatározására szolgál. A skálázást kérő felülbíráló függvények felskálázását kérő függvények.
- Ha vertikális felskálázási kérések nélkül vannak vertikális felskálázási kérések, a rendszer a maximális skálázási értéket használja.
Leiratkozás
A célalapú skálázás alapértelmezés szerint engedélyezve van a használatalapú csomagban vagy prémium csomagban üzemeltetett függvényalkalmazások esetében. A célalapú skálázás letiltásához és a növekményes skálázáshoz való visszatéréshez adja hozzá a következő alkalmazásbeállítást a függvényalkalmazáshoz:
| Alkalmazásbeállítás | Érték |
|---|---|
TARGET_BASED_SCALING_ENABLED |
0 |
Célalapú skálázás testreszabása
A skálázási viselkedést többé-kevésbé agresszívvá teheti az alkalmazás számítási feladatai alapján a példányonkénti célvégrehajtások módosításával. Minden bővítmény különböző beállításokkal rendelkezik, amelyekkel példányonként beállíthatja a célvégrehajtásokat.
Ez a táblázat a host.json példányonkénti célvégrehajtásokhoz használt értékeket és az alapértelmezett értékeket foglalja össze:
| Mellék | host.json értékek | Alapértelmezett érték |
|---|---|---|
| Event Hubs (v5.x+-bővítmény) | extensions.eventHubs.maxEventBatchSize | 100* |
| Event Hubs (3.x+-bővítmény) | extensions.eventHubs.eventProcessorOptions.maxBatchSize | 10 |
| Event Hubs (ha meg van adva) | extensions.eventHubs.targetUnprocessedEventThreshold | n.a. |
| Service Bus (v5.x+ bővítmény, egyszeri kézbesítés) | extensions.serviceBus.maxConcurrentCalls | 16 |
| Service Bus (v5.x+ bővítmény, önálló küldési munkamenetek alapján) | extensions.serviceBus.maxConcurrentSessions | 8 |
| Service Bus (v5.x+ bővítmény, Batch Processing) | extensions.serviceBus.maxMessageBatchSize | 1000 |
| Szolgáltatás busz (Függvények v2.x+, Egyszeri küldés) | extensions.serviceBus.messageHandlerOptions.maxConcurrentCalls | 16 |
| Szolgáltatási Busz (Funkciók v2.x+, Egyszeres Kiosztású Munkamenetek Alapú) | extensions.serviceBus.sessionHandlerOptions.maxConcurrentSessions | 2000. |
| Service Bus (Functions v2.x+, Köztes feldolgozás) | extensions.serviceBus.batchOptions.maxMessageCount | 1000 |
| Tárolási üzenetsor | extensions.queues.batchSize | 16 |
*Az alapértelmezett maxEventBatchSize beállítás a csomag 6.0.0-s verziójában Microsoft.Azure.WebJobs.Extensions.EventHubs módosult. A korábbi verziókban ez az érték 10 volt.
Egyes kötéskiterjesztések esetében a példánykonfigurációnkénti célvégrehajtások egy függvényattribútum használatával vannak beállítva:
| Mellék | Függvényindító beállítása | Alapértelmezett érték |
|---|---|---|
| Apache Kafka | lagThreshold |
1000 |
| Azure Cosmos DB | maxItemsPerInvocation |
100 |
További információkért tekintse meg a támogatott bővítmények példakonfigurációit.
Prémium csomag futásidejű méretezési monitorozással
Ha engedélyezve van a futtatókörnyezeti skálázás monitorozása , a bővítmények maguk kezelik a dinamikus skálázást, mert a skálázási vezérlő nem rendelkezik hozzáféréssel a virtuális hálózat által védett szolgáltatásokhoz. A futtatókörnyezeti skálázás monitorozásának engedélyezése után frissítenie kell a bővítménycsomagokat az alábbi minimális verziókra a további célalapú skálázási funkciók feloldásához:
| Bővítmény neve | Minimálisan szükséges verzió |
|---|---|
| Apache Kafka | 3.9.0 |
| Azure Cosmos DB | 4.1.0 |
| Event Hubs | 5.2.0 |
| Service Bus | 5.9.0 |
| Tárolási üzenetsor | 5.1.0 |
Dinamikus egyidejűség támogatása
A célalapú skálázás gyorsabb skálázást eredményez, és az alapértelmezett értékeket használja a példányonkénti célvégrehajtásokhoz. Service Bus, Storage-üzenetsorok vagy Kafka használatakor dinamikus egyidejűséget is engedélyezhet. Ebben a konfigurációban a példányonkénti _target végrehajtást automatikusan a dinamikus egyidejűségi funkció határozza meg. A beállítás csak korlátozott egyidejűséggel kezdődik, és az idő múlásával azonosítja a legjobb beállítást.
Támogatott bővítmények
A célalapú skálázás host.json fájlban való konfigurálásának módja az adott bővítménytípustól függ. Ez a szakasz a célalapú skálázást jelenleg támogató bővítmények konfigurációs adatait tartalmazza.
Service Bus-üzenetsorok és témakörök
A Service Bus-bővítmény három végrehajtási modellt támogat, amelyeket a IsBatched Service Bus-eseményindító és IsSessionsEnabled attribútumai határoznak meg. Az alapértelmezett érték a következő IsBatchedIsSessionsEnabled: false .
| Végrehajtási modell | IsBatched | IsSessionsEnabled | A példányonkénti célvégrehajtásokhoz használt beállítás |
|---|---|---|---|
| Egyszeri kézbesítés feldolgozása | false | false | maxConcurrentCalls |
| Egyszeri kézbesítés feldolgozása (munkamenet-alapú) | false | true | maxConcurrentSessions |
| Kötegelt feldolgozás | true | false | maxMessageBatchSize vagy maxMessageCount |
Feljegyzés
Skálázási hatékonyság: A Service Bus-bővítményhez használja az erőforrások jogosultságainak kezelése lehetőséget a leghatékonyabb skálázáshoz. A Figyelési jogosultságokkal a skálázás növekményes skálázásra áll vissza, mert az üzenetsor vagy a témakör hossza nem használható a skálázási döntések tájékoztatására. A Service Bus hozzáférési szabályzataiban a jogosultságok beállításáról további információt a Megosztott hozzáférés engedélyezési szabályzatában talál.
Egyszeri kézbesítés feldolgozása
Ebben a modellben a függvény minden meghívása egyetlen üzenetet dolgoz fel. A maxConcurrentCalls beállítás a példányonkénti célvégrehajtásokat szabályozza. Az adott beállítás a Service Bus-bővítmény verziójától függ.
Módosítsa a host.json beállítást maxConcurrentCallsaz alábbi példához hasonlóan:
{
"version": "2.0",
"extensions": {
"serviceBus": {
"maxConcurrentCalls": 16
}
}
}
Egyszeri kézbesítés feldolgozása (munkamenet-alapú)
Ebben a modellben a függvény minden meghívása egyetlen üzenetet dolgoz fel. A Service Bus-témakör vagy -üzenetsor aktív munkameneteinek számától függően azonban minden példány egy vagy több munkamenetet lízingel. Az adott beállítás a Service Bus-bővítmény verziójától függ.
Módosítsa a beállítást host.json a maxConcurrentSessions példányonkénti célvégrehajtások beállításához, ahogyan az alábbi példában is látható:
{
"version": "2.0",
"extensions": {
"serviceBus": {
"maxConcurrentSessions": 8
}
}
}
Kötegelt feldolgozás
Ebben a modellben a függvény minden egyes meghívása egy üzenetköteget dolgoz fel. Az adott beállítás a Service Bus-bővítmény verziójától függ.
Módosítsa a beállítást host.json a maxMessageBatchSize példányonkénti célvégrehajtások beállításához, ahogyan az alábbi példában is látható:
{
"version": "2.0",
"extensions": {
"serviceBus": {
"maxMessageBatchSize": 1000
}
}
}
Event Hubs
Az Azure Event Hubs esetében az Azure Functions az eseményközpont összes partíciója között elosztott feldolgozatlan események száma alapján skálázható az érvényes példányok számának listájában. Alapértelmezés szerint a host.json példányonkénti célvégrehajtásokhoz használt attribútumok a következőkmaxEventBatchSize: és maxBatchSize. Ha azonban úgy dönt, hogy finomhangolja a célalapú skálázást, megadhat egy külön paraméterttargetUnprocessedEventThreshold, amely felülbírálja a példányonkénti célvégrehajtások beállítását a kötegbeállítások módosítása nélkül. Ha targetUnprocessedEventThreshold be van állítva, a feldolgozatlan események teljes száma fel van osztva ezzel az értékkel a példányok számának meghatározásához, amelyet aztán fel kell kerekíteni a feldolgozópéldányok számára, amely kiegyensúlyozott partícióeloszlást hoz létre.
Figyelmeztetés
A batchCheckpointFrequency által támogatott üzemeltetési csomagok esetében az 1. érték feletti beállítás helytelen skálázási viselkedést okozhat. A platform a feldolgozatlan eseményeket az "aktuális pozíció – ellenőrzőpontos pozíció" értékként számítja ki, amely helytelenül jelezheti a feldolgozatlan üzeneteket, ha a kötegek feldolgozása megtörtént, de még nincs ellenőrzőpont, megakadályozva a megfelelő méretezést, ha egyetlen üzenet sem marad.
Skálázási viselkedés és stabilitás
Az Event Hubs esetében a gyakori felskálázás és lecsökkentés műveletek partíciók újraegyensúlyozását válthatják ki, ami feldolgozási késésekhez és megnövekedett késleltetéshez vezet. Ennek enyhítése:
- A platform a munkavállalók érvényes számának előre meghatározott listáját használja a skálázási döntések irányításához.
- A platform biztosítja, hogy a skálázás stabil és szándékos legyen, elkerülve a partíció-hozzárendelések zavaró változásait.
- Ha a kívánt feldolgozószám nem szerepel az érvényes listában – például 17, a rendszer automatikusan kiválasztja a következő legnagyobb érvényes számot, amely ebben az esetben 32. Emellett a gyors ismételt skálázás megakadályozása érdekében a visszaskálázási kérelmeket az utolsó felskálázás után 3 percig korlátozzák. Ez a késleltetés segít csökkenteni a szükségtelen újraegyensúlyozást, és hozzájárul az átviteli sebesség hatékonyságának fenntartásához.
Az Event Hubok érvényes példányszámai
Minden Event Hubs-partíciószámhoz kiszámítjuk az érvényes példányok számának megfelelő listát az optimális elosztás és a hatékony skálázás érdekében. Ezek a számok a particionálási és egyidejűségi követelményeknek megfelelően vannak kiválasztva:
| Partíciók száma | Érvényes példányszámok |
|---|---|
| 1 | [1] |
| 2 | [1, 2] |
| 4 | [1, 2, 4] |
| 8 | [1, 2, 3, 4, 8] |
| 10 | [1, 2, 3, 4, 5, 10] |
| 16 | [1, 2, 3, 4, 5, 6, 8, 16] |
| 32 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 16, 32] |
Ezek az előre definiált számok biztosítják, hogy a példányok a lehető legegyenletesebben legyenek elosztva a partíciók között, minimalizálva az inaktív vagy túlterhelt munkavállalókat.
Feljegyzés
Megjegyzés: Prémium szintű és dedikált eseményközpont-szintek esetén a partíciók száma meghaladhatja a 32-t, így nagyobb érvényes példányszámkészletek is használhatók. Ezek a szintek támogatják a nagyobb átviteli sebességet és skálázhatóságot, és az érvényes feldolgozószámlista ennek megfelelően ki van terjesztve az eseményközpont partícióinak egyenletes elosztásához a példányok között. Mivel az Event Hubs particionált számítási feladat, az eseményközpont partícióinak száma a maximális célpéldányszám korlátja.
Event Hubs-beállítások
Az adott beállítás az Event Hubs-bővítmény verziójától függ.
Módosítsa a beállítást host.json a maxEventBatchSize példányonkénti célvégrehajtások beállításához, ahogyan az alábbi példában is látható:
{
"version": "2.0",
"extensions": {
"eventHubs": {
"maxEventBatchSize" : 100
}
}
}
Ha a host.jsonmegadott helyen van megadva, targetUnprocessedEventThreshold a rendszer példányonkénthasználja a következő példához hasonlóan:
{
"version": "2.0",
"extensions": {
"eventHubs": {
"targetUnprocessedEventThreshold": 153
}
}
}
Tárolási üzenetsorok
A Storage-bővítmény v2.x+ verziójánál módosítsa a beállítást a host.json példányonkéntibatchSize:
{
"version": "2.0",
"extensions": {
"queues": {
"batchSize": 16
}
}
}
Feljegyzés
Skálázási hatékonyság: A tárolási várólista-bővítmény esetében a láthatósági Időtúllépést tartalmazó üzeneteket a Storage Queue API-k továbbra is az eseményforrás hosszában számolják. Ez a függvényalkalmazás túlskálázását okozhatja. Fontolja meg a Service Bus-üzenetsorok ütemezett üzeneteinek használatát, a vertikális felskálázás korlátozását vagy a megoldás láthatósági időkorlátjának használatát.
Azure Cosmos DB
Az Azure Cosmos DB függvényszintű attribútumot használ. MaxItemsPerInvocation A függvényszintű attribútum beállításának módja a függvény nyelvétől függ.
Lefordított C# függvény esetén állítsa be MaxItemsPerInvocation az eseményindító definícióját, ahogyan az a folyamaton belüli C# függvény alábbi példáiban is látható:
namespace CosmosDBSamplesV2
{
public static class CosmosTrigger
{
[FunctionName("CosmosTrigger")]
public static void Run([CosmosDBTrigger(
databaseName: "ToDoItems",
collectionName: "Items",
MaxItemsPerInvocation: 100,
ConnectionStringSetting = "CosmosDBConnection",
LeaseCollectionName = "leases",
CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
ILogger log)
{
if (documents != null && documents.Count > 0)
{
log.LogInformation($"Documents modified: {documents.Count}");
log.LogInformation($"First document Id: {documents[0].Id}");
}
}
}
}
Feljegyzés
Mivel az Azure Cosmos DB particionált számítási feladat, a tárolóban lévő fizikai partíciók száma a célpéldányok számának korlátja. Az Azure Cosmos DB skálázásával kapcsolatos további információkért tekintse meg a fizikai partíciókat és a bérlet tulajdonjogát.
Apache Kafka
Az Apache Kafka-bővítmény függvényszintű attribútumot használ. LagThreshold A Kafka esetében a kívánt példányok száma a beállítással LagThreshold osztva a teljes fogyasztói késés alapján lesz kiszámítva. Egy adott késés esetén a késési küszöbérték csökkentése növeli a kívánt példányok számát.
A függvényszintű attribútum beállításának módja a függvény nyelvétől függ. Ez a példa a küszöbértéket a következőre állítja 100: .
Lefordított C# függvény esetén állítsa be LagThreshold az eseményindító definíciójában, ahogyan az a Kafka Event Hubs-eseményindítók folyamaton belüli C# függvényére vonatkozó alábbi példákban látható:
[FunctionName("KafkaTrigger")]
public static void Run(
[KafkaTrigger("BrokerList",
"topic",
Username = "$ConnectionString",
Password = "%EventHubConnectionString%",
Protocol = BrokerProtocol.SaslSsl,
AuthenticationMode = BrokerAuthenticationMode.Plain,
ConsumerGroup = "$Default",
LagThreshold = 100)] KafkaEventData<string> kevent, ILogger log)
{
log.LogInformation($"C# Kafka trigger function processed a message: {kevent.Value}");
}
Következő lépések
További tudnivalókért olvassa el a következő cikket: