تكوين الخدمات الموثوقة ذات الحالة

هناك مجموعتان من إعدادات التكوين للخدمات الموثوقة. مجموعة واحدة عمومية لجميع الخدمات الموثوقة في نظام المجموعة أما المجموعة الأخرى فهي خاصة بخدمة موثوقة معينة.

التكوين العمومي

يتم تحديد التكوين العمومي في بيان الكتلة لنظام المجموعة ضمن قسم KtlLogger. يسمح بتكوين موقع السجل المشترك وحجمه بالإضافة إلى حدود الذاكرة العمومية التي يستخدمها المسجل. بيان الكتلة لنظام المجموعة هو ملف XML واحد يحتوي على الإعدادات والتكوينات التي تنطبق على كافة العقد والخدمات في نظام المجموعة. عادة ما يسمى الملف ClusterManifest.xml. يمكنك رؤية بيان الكتلة الخاص بمجموعتك باستخدام أمر powershell Get-ServiceFabricClusterManifest.

أسماء التكوين

الاسم الوحدة القيمة الافتراضية الملاحظات
WriteBufferMemoryPoolMinimumInKB كيلو بايت 8388608 الحد الأدنى لعدد الكيلوبايت المسموح بتخصيصها في وضع النواة لتجمع ذاكرة التخزين المؤقت للكتابة على المسجل. يتم استخدام تجمع الذاكرة هذا للتخزين المؤقت لمعلومات الحالة قبل الكتابة نقل المعلومات للقرص.
WriteBufferMemoryPoolMaximumInKB كيلو بايت بلا حد الحد الأقصى للحجم الذي يمكن أن يصل إليه تجمع ذاكرة التخزين المؤقت لكتابة المسجل.
SharedLogId GUID "" يحدد GUID فريدًا لاستخدامه لتحديد ملف السجل المشترك الافتراضي الذي تستخدمه جميع الخدمات الموثوقة في كل العقد في الكتلة التي لا تحدد SharedLogId في التكوين الخاص بالخدمة الخاصة بها. إذا تم تحديد SharedLogId، فيجب أيضًا تحديد SharedLogPath.
SharedLogPath اسم مسار مؤهل بالكامل "" يحدد المسار المؤهل بالكامل الذي تستخدم فيه الخدمات الموثوقة ملف السجل المشترك على جميع العقد في الكتلة التي لا تحدد SharedLogPath في التكوين الخاص بالخدمة الخاصة بها. ومع ذلك، إذا تم تحديد SharedLogPath، فيجب أيضًا تحديد SharedLogId.
SharedLogSizeInMB Megabytes 8192 يحدد عدد الميغابايت في مساحة القرص المطلوب تخصيصها بشكل ثابت للسجل المشترك. يجب أن تكون القيمة 2048 أو أكبر.

في Azure ARM أو قالب JSON المحلي، يوضح المثال أدناه كيفية تغيير سجل المعاملات المشترك الذي يتم إنشاؤه لدعم أي مجموعات موثوقة للخدمات ذات الحالة.

"fabricSettings": [{
    "name": "KtlLogger",
    "parameters": [{
        "name": "SharedLogSizeInMB",
        "value": "4096"
    }]
}]

نموذج لقسم بيان كتلة مجموعة المطورين المحليين

إذا كنت ترغب في تغيير هذا على بيئة التنمية المحلية الخاصة بك، تحتاج إلى تحرير ملف clustermanifest.xml المحلي.

   <Section Name="KtlLogger">
     <Parameter Name="SharedLogSizeInMB" Value="4096"/>
     <Parameter Name="WriteBufferMemoryPoolMinimumInKB" Value="8192" />
     <Parameter Name="WriteBufferMemoryPoolMaximumInKB" Value="8192" />
     <Parameter Name="SharedLogId" Value="{7668BB54-FE9C-48ed-81AC-FF89E60ED2EF}"/>
     <Parameter Name="SharedLogPath" Value="f:\SharedLog.Log"/>
   </Section>

الملاحظات

