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 KÖVETKEZŐRE VONATKOZIK: NoSQL
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és implementálása
Leküldéses modellként az automatikus értesítésekhez
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 a különbséget az utolsó feldolgozott elem (amit a bérletek tárolójának állapota határoz meg) és a tároló legutóbbi változása között, majd továbbítja ezt az értéket 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ére szolgáló becslő helyes inicializálása a következő módon: GetChangeFeedEstimatorBuilder
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ésés.
- Az egyes bérletek tulajdonosa és feldolgozó példánya, így megállapíthatja, hogy van-e probléma egy 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 értékelő példány nyomon követheti az üzembe helyezett változáscsatorna-feldolgozó összes bérletének és példányának előrehaladását.
Minden becslés kérelemegységeket használ fel a figyelt és bérletes tárolókbó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álja a feldolgozásra váró változások pontos számát.
További erőforrások
- Azure Cosmos DB SDK
- Használati minták a GitHubon (.NET legújabb verzió)
- Használati minták a GitHubon (.NET minden verzió és törlés)
- Használati minták a GitHubon (Java)
- További minták a GitHubon
Következő lépések
A változáscsatorna-feldolgozóról az alábbi cikkben olvashat bővebben: