تكوين الخدمات الموثوقة ذات الحالة
هناك مجموعتان من إعدادات التكوين للخدمات الموثوقة. مجموعة واحدة عمومية لجميع الخدمات الموثوقة في نظام المجموعة أما المجموعة الأخرى فهي خاصة بخدمة موثوقة معينة.
التكوين العمومي
يتم تحديد التكوين العمومي في بيان الكتلة لنظام المجموعة ضمن قسم 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 | Boolean | خطأ | يؤدي تمكين القراءات المستقرة إلى تقييد النسخ المتماثلة الثانوية لترجع القيم التي تم استنباطها بالنصاب القانوني. |
عينة التكوين عبر التعليمات البرمجية
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 معًا لفصل السجل المشترك عن السجل المشترك الافتراضي للعقدة. للحصول على أفضل كفاءة، يجب أن يحدد أكبر عدد ممكن من الخدمات نفس السجل المشترك. يجب وضع ملفات السجل المشتركة على الأقراص التي تستخدم فقط لملف السجل المشترك، وذلك لتقليل المنافسة على الاتصال الرئيسي. نتوقع تغيير هذه القيمة فقط في حالات نادرة.