يحتوي المسجل على مجموعة عمومية من الذاكرة المخصصة من ذاكرة النواة غير المقسمة إلى صفحات والتي تُتاح لجميع الخدمات الموثوقة على عقدة لتخزين بيانات الحالة مؤقتًا قبل كتابتها إلى السجل المخصص المرتبط بالنسخة المتماثلة للخدمة الموثوقة. يتم التحكم في حجم التجمع بواسطة إعدادات WriteBufferMemoryPoolMinimumInKB وWriteBufferMemoryPoolMaximumInKB. يحدد WriteBufferMemoryPoolMinimumInKB كلًا من الحجم الأولي لتجمع الذاكرة والحجم الأدنى الذي قد يتقلص إليه تجمع الذاكرة. WriteBufferMemoryPoolMaximumInKB هو أعلى حجم قد يصل إليه تجمع الذاكرة. قد تزيد كل نسخة متماثلة موثوقة من الخدمة التي يتم فتحها من حجم تجمع الذاكرة بمقدار محدد من النظام يصل إلى WriteBufferMemoryPoolMaximumInKB. إذا كان هناك طلب على الذاكرة من تجمع الذاكرة أكثر مما هو متوفر، تسيتم تأخير طلبات الذاكرة لحين توافر الذاكرة. لذلك إذا كان تجمع ذاكرة التخزين المؤقت للكتابة صغيرًا جدا بالنسبة لتكوين معين، فقد يتأثر الأداء.

دائمًا ما تستخدم إعدادات SharedLogId وSharedLogPath معًا لتحديد المعرف الفريد العمومي وموقع السجل المشترك الافتراضي لكافة العقد في نظام المجموعة. يتم استخدام السجل المشترك الافتراضي لجميع الخدمات الموثوقة التي لا تحدد الإعدادات في settings.xml للخدمة المحددة. للحصول على أفضل أداء، يجب وضع ملفات السجل المشتركة على الأقراص التي تستخدم فقط لملف السجل المشترك لتقليل المنافسة على الاتصال.

يحدد SharedLogSizeInMB مقدار مساحة القرص لتخصيصها مسبقًا للسجل المشترك الافتراضي على كافة العقد. لا يلزم تحديد SharedLogId وSharedLogPath من أجل تحديد SharedLogSizeInMB.

تكوين خاص بالخدمة

يمكنك تعديل التكوينات الافتراضية للخدمات الموثوقة باستخدام حزمة التكوين (Config) أو تنفيذ الخدمة (التعليمات البرمجية).

  • التكوين - تعتبر حزمة التكوين هي المسئولة عن إتمام التكوين عن طريق تغيير ملف Settings.xml الذي تم إنشاؤه في جذر حزمة Microsoft Visual Studio ضمن مجلد Config لكل خدمة في التطبيق.
  • التعليمات البرمجية - يتم إنجاز التكوين عبر التعليمات البرمجية عن طريق إنشاء ReliableStateManager باستخدام عنصر ReliableStateManagerConfiguration مع مجموعة الخيارات المناسبة.

بشكل افتراضي، يبحث وقت تشغيل Azure Service Fabric عن أسماء الأقسام المعرفة مسبقا في ملف settings.xml ويستهلك قيم التكوين أثناء إنشاء مكونات وقت التشغيل الأساسية.

ملاحظة

لا تقم بحذف أسماء المقاطع الخاصة بالتكوينات التالية في ملف Settings.xml الذي تم إنشاؤه في حل Visual Studio إلا إذا كنت تخطط لتكوين الخدمة عبر التعليمة البرمجية. ستتطلب إعادة تسمية حزمة التكوين أو أسماء الأقسام تغيير التعليمة البرمجية عند تكوين ReliableStateManager.

تكوين أمان جهاز النسخ المتماثل

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

هام

في عقد Linux، يجب أن تكون الشهادات بتنسيق PEM. لمعرفة المزيد حول تحديد موقع الشهادات وتكوينها لنظام التشغيل Linux، راجع تكوين الشهادات على Linux.

اسم القسم الافتراضي

ReplicatorSecurityConfig

ملاحظة

لتغيير اسم هذا القسم، قم بتجاوز المعلمة replicatorSecuritySectionName إلى منشئ ReliableStateManagerConfiguration عند إنشاء ReliableStateManager لهذه الخدمة.

تكوين جهاز النسخ المتماثل

تستخدم تكوينات جهاز النسخ المتماثل لتكوين المكرر المسؤول عن توفير خدمة موثوقة ذات حالة عن طريق النسخ المتماثل للحالة واستمرارها محليًا. يقوم قالب Visual Studio بإنشاء تكوين افتراضي مفترض أن يكون كافيا. يناقش هذا القسم التكوينات الإضافية المتوفرة لضبط النسخة المتماثلة.

اسم القسم الافتراضي

ReplicatorConfig

ملاحظة

لتغيير اسم هذا القسم، قم بمنع المعلمة replicatorSecuritySectionName إلى منشئ ReliableStateManagerConfiguration عند إنشاء ReliableStateManager لهذه الخدمة.

أسماء التكوين

الاسم الوحدة القيمة الافتراضية الملاحظات
BatchAcknowledgementInterval ثوانٍ 0.015 الفترة الزمنية التي ينتظر فيها المكرر في المرحلة الثانوية بعد تلقي عملية قبل إرسال إقرار إلى المرحلة الابتدائية. ترسل أي إقرارات أخرى في انتظار إرسالها للعمليات التي تتم معالجتها خلال هذا الفاصل الزمني كرد واحد.
ReplicatorEndpoint غير متوفر لا يوجد افتراضي--معلمة مطلوبة عنوان IP والمنفذ الذي سيستخدمه المكرر الأساسي/الثانوي للاتصال بأجهزة النسخ المتماثلة الأخرى في مجموعة النسخ المتماثلة. يجب أن يشير هذا إلى نقطة نهاية مورد TCP في بيان الخدمة. راجع موارد بيان الخدمة لقراءة المزيد حول تعريف موارد نقطة النهاية في بيان الخدمة.
MaxPrimaryReplicationQueueSize عدد العمليات 8192 الحد الأقصى لعدد العمليات في قائمة الانتظار الأساسية. يتم تحرير العملية بعد تلقي المكرر الأساسي إقرارا من جميع المكررات الثانوية. يجب أن تكون هذه القيمة أكبر من 64 وقوة 2.
MaxSecondaryReplicationQueueSize عدد العمليات 16384 الحد الأقصى لعدد العمليات في قائمة الانتظار الثانوية. يتم تحرير العملية بعد تخصيص حالتها لتكون متاحة بشكل كبير من خلال الاستمرار. يجب أن تكون هذه القيمة أكبر من 64 وقوة 2.
CheckpointThresholdInMB ميغابايت 50 مساحة ملف السجل بعد التحقق من الحالة.
MaxRecordSizeInKB كيلوبايت 1024 أكبر حجم سجل قد يكتبه المكرر في السجل. يجب أن تكون هذه القيمة مضاعفات 4 وأكبر من 16.
MinLogSizeInMB ميغابايت 0 (تحديد النظام) الحد الأدنى لحجم سجل العمليات. لن يسمح للسجل بالاقتطاع إلى حجم أقل من هذا الإعداد. يشير 0 إلى أن المكرر سيحدد الحد الأدنى لحجم السجل. زيادة هذه القيمة يزيد من إمكانية إجراء نسخ جزئية ونسخ احتياطية تزايدية خصوصا مع انخفاض فرص اقتطاع سجلات السجل الخاصة به.
TruncationThresholdFactor العامل 2 يحدد حجم السجل الذي سيتم تشغيل الاقتطاع عنده. يتم تحديد عتبة الاقتطاع بواسطة MinLogSizeInMB مضروبة في TruncationThresholdFactor. يجب أن يكون عامل الاقتطاع أكبر من 1. MinLogSizeInMB * TruncationThresholdFactor يجب أن يكون أقل من MaxStreamSizeInMB.
ThrottlingThresholdFactor العامل 4 يحدد حجم السجل بداية تقييد النسخة المتماثلة. يتم تحديد عتبة التقييد (بالميجابايت) بواسطة Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). يجب أن تكون عتبة التقييد (بالميجابايت) أكبر من عتبة الاقتطاع (بالميجابايت). يجب أن تكون عتبة الاقتطاع (بالميجابايت) أقل من MaxStreamSizeInMB.
MaxAccumulatedBackupLogSizeInMB ميغابايت 800 الحد الأقصى للحجم المتراكم (بالميجابايت) لسجلات النسخ الاحتياطي في سلسلة سجلات النسخ الاحتياطي المحددة. ستفشل طلبات النسخ الاحتياطي التزايدي إذا كان النسخ الاحتياطي التزايدي سينشئ سجل نسخ احتياطي يتسبب في أن تكون سجلات النسخ الاحتياطي المتراكمة أكبر من هذا الحجم. في مثل هذه الحالات، يجب على المستخدم أخذ نسخة احتياطية كاملة.
SharedLogId GUID "" يحدد معرف GUID لاستخدامه لتحديد ملف السجل المشترك المستخدم مع هذه النسخة المتماثلة. في العادة، لا تستخدم الخدمات هذا الإعداد. لكن إذا تم تحديد SharedLogId، فيجب أيضًا تحديد SharedLogPath.
SharedLogPath اسم مسار مؤهل بالكامل "" يحدد المسار المؤهل بالكامل الذي سينشأ فيه ملف السجل المشترك لهذه النسخة المتماثلة. في العادة، لا تستخدم الخدمات هذا الإعداد. ومع ذلك، إذا تم تحديد SharedLogPath، فيجب أيضًا تحديد SharedLogId.
SlowApiMonitoringDuration ثوانٍ 300 يضبط الفاصل الزمني لمراقبة استدعاء API للتطبيقات المدارة. مثال: قدم المستخدم وظيفة رد اتصال نسخة احتياطية. بعد انتهاء الفاصل الزمني، سيرسل تقرير صحي تحذيري إلى Health Manager.
LogTruncationIntervalSeconds ثوانٍ 0 الفاصل الزمني القابل للتكوين الذي سيتم عنده بدء اقتطاع السجل على كل نسخة متماثلة. يستخدم لضمان اقتطاع السجل أيضا بناءً على الوقت وليس مجرد حجم السجل. يفرض هذا الإعداد أيضا مسح الإدخالات المحذوفة في قاموس موثوق. وبالتالي يمكن استخدامه لضمان مسح العناصر المحذوفة في الوقت المناسب.
EnableStableReads منطقي خطأ يؤدي تمكين القراءات المستقرة إلى تقييد النسخ المتماثلة الثانوية لترجع القيم التي تم استنباطها بالنصاب القانوني.

عينة التكوين عبر التعليمات البرمجية

class Program
{
    /// <summary>
    /// This is the entry point of the service host process.
    /// </summary>
    static void Main()
    {
        ServiceRuntime.RegisterServiceAsync("HelloWorldStatefulType",
            context => new HelloWorldStateful(context, 
                new ReliableStateManager(context, 
        new ReliableStateManagerConfiguration(
                        new ReliableStateManagerReplicatorSettings()
            {
                RetryInterval = TimeSpan.FromSeconds(3)
                        }
            )))).GetAwaiter().GetResult();
    }
}    
class MyStatefulService : StatefulService
{
    public MyStatefulService(StatefulServiceContext context, IReliableStateManagerReplica stateManager)
        : base(context, stateManager)
    { }
    ...
}

عينة ملف تكوين

<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <Section Name="ReplicatorConfig">
      <Parameter Name="ReplicatorEndpoint" Value="ReplicatorEndpoint" />
      <Parameter Name="BatchAcknowledgementInterval" Value="0.05"/>
      <Parameter Name="CheckpointThresholdInMB" Value="512" />
   </Section>
   <Section Name="ReplicatorSecurityConfig">
      <Parameter Name="CredentialType" Value="X509" />
      <Parameter Name="FindType" Value="FindByThumbprint" />
      <Parameter Name="FindValue" Value="9d c9 06 b1 69 dc 4f af fd 16 97 ac 78 1e 80 67 90 74 9d 2f" />
      <Parameter Name="StoreLocation" Value="LocalMachine" />
      <Parameter Name="StoreName" Value="My" />
      <Parameter Name="ProtectionLevel" Value="EncryptAndSign" />
      <Parameter Name="AllowedCommonNames" Value="My-Test-SAN1-Alice,My-Test-SAN1-Bob" />
   </Section>
</Settings>

الملاحظات

BatchAcknowledgementInterval يتحكم في زمن انتقال النسخ المتماثل. تؤدي قيمة "0" في أقل زمن انتقال ممكن، على حساب معدل النقل (حيث يجب إرسال المزيد من رسائل الإقرار ومعالجتها، وتحتوي كل منها على عدد أقل من الإقرارات). كلما زادت قيمة BatchAcknowledgementInterval، زاد معدل نقل النسخ المتماثل الإجمالي، على حساب زمن انتقال تشغيل أعلى. وهذا يؤثر مباشرة على زمن انتقال التثبيتات.

تتحكم المعلمة CheckpointThresholdInMB في مساحة القرص التي يستخدمها النسخ المتماثل لتخزين معلومات الحالة في ملف السجل المخصص للنسخة المتماثلة. أحيانا تؤدي الزيادة لقيمة أعلى من القيمة الافتراضية إلى تسريع أوقات إعادة التكوين عند إضافة نسخة متماثلة جديدة إلى المجموعة. ويرجع ذلك إلى نقل الحالة الجزئية الذي يحدث بسبب توفر مزيد من محفوظات العمليات في السجل. وقد يطيل وقت استرداد نسخة متماثلة بعد حدوث عطل.

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

يتم دائما استخدام إعدادات SharedLogId وSharedLogPath معًا لفصل السجل المشترك عن السجل المشترك الافتراضي للعقدة. للحصول على كفاءة، مثالية، يجب أن يحدد أكبر عدد ممكن من الخدمات نفس السجل المشترك. يجب وضع ملفات السجل المشتركة على الأقراص التي تستخدم فقط لملف السجل المشترك، وذلك لتقليل المنافسة على الاتصال الرئيسي. نتوقع تغيير هذه القيمة فقط في حالات نادرة.

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