توزيع التطبيقات وإزالتها باستخدام PowerShell


بمجرد حزم نوع التطبيق، يصبح جاهزاً للتوزيع في نظام مجموعة Azure Service Fabric. يتضمن التوزيع الخطوات الثلاث التالية:

  1. تحميل حزمة التطبيق إلى مخزن الصور.
  2. تسجيل نوع التطبيق باستخدام المسار النسبي لمخزن الصور.
  3. إنشاء مثيل التطبيق.

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

  1. إزالة (أو حذف) مثيل التطبيق قيد التشغيل.
  2. قم بإلغاء تسجيل نوع الطلب إذا لم تعد بحاجة إليه.
  3. قم بإزالة حزمة التطبيق من مخزن الصور.

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

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

  1. تحميل sfpkg إلى مخزن خارجي. يمكن أن يكون المخزن الخارجي أي مخزن يعرض نقطة نهاية REST http أو https.
  2. قم بتسجيل نوع التطبيق باستخدام عنوان URI للتنزيل الخارجي ومعلومات نوع التطبيق.
  3. إنشاء مثيل التطبيق.

للتنظيف، قم بإزالة مثيلات التطبيق وإلغاء تسجيل نوع التطبيق. نظراً لعدم نسخ الحزمة إلى مخزن الصور، لا يوجد موقع مؤقت للتنظيف. يتوفر التزويد من المخزن الخارجي بدءاً من الإصدار 6.1 لـ Service Fabric.

إشعار

ولا تدعم Visual Studio حالياً تزويداً خارجياً.

الاتصال بنظام المجموعة

قبل تشغيل أي أوامر PowerShell في هذه المقالة، ابدأ دائماً باستخدام Connect-ServiceFabricCluster للاتصال بنظام المجموعة Service Fabric. للاتصال بنظام مجموعة التطوير المحلي، قم بتشغيل ما يلي:

Connect-ServiceFabricCluster

للحصول على أمثلة للاتصال بنظام مجموعة أو نظام مجموعة بعيد مؤمن باستخدام معرف Microsoft Entra أو شهادات X509 أو Windows Active Directory، راجع الاتصال بمجموعة آمنة.

تحميل حزمة التطبيق

يؤدي تحميل حزمة التطبيق إلى وضعها في موقع يمكن الوصول إليه بواسطة مكونات Service Fabric الداخلية. إذا كنت ترغب في التحقق من حزمة التطبيق محلياً، فاستخدم الأمر cmdlet Test-ServiceFabricApplicationPackage.

يقوم الأمر Copy-ServiceFabricApplicationPackage بتحميل حزمة التطبيق إلى مخزن صور نظام المجموعة.

لنفترض أنك قمت بإنشاء وحزم تطبيق باسم MyApplication في Visual Studio عام 2015. بشكل افتراضي، اسم نوع التطبيق المدرج في ApplicationManifest.xml هو "MyApplicationType". توجد حزمة التطبيق، التي تحتوي على بيان التطبيق الضروري وبيانات الخدمة وحزم التعليمات البرمجية/التكوين/البيانات، في C:\Users<username>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug.

يسرد الأمر التالي محتويات حزمة التطبيق:

$path = 'C:\Users\<user\>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug'
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
│   ApplicationManifest.xml
│
└───Stateless1Pkg
    │   ServiceManifest.xml
    │
    ├───Code
    │       Microsoft.ServiceFabric.Data.dll
    │       Microsoft.ServiceFabric.Data.Interfaces.dll
    │       Microsoft.ServiceFabric.Internal.dll
    │       Microsoft.ServiceFabric.Internal.Strings.dll
    │       Microsoft.ServiceFabric.Services.dll
    │       ServiceFabricServiceModel.dll
    │       Stateless1.exe
    │       Stateless1.exe.config
    │       Stateless1.pdb
    │       System.Fabric.dll
    │       System.Fabric.Strings.dll
    │
    └───Config
            Settings.xml

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

لضغط حزمة، استخدم نفس الأمر Copy-ServiceFabricApplicationPackage. يمكن إجراء الضغط بشكل منفصل عن التحميل، باستخدام العلامةSkipCopy، أو مع عملية التحميل. تطبيق الضغط على حزمة مضغوطة هو عدم التشغيل. لإلغاء ضغط حزمة مضغوطة، استخدم نفس الأمر Copy-ServiceFabricApplicationPackage مع التبديل UncompressPackage.

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

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -CompressPackage -SkipCopy
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
|   ApplicationManifest.xml
|
└───Stateless1Pkg
       Code.zip
       Config.zip
       ServiceManifest.xml

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

الحجم الأولي (ميجابايت) عدد الملفات وقت الضغط حجم الحزمة المضغوطة (ميجابايت)
100 100 00:00:03.3547592 60
512 100 00:00:16.3850303 307
1024 500 00:00:32.5907950 615
2048 1000 00:01:04.3775554 1231
5012 100 00:02:45.2951288 3074

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

يقوم المثال التالي بتحميل الحزمة إلى مخزن الصور، إلى مجلد باسم "MyApplicationV1":

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -TimeoutSec 1800

إذا لم تقم بتحديد المعلمة -ApplicationPackagePathInImageStore، يتم نسخ حزمة التطبيق إلى المجلد "تتبع الأخطاء" في مخزن الصور.

إشعار

سيقوم Copy-ServiceFabricApplicationPackage تلقائياً بالكشف عن سلسلة اتصال مخزن الصور المناسبة إذا كانت جلسة عمل PowerShell متصلة بنظام مجموعة Service Fabric. بالنسبة لإصدارات Service Fabric الأقدم من 5.6، يجب توفير الوسيطة -ImageStoreConnectionString بشكل صريح.

PS C:\> Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -ImageStoreConnectionString (Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)) -TimeoutSec 1800

يتم استخدام الأمر cmdlet Get-ImageStoreConnectionStringFromClusterManifest، وهو جزء من الوحدة Service Fabric SDK PowerShell، للحصول على سلسلة اتصال مخزن الصور. لاستيراد وحدة عدة تطوير البرامج، قم بتشغيل ما يلي:

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

راجع فهم سلسلة اتصال مخزن الصور للحصول على معلومات تكميلية عن مخزن الصور وسلسلة اتصال مخزن الصور.

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

تسجيل حزمة التطبيق

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

قم بتشغيل الأمر cmdlet Register-ServiceFabricApplicationType لتسجيل نوع التطبيق في نظام المجموعة وإتاحته للتوزيع:

تسجيل حزمة التطبيق التي تم نسخها إلى مخزن الصور

عندما يتم نسخ حزمة مسبقاً إلى مخزن الصور، تحدد عملية التسجيل المسار النسبي في مخزن الصور.

Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded

"MyApplicationV1" هو المجلد الموجود في مخزن الصور حيث توجد حزمة التطبيق. يتم الآن تسجيل نوع التطبيق الذي يحمل الاسم "MyApplicationType" والإصدار "1.0.0" (كلاهما موجود في بيان التطبيق) في نظام المجموعة.

تسجيل حزمة التطبيق التي تم نسخها إلى مخزن خارجي

بدءاً من الإصدار 6.1 لـ Service Fabric، يدعم التوفير تنزيل الحزمة من مخزن خارجي. يمثل عنوان URL للتنزيل المسار إلى sfpkg حزمة التطبيق حيث يمكن تنزيل حزمة التطبيق باستخدام بروتوكولات HTTP أو HTTPS. يجب أن تكون الحزمة قد تم تحميلها مسبقاً إلى هذا الموقع الخارجي. يجب أن يسمح عنوان URI بالوصول إلى READ حتى يتمكن نظام Service Fabric من تنزيل الملف. يجب أن يكون الملف sfpkg الملحق ".sfpkg". يجب أن تتضمن عملية التوفير معلومات نوع التطبيق، كما هو موجود في بيان التطبيق.

Register-ServiceFabricApplicationType -ApplicationPackageDownloadUri "https://sftestresources.blob.core.windows.net:443/sfpkgholder/MyAppPackage.sfpkg" -ApplicationTypeName MyApp -ApplicationTypeVersion V1 -Async

يعود الأمر Register-ServiceFabricApplicationType فقط بعد أن يقوم النظام بتسجيل حزمة التطبيق بنجاح. يعتمد الوقت الذي يستغرقه التسجيل على حجم ومحتويات حزمة التطبيق. إذا لزم الأمر، يمكن استخدام المعلمة -TimeoutSec لتوفير مهلة أطول (المهلة الافتراضية هي 60 ثانية).

إذا كان لديك حزمة تطبيقات كبيرة أو إذا كنت تواجه مهلات، استخدم المعلمة -Async. يعود الأمر عندما يقبل نظام المجموعة أمر التسجيل. وتستمر عملية التسجيل حسب الحاجة. يسرد الأمر Get-ServiceFabricApplicationType إصدارات نوع التطبيق وحالة تسجيلها. يمكنك استخدام هذا الأمر لتحديد وقت الانتهاء من التسجيل.

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

بادر بإزالة حزمة التطبيق من مخزن الصور

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

Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1

قم بإنشاء التطبيق

يمكنك إنشاء مثيل لتطبيق من أي إصدار لنوع التطبيق تم تسجيله بنجاح باستخدام الأمر cmdlet New-ServiceFabricApplication. يجب أن يبدأ اسم كل تطبيق بالمخطط "fabric:"، ويجب أن يكون فريداً لكل مثيل تطبيق. يتم أيضًا إنشاء أي خدمات افتراضية محددة في بيان التطبيق لنوع التطبيق الهدف.

New-ServiceFabricApplication fabric:/MyApp MyApplicationType 1.0.0
ApplicationName        : fabric:/MyApp
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationParameters  : {}

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

لمعرفة التطبيقات والخدمات المسماة التي يتم تشغيلها في نظام المجموعة، قم بتشغيل الأمرين cmdlets Get-ServiceFabricApplication وGet-ServiceFabricService:

Get-ServiceFabricApplication  
ApplicationName        : fabric:/MyApp
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationStatus      : Ready
HealthState            : Ok
ApplicationParameters  : {}
Get-ServiceFabricApplication | Get-ServiceFabricService
ServiceName            : fabric:/MyApp/Stateless1
ServiceKind            : Stateless
ServiceTypeName        : Stateless1Type
IsServiceGroup         : False
ServiceManifestVersion : 1.0.0
ServiceStatus          : Active
HealthState            : Ok

إزالة تطبيق

عندما لا يعود هناك حاجة إلى مثيل تطبيق، يمكنك إزالته بشكل دائم بالاسم باستخدام الأمر cmdlet Remove-ServiceFabricApplication. يقوم Remove-ServiceFabricApplication بإزالة جميع الخدمات التي تنتمي إلى التطبيق كذلك، وإزالة كل حالة الخدمة بشكل دائم.

تحذير

لا يمكن عكس هذه العملية، ولا يمكن استرداد حالة التطبيق.

Remove-ServiceFabricApplication fabric:/MyApp
Confirm
Continue with this operation?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):
Remove application instance succeeded
Get-ServiceFabricApplication

إلغاء تسجيل نوع طلب

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

قم بتشغيل Get-ServiceFabricApplicationType للاطلاع على أنواع التطبيقات المسجلة حالياً في نظام المجموعة:

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

قم بتشغيل Unregister-ServiceFabricApplicationType لإلغاء تسجيل نوع تطبيق معين:

Unregister-ServiceFabricApplicationType MyApplicationType 1.0.0

استكشاف الأخطاء وإصلاحها

تطلب Copy-ServiceFabricApplicationPackage للحصول على ImageStoreConnectionString

يجب أن تحتوي بيئة Service Fabric SDK بالفعل على إعداد القيم الافتراضية الصحيحة. ولكن إذا لزم الأمر، يجب أن تتطابق ImageStoreConnectionString لكافة الأوامر مع القيمة التي يستخدمها نظام مجموعة Service Fabric. يمكنك العثور على ImageStoreConnectionString في بيان نظام المجموعة، الذي تم استرداده باستخدام الأمرين Get-ServiceFabricClusterManifest وGet-ImageStoreConnectionStringFromClusterManifest:

Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)

يتم استخدام الأمر cmdlet Get-ImageStoreConnectionStringFromClusterManifest، وهو جزء من الوحدة Service Fabric SDK PowerShell، للحصول على سلسلة اتصال مخزن الصور. لاستيراد وحدة عدة تطوير البرامج، قم بتشغيل ما يلي:

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

تم العثور على ImageStoreConnectionString في بيان نظام المجموعة:

<ClusterManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="Server-Default-SingleNode" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">

    [...]

    <Section Name="Management">
      <Parameter Name="ImageStoreConnectionString" Value="file:D:\ServiceFabric\Data\ImageStore" />
    </Section>

    [...]

راجع فهم سلسلة اتصال مخزن الصور للحصول على معلومات تكميلية عن مخزن الصور وسلسلة اتصال مخزن الصور.

توزيع حزمة تطبيق كبيرة

المشكلة: انتهت مهلة Copy-ServiceFabricApplicationPackage لحزمة تطبيق كبيرة (ترتيب جيجابايت). جرّب:

  • حدد مهلة أكبر للأمر Copy-ServiceFabricApplicationPackage، باستخدام المعلمة TimeoutSec. مدة المهلة هي 30 دقيقة بشكل افتراضي.
  • تحقق من اتصال الشبكة بين الجهاز المصدر ونظام المجموعة لديك. إذا كان الاتصال بطيئاً، ففكر في استخدام جهاز مزود باتصال شبكة أفضل. إذا كان الجهاز العميل في منطقة أخرى غير نظام المجموعة، ففكر في استخدام جهاز عميل في منطقة أقرب أو نفس المنطقة مثل نظام المجموعة.
  • تحقق مما إذا كنت تصل إلى التحكم بالنطاق الترددي الخارجي أم لا. على سبيل المثال، عند تكوين مخزن الصور لاستخدام تخزين azure، قد يتم تقييد التحميل.

المشكلة: اكتمل تحميل الحزمة بنجاح، ولكن انتهت مهلة Register-ServiceFabricApplicationType حاول القيام بما يلي:

  • ضغط الحزمة قبل النسخ إلى مخزن الصور. يقلل الضغط من حجم الملفات وعددها، مما يقلل بدوره من كمية نسبة استخدام الشبكة والعمل الذي يجب على Service Fabric القيام به. قد تكون عملية التحميل أبطأ (خاصة إذا قمت بتضمين وقت الضغط)، ولكن تسجيل نوع التطبيق وإلغاء تسجيله أسرع.
  • حدد مهلة أكبر لـ Register-ServiceFabricApplicationType باستخدام المعلمة TimeoutSec.
  • حدد مفتاح التبديل Async لـ Register-ServiceFabricApplicationType. يعود الأمر عندما يقبل نظام المجموعة الأمر ويستمر تسجيل نوع التطبيق بشكل غير متزامن. لهذا السبب، ليست هناك حاجة لتحديد مهلة أعلى في هذه الحالة. يسرد الأمر Get-ServiceFabricApplicationType إصدارات نوع التطبيق المسجلة وحالة تسجيلها بنجاح. يمكنك استخدام هذا الأمر لتحديد وقت الانتهاء من التسجيل.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

توزيع حزمة التطبيقات مع العديد من الملفات

المشكلة: انتهت مهلة Register-ServiceFabricApplicationType لحزمة تطبيق باستخدام العديد من الملفات (ترتيب الآلاف) جرّب:

  • ضغط الحزمة قبل النسخ إلى مخزن الصور. يقلل الضغط من عدد الملفات.
  • حدد مهلة أكبر لـ Register-ServiceFabricApplicationType باستخدام المعلمة TimeoutSec.
  • حدد مفتاح التبديل Async لـ Register-ServiceFabricApplicationType. يعود الأمر عندما يقبل نظام المجموعة الأمر ويستمر تسجيل نوع التطبيق بشكل غير متزامن. لهذا السبب، ليست هناك حاجة لتحديد مهلة أعلى في هذه الحالة. يسرد الأمر Get-ServiceFabricApplicationType إصدارات نوع التطبيق المسجلة وحالة تسجيلها بنجاح. يمكنك استخدام هذا الأمر لتحديد وقت الانتهاء من التسجيل.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

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

حزم تطبيق

ترقية تطبيق "تصميم الخدمة"

مقدمة عن صحة Service Fabric

تشخيص خدمة Service Fabric واستكشاف الأخطاء بها وإصلاحها

نمذجة تطبيق في Service Fabric