RunToCompletion
بدءاً من الإصدار 7.1، يدعم Service Fabric دلالات RunToCompletion لـ الحاويات وتطبيقات الضيوف القابلة للتنفيذ . تمكّن هذه الدلالات التطبيقات والخدمات التي تكمل مهمة وتنهيها، على عكس التشغيل الدائم للتطبيقات والخدمات.
قبل متابعة هذه المقالة، نوصي بالتعرف على نموذج تطبيق Service Fabric ونموذج استضافة Service Fabric.
ملاحظة
لا يتوفر الدعم حالياً لدلالات RunToCompletion للخدمات المكتوبة باستخدام نموذج البرمجة Reliable Services.
المواصفات ودلالات Reliable Services
يمكن تحديد دلالات RunToCompletion باعتبارها ExecutionPolicy عند استيراد ServiceManifest. يتم توريث النهج المحدد بواسطة CodePackages المكونِّة لـ ServiceManifest. توفر القصاصة البرمجية ApplicationManifest.xml مثالاً.
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="RunToCompletionServicePackage" ServiceManifestVersion="1.0"/>
<Policies>
<ExecutionPolicy Type="RunToCompletion" Restart="OnFailure"/>
</Policies>
</ServiceManifestImport>
يسمح ExecutionPolicy بالسمتين التاليتين:
- Type:RunToCompletion هي حالياً القيمة الوحيدة المسموح بها لهذه السمة.
- Restart: تحدد هذه السمة نهج إعادة التشغيل الذي يتم تطبيقه على CodePackages المكوِّنة لـ ServicePackage، عند الفشل. يبدو أن إنهاء CodePackage باستخدام تعليمة برمجية للخروج لا تساوي صفراً قد فشل. القيم المسموح بها لهذه السمة هي OnFailure وNever مع تعيين OnFailure كقيمة افتراضية.
عندما يُعين نهج إعادة التشغيل على OnFailure، إذا فشل أي من CodePackage (تعليمة برمجية للخروج لا تساوي صفراً)، فستتم إعادة تشغيله، مع التراجع بين حالات الفشل المتكررة. عندما يُعين نهج إعادة التشغيل على Never، في حالة فشل أي CodePackage، تُعيّن حالة التوزيع DeployedServicePackage على Failed ولكن يُسمح بمتابعة تنفيذ CodePackages الأخرى. إذا تم تشغيل كل CodePackages المكوِنة لـ ServicePackage حتى الانتهاء بنجاح (التعليمة البرمجية للخروج تساوي 0)، تُعين حالة التوزيع لـ DeployedServicePackage على RanToCompletion.
مثال كامل يستخدم دلالات RunToCompletion
دعونا ننظر إلى مثال كامل يستخدم دلالات RunToCompletion.
هام
يَفترض المثال التالي الإلمام بكيفية إنشاء تطبيقات حاوية Windows باستخدام Service Fabric وDocker.
يُشير هذا المثال إلى mcr.microsoft.com/windows/nanoserver:1809. حاويات Windows Server غير متوافقة عبر جميع إصدارات نظام التشغيل المضيف OS. للتعرّف على المزيد، راجع Windows Container Version Compatibility.
يصف ServiceManifest.xml التالي ServicePackage تتكون من اثنين من CodePackages التي تمثل حاويات. RunToCompletionCodePackage1 تسجّل رسالة فقط في stdout وتخرج. RunToCompletionCodePackage2 تختبر اتصال عنوان الاسترجاع لفترة من الوقت ثم تخرج بتعليمة برمجية للخروج تساوي إما 0 أو 1 أو 2.
<?xml version="1.0" encoding="UTF-8"?>
<ServiceManifest Name="WindowsRunToCompletionServicePackage" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Description>Windows RunToCompletion Service</Description>
<ServiceTypes>
<StatelessServiceType ServiceTypeName="WindowsRunToCompletionServiceType" UseImplicitHost="true"/>
</ServiceTypes>
<CodePackage Name="RunToCompletionCodePackage1" Version="1.0">
<EntryPoint>
<ContainerHost>
<ImageName>mcr.microsoft.com/windows/nanoserver:1809</ImageName>
<Commands>/c,echo Hi from RunToCompletionCodePackage1 && exit 0</Commands>
<EntryPoint>cmd</EntryPoint>
</ContainerHost>
</EntryPoint>
</CodePackage>
<CodePackage Name="RunToCompletionCodePackage2" Version="1.0">
<EntryPoint>
<ContainerHost>
<ImageName>mcr.microsoft.com/windows/nanoserver:1809</ImageName>
<Commands>/v,/c,ping 127.0.0.1 && set /a exitCode=%random% % 3 && exit !exitCode!</Commands>
<EntryPoint>cmd</EntryPoint>
</ContainerHost>
</EntryPoint>
</CodePackage>
</ServiceManifest>
يصف ApplicationManifest.xml التالي تطبيقاً يستند إلى ServiceManifest.xml التي تمت مناقشته بالأعلى. إنه يحدد RunToCompletionExecutionPolicy لـ WindowsRunToCompletionServicePackage باستخدام نهج إعادة التشغيل OnFailure. عند تنشيط WindowsRunToCompletionServicePackage، يتم بدء تشغيل CodePackages المكوِنة لها. يجب خروج RunToCompletionCodePackage1 بنجاح عند التنشيط الأول. مع ذلك، يمكن أن تفشل RunToCompletionCodePackage2(بتعليمة برمجية للخروج لا تساوي 0)، وفي هذه الحالة سيتم إعادة تشغيلها لأن نهج إعادة التشغيل هو OnFailure.
<?xml version="1.0" encoding="UTF-8"?>
<ApplicationManifest ApplicationTypeName="WindowsRunToCompletionApplicationType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Description>Windows RunToCompletion Application</Description>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="WindowsRunToCompletionServicePackage" ServiceManifestVersion="1.0"/>
<Policies>
<ExecutionPolicy Type="RunToCompletion" Restart="OnFailure"/>
</Policies>
</ServiceManifestImport>
<DefaultServices>
<Service Name="WindowsRunToCompletionService" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="WindowsRunToCompletionServiceType" InstanceCount="1">
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
</ApplicationManifest>
الاستعلام عن حالة التوزيع لـ DeploymentServicePackage
يمكن الاستعلام عن حالة التوزيع لـ DeployedServicePackage من PowerShell باستخدام Get-ServiceFabricDeployedServicePackage أو من C# يستخدم FabricClient API GetDeployedServicePackageListAsync(String, Uri, String)
الاعتبارات التي يجب التفكير فيها عند استخدام دلالات RunToCompletion
يجب ملاحظة النقاط التالية لدعم RunToCompletion الحالي.
- يتوفر الدعم حالياً لهذه الدلالات فقط لـ الحاويات وتطبيقات الضيوف القابلة للتنفيذ.
- غير مسموح بسيناريوهات الترقية للتطبيقات التي لها دلالات RunToCompletion. يجب على المستخدمين حذف هذه التطبيقات وإعادة إنشائها، إذا لزم الأمر.
- يمكن أن تتسبب أحداث تجاوز الفشل في إعادة تنفيذ CodePackages بعد إكمالها بنجاح، على نفس العقدة أو العُقد الأخرى لنظام المجموعة. أمثلة أحداث تجاوز الفشل هي، إعادة تشغيل العقدة وترقيات وقت تشغيل Service Fabric على عقدة.
- RunToCompletion غير متوافق مع ServicePackageActivationMode="SharedProcess". يجب على المستخدمين تحديد ServicePackageActivationMode="ExclusiveProcess"، إذا كانت SharedProcess هي القيمة الافتراضية. سيفشل الإصدار 9.0 والإصدارات الأحدث من وقت تشغيل Service Fabric في التحقق من صحة هذه الخدمات.
الخطوات التالية
راجع المقالات التالية للحُصول على معلومات ذات صلة.