Megosztás:


Használja a változáscsatorna-becslőt

Ez a cikk azt ismerteti, hogyan figyelheti a változáscsatorna processzorpéldányainak állapotát a változáscsatorna olvasása közben.

Miért fontos az előrehaladás monitorozása?

A változáscsatorna feldolgozója olyan mutatóként működik, amely előrehalad a változáscsatornán , és a módosításokat egy delegált implementációnak továbbítja.

A változáscsatorna-feldolgozó üzembe helyezése bizonyos sebességgel képes feldolgozni a módosításokat a rendelkezésre álló erőforrások, például a processzor, a memória, a hálózat stb. alapján.

Ha ez a sebesség lassabb, mint az Azure Cosmos DB-tárolóban végrehajtott módosítások sebessége, a processzor kezd lemaradni.

Ennek a forgatókönyvnek a azonosítása segít megérteni, hogy szükség van-e a változáscsatorna processzor üzembe helyezésének skálázására.

A változáscsatorna-becslő implementálása

Push modellként automatikus értesítések számára

A változáscsatorna-feldolgozóhoz hasonlóan a változáscsatorna-becslő leküldéses modellként is működhet. A becslő méri az utolsó feldolgozott elem (a kölcsönzési tároló állapota által meghatározva) és a tároló legutóbbi változása közötti különbséget, és ezt az értéket továbbítja egy delegáltnak. A mérés időköze az alapértelmezett 5 másodperces értékkel is testre szabható.

Példaként, ha a változáscsatorna-feldolgozó a legújabb verziómódot használja, és a következőképpen van definiálva:

Container leaseContainer = client.GetContainer(databaseId, Program.leasesContainer);
Container monitoredContainer = client.GetContainer(databaseId, Program.monitoredContainer);
ChangeFeedProcessor changeFeedProcessor = monitoredContainer
    .GetChangeFeedProcessorBuilder<ToDoItem>("changeFeedEstimator", Program.HandleChangesAsync)
        .WithInstanceName("consoleHost")
        .WithLeaseContainer(leaseContainer)
        .Build();

A processzor méréséhez szükséges becslő objektum helyes inicializálása a következőképpen történik GetChangeFeedEstimatorBuilder felhasználásával:

ChangeFeedProcessor changeFeedEstimator = monitoredContainer
    .GetChangeFeedEstimatorBuilder("changeFeedEstimator", Program.HandleEstimationAsync, TimeSpan.FromMilliseconds(1000))
    .WithLeaseContainer(leaseContainer)
    .Build();

Ahol a feldolgozó és a becslő is ugyanazzal leaseContainer a névvel rendelkezik.

A másik két paraméter a delegált, amely egy számot kap, amely azt jelzi, hogy a processzor hány módosítást vár olvasásra , és azt az időtartamot, amelyen a mérést el szeretné végezni.

Példa a becslést fogadó meghatalmazottra:

static async Task HandleEstimationAsync(long estimation, CancellationToken cancellationToken)
{
    if (estimation > 0)
    {
        Console.WriteLine($"\tEstimator detected {estimation} items pending to be read by the Processor.");
    }

    await Task.Delay(0);
}

Ezt a becslést elküldheti a monitorozási megoldásnak, és segítségével megértheti, hogyan működik az előrehaladás az idő múlásával.

Igény szerinti részletes becslésként

A leküldéses modellel ellentétben van egy alternatíva, amely lehetővé teszi a becslés igény szerinti lekérését. Ez a modell részletesebb információkat is nyújt:

  • A bérletenkénti becsült késedelmi idő.
  • Minden egyes bérlethez tartozik egy példány, amely felel a tulajdonlásért és feldolgozásért, így meg tudja állapítani, hogy van-e probléma az adott példányon.

Ha a változáscsatorna-feldolgozó a következőképpen van definiálva:

Container leaseContainer = client.GetContainer(databaseId, Program.leasesContainer);
Container monitoredContainer = client.GetContainer(databaseId, Program.monitoredContainer);
ChangeFeedProcessor changeFeedProcessor = monitoredContainer
    .GetChangeFeedProcessorBuilder<ToDoItem>("changeFeedEstimator", Program.HandleChangesAsync)
        .WithInstanceName("consoleHost")
        .WithLeaseContainer(leaseContainer)
        .Build();

A becslőt ugyanazzal a bérletkonfigurációval hozhatja létre:

ChangeFeedEstimator changeFeedEstimator = monitoredContainer
    .GetChangeFeedEstimator("changeFeedEstimator", leaseContainer);

És amikor csak szeretné, a szükséges gyakorisággal beszerezheti a részletes becslést:

Console.WriteLine("Checking estimation...");
using FeedIterator<ChangeFeedProcessorState> estimatorIterator = changeFeedEstimator.GetCurrentStateIterator();
while (estimatorIterator.HasMoreResults)
{
    FeedResponse<ChangeFeedProcessorState> states = await estimatorIterator.ReadNextAsync();
    foreach (ChangeFeedProcessorState leaseState in states)
    {
        string host = leaseState.InstanceName == null ? $"not owned by any host currently" : $"owned by host {leaseState.InstanceName}";
        Console.WriteLine($"Lease [{leaseState.LeaseToken}] {host} reports {leaseState.EstimatedLag} as estimated lag.");
    }
}

Mindegyik ChangeFeedProcessorState tartalmazza a bérlet és késés adatait, valamint azt is, hogy ki az aktuális példány tulajdonosa.

Becslő üzembe helyezése

A változáscsatorna-becslőt nem kell üzembe helyezni a változáscsatorna-feldolgozó részeként, és nem is kell ugyanabban a projektben részt vennie. Javasoljuk, hogy a becslőt egy független példányon helyezze üzembe a processzoroktól. Egyetlen becslési példány nyomon követheti a változáscsatorna-feldolgozó üzembe helyezésének összes bérletének és példányának állapotát.

Minden becslés kérelemegységeket használ fel a figyelt és bérelt tárolók közül. A kettő közötti 1 perces gyakoriság jó kiindulási pont, minél alacsonyabb a gyakoriság, annál magasabb a felhasznált kérelemegységek száma.

Támogatott változáscsatorna-módok

A változáscsatorna-becslés a legújabb verziómódhoz , valamint az összes verzióhoz és törlési módhoz is használható. Mindkét módban a megadott becslés nem garantáltan a kivételesen fennálló változások pontos száma.

További erőforrások

Következő lépések

A változáscsatorna-feldolgozóról az alábbi cikkben olvashat bővebben: