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 a következő bővítmények esetében támogatott:

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:

Illustration of the equation: desired instances = event source length / target executions per instance.

A példányonkénti alapértelmezett célvégrehajtások az Azure Functions-bővítmények által használt 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álatalapú csomagban vagy a Prémium csomagban lévő függvényalkalmazások esetében, de kikapcsolhatja a skálázást. 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 függvényalkalmazás 4.19.0-s vagy újabb verziójában.
  • A célalapú skálázás használatakor a functionAppScaleLimit webhelybeállítás továbbra is érvényben van. 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.
  • 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:

Bővítmény 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
Service Bus (Functions v2.x+, Single Dispatch) extensions.serviceBus.messageHandlerOptions.maxConcurrentCalls 16
Service Bus (Functions v2.x+, Single Dispatch Sessions Based) extensions.serviceBus.sessionHandlerOptions.maxConcurrentSessions 2000.
Service Bus (Functions v2.x+, Batch Processing) 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ányonkénti célvégrehajtások egy függvényattribútum használatával vannak beállítva:

Bővítmény 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 , maguk a bővítmények kezelik a dinamikus skálázást. Ennek az az oka, hogy 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
Szolgáltatásbusz 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 célvégrehajtásokat a dinamikus egyidejűség funkció automatikusan meghatározza. 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ő IsSessionsEnabledfalse: IsBatched .

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ágok skálázása növekményes skálázásra kerül 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 maxConcurrentSessions a host.json 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 maxMessageBatchSize a host.json 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óján elosztott feldolgozatlan események száma alapján skálázható. 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.

Feljegyzés

Mivel az Event Hubs particionált számítási feladat, az Event Hubs célpéldányainak számát az eseményközpont partícióinak száma határozza meg.

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 maxEventBatchSize a host.json 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éntmaxEventBatchSizecélvégrehajtásként haszná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 batchSize a host.json példányonkénti célvégrehajtások beállításához:

{
    "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, az adatbázis célpéldányainak számát a tárolóban lévő fizikai partíciók száma határozza meg. 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: