النسخ الاحتياطي واستعادة الخدمات الموثوقة والمستخدمين الموثوقين

Azure Service Fabric عبارة عن نظام أساسي بقابلية وصول عالية يقوم بتكرار الحالة عبر عقد متعددة للحفاظ على قابلية وصول عالية. لذلك، في حالة فشل عقدة واحدة في نظام المجموعة، تظل الخدمة متوفرة. في حين أن هذا التكرار المدمج الذي يوفره النظام الأساسي قد يكون كافيا للبعض، إلا أنه من الأفضل في بعض الحالات أن تقوم الخدمة بعمل نسخة احتياطية من البيانات (إلى متجر خارجي).

إشعار

من المهم جدًا عمل نسخ احتياطي لبياناتك واستعادتها (واختبار عملها بكفاءة كما هو متوقع) حتى تتمكن من تجاوز سيناريوهات فقد البيانات.

إشعار

توصي Microsoft باستخدام النسخ الاحتياطي الدوري والاستعادة لتكوين النسخ الاحتياطي للبيانات الخاصة بالخدمات الموثوقة والمستخدمين الموثوقين.

على سبيل المثال، قد ترغب الخدمة في عمل نسخة احتياطية من بياناتها للحماية من السيناريوهات التالية:

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

تتيح ميزة النسخ الاحتياطي/الاستعادة للخدمات المبنية على واجهة برمجة تطبيقات الخدمات الموثوقة إنشاء نسخ احتياطية واستعادتها. تسمح واجهات برمجة التطبيقات الاحتياطية التي يوفرها النظام الأساسي بالنسخ الاحتياطي (النسخ) الاحتياطية لحالة قسم الخدمة، دون حظر عمليات القراءة أو الكتابة. تسمح واجهات برمجة تطبيقات الاستعادة باستعادة حالة قسم الخدمة من نسخة احتياطية مختارة.

أنواع النسخ الاحتياطي

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

تنشأ مشكلة النسخ الاحتياطي الكامل عندما تكون نقاط التفتيش كبيرة. على سبيل المثال، تحتوي النسخة المتماثلة التي تحتوي على 16 غيغابايت من الحالة على نقاط تفتيش تصل إلى 16 غيغابايت تقريبا. إذا كان لدينا هدف نقطة الاسترداد لمدة خمس دقائق، فيجب نسخ النسخة المتماثلة احتياطيا كل خمس دقائق. في كل مرة يتم فيها النسخ الاحتياطي، يحتاج إلى نسخ 16 غيغابايت من نقاط التفتيش بالإضافة إلى 50 ميغابايت (قابلة للتكوين باستخدام CheckpointThresholdInMB) من السجلات.

مثال النسخ الاحتياطي الكامل.

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

مثال على النسخ الاحتياطي التزايدي.

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

خدمات النسخ الاحتياطي الموثوقة

يتمتع منشئ الخدمة بالتحكم الكامل في وقت عمل النسخ الاحتياطية ومكان تخزين النسخ الاحتياطية.

لبدء النسخ الاحتياطي، تحتاج الخدمة إلى استدعاء وظيفة العضو الموروث BackupAsync.
يمكن إجراء النسخ الاحتياطية فقط من النسخ المتماثلة الأساسية، وتتطلب منح حالة نقل المعلومات.

كما هو موضح أدناه، يأخذ BackupAsync في عنصر BackupDescription، حيث يستطيع المستخدم تحديد نسخة احتياطية كاملة أو تزايدية، بالإضافة إلى وظيفة رد الاتصال، Func<< BackupInfo, CancellationToken, Task<bool>>> التي يتم استدعاؤها عند إنشاء مجلد النسخ الاحتياطي محليا ويكون جاهزا للنقل إلى بعض وحدات التخزين الخارجية.


BackupDescription myBackupDescription = new BackupDescription(BackupOption.Incremental,this.BackupCallbackAsync);

await this.BackupAsync(myBackupDescription);

قد يفشل طلب أخذ نسخة احتياطية تزايدية باستخدام FabricMissingFullBackupException. يشير هذا الاستثناء إلى حدوث أحد الأشياء التالية:

  • النسخة المتماثلة لم يحدث لها نسخ احتياطي كامل منذ أن أصبحت نسخة أساسية،
  • اقتطاع بعض سجلات السجل منذ آخر نسخة احتياطية أو
  • تجاوزت نسخة متماثلة الحد MaxAccumulatedBackupLogSizeInMB.

يمكن للمستخدمين تقوية احتمالات إجراء نسخ احتياطية متزايدة عن طريق تكوين MinLogSizeInMB أو TruncationThresholdFactor. زيادة هذه القيم يؤدي لزيادة استخدام القرص لكل نسخة متماثلة. لمزيد من المعلومات، راجع تكوين الخدمات الموثوقة

BackupInfo يوفر معلومات تتعلق بالنسخة الاحتياطية، بما في ذلك موقع المجلد الذي قام وقت التشغيل بحفظ النسخة الاحتياطية فيه (BackupInfo.Directory). يمكن لوظيفة رد الاتصال نقل BackupInfo.Directory إلى متجر خارجي أو موقع آخر. تقوم هذه الوظيفة أيضا بإرجاع bool يشير إلى ما إذا كانت قادرة على نقل مجلد النسخ الاحتياطي بنجاح إلى موقعه المستهدف.

توضح التعليمة البرمجية التالية كيف يستخدم أسلوب BackupCallbackAsync لتحميل النسخة الاحتياطية إلى Azure Storage:

private async Task<bool> BackupCallbackAsync(BackupInfo backupInfo, CancellationToken cancellationToken)
{
    var backupId = Guid.NewGuid();

    await externalBackupStore.UploadBackupFolderAsync(backupInfo.Directory, backupId, cancellationToken);

    return true;
}

في المثال السابق، ExternalBackupStore هي فئة العينة المستخدمة لربطها مع تخزين Azure Blob، و UploadBackupFolderAsync هي الطريقة التي تضغط المجلد وتضعه في مخزن Azure Blob.

لاحظ ما يلي:

  • يُسمح فقط بإجراء عملية نسخ احتياطي واحدة فقط لكل نسخ متماثل في وقت محدد. سيؤدي أكثر من اتصال BackupAsync في وقت واحد لطرح FabricBackupInProgressException لتخفيض عدد النسخ الاحتياطية في العملية الواحدة لتكون نسخة واحدة.
  • في حالة فشل نسخة متماثلة أثناء وجود نسخة احتياطية قيد التقدم، قد لا تكون النسخة الاحتياطية قد اكتملت. وبالتالي، بمجرد انتهاء تجاوز الفشل، تكون الخدمة مسئولة عن إعادة تشغيل النسخة الاحتياطية عن طريق استدعاء BackupAsync حسب الضرورة.

خدمات الاستعادة الموثوقة

بشكل عام، تنقسم الحالات التي تحتاج فيها إلى إجراء عملية استعادة ضمن إلى الفئات التالية:

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

في حين توفر العديد من الأساليب الممكنة، فإننا نقدم بعض الأمثلة على استخدام RestoreAsync لتجاوز السيناريوهات المذكورة بعاليه.

فقدان بيانات القسم في الخدمات الموثوقة

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

يحتاج منشئ الخدمة إلى تنفيذ ما يلي لاسترداد:

  • منع أسلوب الفئة الأساسية الظاهرية OnDataLossAsync.
  • ابحث عن أحدث نسخة احتياطية في الموقع الخارجي الذي يحتوي على النسخ الاحتياطية للخدمة.
  • قم بتنزيل أحدث نسخة احتياطية (وقم بإلغاء ضبط النسخة الاحتياطية في مجلد النسخ الاحتياطي إذا تم ضغطها).
  • يوفر الأسلوب OnDataLossAsync RestoreContext. اتصل بواجهة برمجة التطبيقات RestoreAsync على RestoreContext المتوفرة.
  • ستعود صحيحة إذا نجحت عملية الاستعادة.

فيما يلي مثال على تنفيذ الأسلوب OnDataLossAsync:

protected override async Task<bool> OnDataLossAsync(RestoreContext restoreCtx, CancellationToken cancellationToken)
{
    var backupFolder = await this.externalBackupStore.DownloadLastBackupAsync(cancellationToken);

    var restoreDescription = new RestoreDescription(backupFolder);

    await restoreCtx.RestoreAsync(restoreDescription);

    return true;
}

يحتوي RestoreDescription الذي تم تمريره إلى الاتصال RestoreContext.RestoreAsync على عضو يسمى BackupFolderPath. عند استعادة نسخة احتياطية كاملة واحدة، يجب تعيين BackupFolderPath إلى المسار المحلي للمجلد الذي يحتوي على النسخة الاحتياطية الكاملة. عند استعادة نسخة احتياطية كاملة وعدد من النسخ الاحتياطية التزايدية، يجب تعيين BackupFolderPath إلى المسار المحلي للمجلد الذي لا يحتوي فقط على النسخة الاحتياطية الكاملة، ولكن أيضا على جميع النسخ الاحتياطية المتزايدة. الاتصال RestoreAsync يمكنه طرح FabricMissingFullBackupException إذا كان BackupFolderPath المتوفر لا يحتوي على نسخة احتياطية كاملة. يمكنه أيضا طرح ArgumentException إذا كان BackupFolderPath لديه سلسلة مكسورة من النسخ الاحتياطية المتزايدة. على سبيل المثال، إذا كانت تحتوي على النسخة الاحتياطية الكاملة، فإن النسخة الاحتياطية التزايدية الأولى والثالثة هما المعنيتان، وليس النسخة التزايدية الإضافية الثانية.

إشعار

يتم تعيين RestorePolicy إلى آمن بشكل افتراضي. هذا يعني أن واجهة برمجة التطبيقات RestoreAsync ستفشل مع ArgumentException إذا اكتشفت احتواء مجلد النسخ الاحتياطي على حالة أقدم من النسخة المتماثلة الحالية أو تساويها. يمكن استخدام RestorePolicy.Force لمنع فحص السلامة هذا. يتم تحديد هذا كجزء من RestoreDescription.

خدمة المحذوفة أو المفقودة

عند إزالة خدمة، يجب عليك إعادة إنشاء الخدمة أولا قبل استعادة البيانات. من المهم إنشاء الخدمة بنفس التكوين، على سبيل المثال، نظام التقسيم، بحيث يمكن استعادة البيانات بسلاسة. بمجرد تشغيل الخدمة، يجب استدعاء واجهة برمجة التطبيقات لاستعادة البيانات (OnDataLossAsync أو أعلى) في كل قسم من أقسام هذه الخدمة. إحدى طرق تحقيق ذلك هي باستخدام FabricClient.TestManagementClient.StartPartitionDataLossAsync على كل قسم.

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

إشعار

لا يوصى باستخدام FabricClient.ServiceManager.InvokeDataLossAsync على كل قسم لاستعادة الخدمة بأكملها، لأن ذلك قد يؤدي إلى تلف حالة نظام المجموعة الخاصة بك.

النسخ المتماثل لبيانات التطبيق التالفة

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

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

إذا لم تكن متأكدا من النسخ الاحتياطية التالفة، فيمكنك نشر مجموعة Service Fabric جديدة واستعادة النسخ الاحتياطية للأقسام المعطوبة كما حدث مع سيناريو "الخدمة المحذوفة أو المفقودة" أعلاه. لكل قسم، ابدأ في استعادة النسخ الاحتياطية من الأحدث إلى الأقدم. بمجرد العثور على نسخة احتياطية ليس بها تلف، قم بنقل / حذف جميع النسخ الاحتياطية لهذا القسم التي كانت أحدث (من تلك النسخة الاحتياطية). كرّر هذه العملية مع كل قسم. الآن، عند استدعاء OnDataLossAsync على القسم في مجموعة الإنتاج، ستكون آخر نسخة احتياطية موجودة في المتجر الخارجي هي النسخة التي تم اختيارها بواسطة العملية المذكورة أعلاه.

الآن، يمكن استخدام الخطوات الموجودة في قسم "الخدمة المحذوفة أو المفقودة" لاستعادة حالة الخدمة إلى الحالة التي كانت عليها قبل أن تفسده التعليمة البرمجية المعطوبة.

لاحظ ما يلي:

  • عند الاستعادة، هناك احتمال أن تكون النسخة الاحتياطية التي تتم استعادتها أقدم من حالة القسم قبل فقد البيانات. لهذا السبب، يجب عليك اللجوء لهذا الخيار فقط كملاذ أخير لاستعادة أكبر قدر ممكن من البيانات.
  • يمكن أن تكون السلسلة التي تمثل مسار مجلد النسخ الاحتياطي ومسارات الملفات داخل مجلد النسخ الاحتياطي أكبر من 255 حرفا، حسب مسار FabricDataRoot وطول اسم نوع التطبيق. يمكن أن يؤدي ذلك لقيام أساليب .NET ، مثل Directory.Move بطرح الاستثناء PathTooLongException. أحد الحلول البديلة هو استدعاء واجهات برمجة تطبيقات kernel32 مباشرة، مثل CopyFile.

النسخ الاحتياطي واستعادة المستخدمين الموثوقين

تم تصميم إطار عمل المستخدمين الموثوقين على رأس الخدمات الموثوقة. ActorService، التي تستضيف المستخدم (المستخدمين) الموثوقين هي خدمة موثوقة ذات حالة. وبالتالي، فإن جميع وظائف النسخ الاحتياطي والاستعادة المتوفرة في الخدمات الموثوقة متاحة أيضا للمستخدمين الموثوقين (باستثناء السلوكيات الخاصة بموفري الحالة). نظرا لأن عملية النسخ الاحتياطي تتم على أساس كل قسم، سيتم إجراء نسخ احتياطي لجميع المستخدمين الموثوقين في هذا القسم (سينطبق نفس الأمر على عملية الاستعادة وستكون على أساس كل قسم). لإجراء النسخ الاحتياطي/الاستعادة، يجب على مالك الخدمة إنشاء فئة خدمة مستخدم مخصص مشتقة من فئة ActorService ثم إجراء نسخ احتياطي/استعادة مشابهة للخدمات الموثوقة كما هو موضح أعلاه في الأقسام السابقة.

class MyCustomActorService : ActorService
{
    public MyCustomActorService(StatefulServiceContext context, ActorTypeInformation actorTypeInfo)
          : base(context, actorTypeInfo)
    {
    }
    
    //
    // Method overrides and other code.
    //
}

عند إنشاء فئة خدمة ممثل مخصصة، تحتاج إلى تسجيل ذلك أيضا عند تسجيل المستخدم.

ActorRuntime.RegisterActorAsync<MyActor>(
    (context, typeInfo) => new MyCustomActorService(context, typeInfo)).GetAwaiter().GetResult();

موفر الحالة الافتراضي للمستخدمين الموثوقين هو KvsActorStateProvider. لا يتم تمكين النسخ الاحتياطي التزايدي بشكل افتراضي لـ KvsActorStateProvider. يمكنك تمكين النسخ الاحتياطي التزايدي عن طريق إنشاء KvsActorStateProvider باستخدام الإعداد المناسب في الدالة الإنشائية ثم تمريره إلى الدالة الإنشائية ActorService كما هو موضح في القصاصة البرمجية التالية:

class MyCustomActorService : ActorService
{
    public MyCustomActorService(StatefulServiceContext context, ActorTypeInformation actorTypeInfo)
          : base(context, actorTypeInfo, null, null, new KvsActorStateProvider(true)) // Enable incremental backup
    {
    }
    
    //
    // Method overrides and other code.
    //
}

بعد تمكين النسخ الاحتياطي التزايدي، قد يفشل أخذ نسخة احتياطية تزايدية باستخدام FabricMissingFullBackupException لأحد الأسباب التالية وسيتعين عليك أخذ نسخة احتياطية كاملة قبل أخذ نسخة (نسخ) احتياطية تزايدية:

  • لم يحدث نسخ كامل للنسخة المتماثلة منذ أن أصبحت نسخة أساسية.
  • تم اقتطاع بعض سجلات السجل منذ أخذ آخر نسخة احتياطية.

عند تمكين النسخ الاحتياطي التزايدي، لا يستخدم KvsActorStateProvider المخزن المؤقت الدائري لإدارة سجلات السجل الخاصة به ويقوم باقتطاعه بشكل دوري. إذا لم يقوم المستخدم بأخذ أي نسخة احتياطية لمدة 45 دقيقة، يقوم النظام تلقائيا باقتطاع سجلات السجل. يمكن تكوين هذا الفاصل الزمني عن طريق تحديد logTruncationIntervalInMinutes في الدالة الإنشائية KvsActorStateProvider (كم الحال عند تمكين النسخ الاحتياطي التزايدي). قد يتم أيضا اقتطاع سجلات السجل إذا كانت النسخة المتماثلة الأساسية تحتاج إلى إنشاء نسخة متماثلة أخرى عن طريق إرسال جميع بياناتها.

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

إشعار

KvsActorStateProviderيتجاهل حاليا الخيارRestorePolicy.Safe. يتم التخطيط لدعم هذه الميزة في إصدار قادم.

اختبار النسخ الاحتياطي والاستعادة

يجب التأكد من إجراء نسخ احتياطي للبيانات الهامة واستعادتها. يمكن القيام بذلك عن طريق استدعاء cmdlet Start-ServiceFabricPartitionDataLoss في PowerShell الذي يمكن أن يؤدي إلى فقد البيانات في قسم معين لاختبار ما إذا كانت وظيفة النسخ الاحتياطي للبيانات واستعادتها لخدمتك تعمل كما هو متوقع. من الممكن أيضا استدعاء فقد البيانات برمجيا واستعادتها من هذا الحدث أيضا.

إشعار

يمكنك البحث عن نموذج تنفيذ لوظائف النسخ الاحتياطي والاستعادة في تطبيق مرجع الويب على GitHub. يرجى الاطلاع على الخدمة Inventory.Service لمزيد من التفاصيل.

بين ثنايا القسم: هناك مزيد من التفاصيل حول النسخ الاحتياطي والاستعادة

إليك بعض التفاصيل الإضافية حول النسخ الاحتياطي والاستعادة.

نسخة احتياطية

يوفر مدير الحالة الموثوق به القدرة على إنشاء نسخ احتياطية متسقة دون حظر أي عمليات قراءة أو نقل معلومات. للقيام بذلك، فإنه يستخدم نقطة تفتيش وآلية ثبات السجل. يأخذ مدير الحالة الموثوق به نقاط تفتيش غامضة (خفيفة) في نقاط معينة لتخفيف الضغط من سجل المعاملات وتحسين أوقات الاسترداد. عند استدعاء BackupAsync، يقوم مدير الحالة الموثوق به بتوجيه جميع العناصر الموثوقة لنسخ أحدث ملفات نقاط التفتيش الخاصة بها إلى مجلد نسخ احتياطي محلي. بعد ذلك، يقوم مدير الحالة الموثوق به بنسخ كافة سجلات السجل، بدءا من "مؤشر البدء" إلى أحدث سجلات سجل في مجلد النسخ الاحتياطي. نظرا لأن جميع سجلات السجل حتى أحدث سجل يتم تضمينها في النسخة الاحتياطية ويحافظ مدير الحالة الموثوق به على تسجيل الكتابة المسبق، يتأكد مدير الحالة الموثوق به من تضمين جميع العمليات التي تم تنفيذها (نجح إرجاع CommitAsync) في النسخة الاحتياطية.

أي معاملة تنفذ بعد استدعاء BackupAsync قد تكون في النسخة الاحتياطية أو في غيرها. بمجرد ملء النظام الأساسي لمجلد النسخ الاحتياطي المحلي (أي اكتمال النسخ الاحتياطي المحلي بحلول وقت التشغيل)، يتم استدعاء رد الاتصال بالنسخ الاحتياطي للخدمة. يعد رد الاتصال هو المسئول عن نقل مجلد النسخ الاحتياطي إلى موقع خارجي مثل Azure Storage.

استعادة

يوفر مدير الحالة الموثوق به القدرة على الاستعادة من نسخة احتياطية باستخدام واجهة برمجة التطبيقات RestoreAsync.
أسلوب RestoreAsync على RestoreContext يمكن استدعاؤه فقط داخل الأسلوب OnDataLossAsync. يشير bool الذي أرجعه OnDataLossAsync إلى ما إذا كانت الخدمة قد استعادت حالتها من مصدر خارجي. إذا أرجع OnDataLossAsync صواب، فسيقوم Service Fabric بإعادة إنشاء كافة النسخ المتماثلة الأخرى من هذا النسخ الأساسي. يضمن Service Fabric انتقال النسخ المتماثلة التي ستتلقى الاستدعاء OnDataLossAsync أولا إلى الدور الأساسي ولكن لا يتم منحها حالة القراءة أو حالة نقل المعلومات. وهذا يعني أنه بالنسبة لمنفذي StatefulService، فإن RunAsync لن يتم استدعاؤه حتى نجاح إكمال OnDataLossAsync. بعد ذلك، سيتم استدعاء OnDataLossAsync في النسخة الأساسية الجديدة. حتى تكمل الخدمة واجهة برمجة التطبيقات هذه بنجاح (عن طريق إرجاع صواب أو خطأ) وتنتهي من إعادة التكوين الخاصة بها، سيستمر استدعاء واجهة برمجة التطبيقات كل مرة.

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

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