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


Célalapú skálázás

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:

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:

Az egyenlet illusztrációja: kívánt példányok = eseményforrás hossza/ példányonkénti célvégrehajtások.

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: