استخدام موجز التغذية المتغيرة

ينطبق على: NoSQL

توضح هذه المقالة كيف يمكنك رصد تقدم تغيير مثيلات معالج التغذية الخاص بك أثناء قراءة موجز التغيير.

لماذا هو مهم رصد مستوى التقدم؟

يعمل معالج الخلاصة المتغيرة كمؤشر يتحرك للأمام عبرموجز التغيير الخاص بك ويقدم التغييرات على تنفيذ المفوض.

معالج التغذية المتغير يمكن نشره لمعالجة التغييرات بمعدل معين بناءً على الموارد المتاحة مثل وحدة المعالجة المركزية والذاكرة والشبكة وما إلى ذلك.

إذا كان هذا المعدل أبطأ من المعدل الذي تحدث به تغييراتك في حاوية Azure Cosmos DB، يبدأ المعالج في التأخر.

تحديد هذا السيناريو يساعد في فهم ما إذا كنا بحاجة إلى توسيع نطاق نشر معالج التغذية المتغير.

تنفيذ موجز التغيير للتغذية

كنموذج دفع للإعلامات التلقائية

مثل تغيير معالج التغذية، يمكن أن يعمل موجز التغذية كنموذج دفع. يقيس أداة التقدير الفرق بين آخر عنصر تمت معالجته (تم تعريفه بواسطة حالة حاوية عقود الإيجار) وآخر تغيير في الحاوية، ويدفع هذه القيمة إلى مفوض. يمكن أيضاً تخصيص الفاصل الزمني الذي يكتمل فيه إجراء القياس بقيمة افتراضية تبلغ 5 ثوانٍ.

على سبيل المثال، إذا كان معالج موجز التغيير يستخدم أحدث وضع إصدار وتم تعريفه على النحو التالي:

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();

الطريقة الصحيحة لتكوين موجز لقياس هذا المعالج ستستخدم GetChangeFeedEstimatorBuilder مثل:

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

حيث يتشارك كل من المعالج والمقدر في نفس leaseContainer ونفس الاسم.

المعلمتان الأخريان هما المفوض، الذي يتلقى رقما يمثل عدد التغييرات المعلقة التي يجب قراءتها بواسطة المعالج، والفاصل الزمني الذي تريد أخذ هذا القياس عنده.

مثال المفوض الذي يتلقى التقدير هو:

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);
}

يمكنك إرسال هذا التقدير إلى حل المراقبة الخاص بك واستخدامه لفهم كيف تصرف تقدمك بمرور الوقت.

على سبيل التقدير المفصل عند الطلب

على النقيض من نموذج الدفع، هناك بديل يتيح لك الحصول على التقدير عند الطلب. يوفر هذا النموذج أيضاً معلومات مفصلة أكثر:

  • التأخرالمقدر لكل عقد إيجار.
  • امتلاك المثيل ومعالجة كل عقد إيجار، حتى تتمكن من تحديد ما إن كانت هناك مشكلة على مثيل.

إذا تم تعريف معالج موجز التغيير الخاص بك على النحو التالي:

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();

يمكنك إنشاء مقدر مع نفس تكوين عقد التأجير:

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

وكلما أردت ذلك، مع التردد الذي تطلبه، يمكنك الحصول على تقدير مفصل:

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.");
    }
}

يحتوي كل ChangeFeedProcessorState منها على معلومات التأجير والتأخر، وكذلك من هو المثيل الحالي الذي يمتلكها.

توزيع المقدر

لا يلزم نشر أداة تقدير موجز التغيير كجزء من معالج موجز التغيير، ولا تكون جزءا من نفس المشروع. نوصي بنشر أداة التقدير على مثيل مستقل عن المعالجات الخاصة بك. يمكن لمثيل مقدر واحد تتبع التقدم لجميع عقود الإيجار والمثيلات في نشر معالج موجز التغيير.

يستهلك كل تقدير وحدات الطلب من حاويات المراقبة والتأجير. يعد التردد 1 دقيقة بينهما نقطة بداية جيدة، كلما انخفض التردد، كلما ارتفعت وحدات الطلب المستهلكة.

أوضاع موجز التغيير المدعومة

يمكن استخدام أداة تقدير موجز التغيير لكل من وضع الإصدار الأخير وجميع الإصدارات ووضع الحذف. في كلا الوضعين، لا يضمن التقدير المقدم أن يكون العدد الدقيق للتغييرات المعلقة في العملية.

الموارد الإضافية

الخطوات التالية

يمكنك الآن المتابعة لمعرفة المزيد حول معالج موجز التغيير في المقالة التالية: