بيانات تطبيق Service Fabric والخدمة

توضح هذه المقالة كيفية تعريف تطبيقات وخدمات Service Fabric وإصدارها باستخدام ملفات ApplicationManifest.xml وServiceManifest.xml. للحصول على أمثلة أكثر تفصيلاً، راجع أمثلة بيان التطبيق والخدمة. يتم توثيق مخطط XML لملفات بيان التطبيق هذه في وثائق مخطط ServiceFabricServiceModel.xsd.

تحذير

يفرض مخطط ملف XML الخاص ببيان التطبيق الترتيب الصحيح للعناصر التابعة. كحل بديل، افتح "C:\Program Files\Microsoft SDKs\Service Fabric\schemas\ServiceFabricServiceModel.xsd" في Visual Studio أثناء تأليف أو تعديل أي من بيانات تطبيق Service Fabric. سيسمح لك ذلك بالتحقق من ترتيب العناصر التابعة ويوفر حساً ذكياً.

وصف خدمة في ServiceManifest.xml

يحدد بيان تطبيق الخدمة بشكل معلن نوع الخدمة وإصدارها. ويحدد بيانات تعريف الخدمة مثل نوع الخدمة وخصائص الحماية ومقاييس موازنة الحمل وثنائيات الخدمة وملفات التكوين. بعبارة أخرى، فهو يصف التعليمات البرمجية والتكوين وحزم البيانات التي تتكون منها حزمة خدمة لدعم نوع خدمة واحد أو أكثر. يمكن أن يحتوي بيان الخدمة على العديد من التعليمات البرمجية والتكوينات وحزم البيانات، والتي يمكن إصدارها بشكل مستقل. فيما يلي بيان خدمة لخدمة الواجهة الأمامية للويب ASP.NET Core لتطبيق نموذج التصويت (وإليك بعض الأمثلة الأكثر تفصيلا):

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="VotingWebPkg"
                 Version="1.0.0"
                 xmlns="http://schemas.microsoft.com/2011/01/fabric"
                 xmlns:xsd="https://www.w3.org/2001/XMLSchema"
                 xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
  <ServiceTypes>
    <!-- This is the name of your ServiceType. 
         This name must match the string used in RegisterServiceType call in Program.cs. -->
    <StatelessServiceType ServiceTypeName="VotingWebType" />
  </ServiceTypes>

  <!-- Code package is your service executable. -->
  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>VotingWeb.exe</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
      </ExeHost>
    </EntryPoint>
  </CodePackage>

  <!-- Config package is the contents of the Config directory under PackageRoot that contains an 
       independently-updateable and versioned set of custom configuration settings for your service. -->
  <ConfigPackage Name="Config" Version="1.0.0" />

  <Resources>
    <Endpoints>
      <!-- This endpoint is used by the communication listener to obtain the port on which to 
           listen. Please note that if your service is partitioned, this port is shared with 
           replicas of different partitions that are placed in your code. -->
      <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8080" />
    </Endpoints>
  </Resources>
</ServiceManifest>

سمات الإصدار هي سلاسل غير مهيكلة ولا يتم تحليلها بواسطة النظام. تُستخدم سمات الإصدار لإصدار كل مكوّن للترقيات.

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

عادة ما يكون الملف التنفيذي المحدد بواسطة EntryPoint هو مضيف الخدمة الذي يعمل لفترة طويلة. SetupEntryPoint هي نقطة دخول مميزة يتم تشغيلها بنفس بيانات الاعتماد مثل Service Fabric (عادة حساب LocalSystem) قبل أي نقطة إدخال أخرى. يؤدي وجود نقطة إدخال إعداد منفصلة إلى تجنب الاضطرار إلى تشغيل مضيف الخدمة بامتيازات عالية لفترات طويلة من الزمن. يتم تشغيل الملف التنفيذي المحدد بواسطة EntryPoint بعد خروج SetupEntryPoint بنجاح. في حالة إنهاء العملية أو تعطلها، تتم مراقبة العملية الناتجة وإعادة تشغيلها (تبدأ مرة أخرى بـ SetupEntryPoint).

السيناريوهات النموذجية لاستخدام SetupEntryPoint هي عند تشغيل ملف تنفيذي قبل بدء تشغيل الخدمة أو تنفيذ عملية بامتيازات مرتفعة. على سبيل المثال:

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

لمزيد من المعلومات حول كيفية تكوين SetupEntryPoint، راجع تكوين النهج لنقطة إدخال إعداد الخدمة.

يوفر EnvironmentVariables (لم يتم تعيينه في المثال السابق) قائمة بمتغيرات البيئة التي تم تعيينها لحزمة التعليمات البرمجية هذه. يمكن تجاوز متغيرات البيئة في ApplicationManifest.xml لتوفير قيم مختلفة لمثيلات الخدمة المختلفة.

تعلن DataPackage (لم يتم تعيينها في المثال السابق) عن مجلد، تمت تسميته بواسطة السمة Name، يحتوي على بيانات ثابتة عشوائية لتستهلكها العملية في وقت التشغيل.

يعلن ConfigPackage عن مجلد، تمت تسميته بواسطة السمة Name، يحتوي على ملف Settings.xml. يحتوي ملف الإعدادات على أقسام من إعدادات زوج قيمة المفاتيح المعرفة من قِبل المستخدم والتي تقرأها العملية مرة أخرى في وقت التشغيل. أثناء الترقية، إذا تغير إصدار ConfigPackage فقط، فلن تتم إعادة تشغيل العملية قيد التشغيل. بدلاً من ذلك، يُعلم رد الاتصال العملية بأن إعدادات التكوين قد تغيرت حتى يمكن إعادة تحميلها ديناميكياً. فيما يلي مثال على ملف Settings.xml :

<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="MyConfigurationSection">
    <Parameter Name="MySettingA" Value="Example1" />
    <Parameter Name="MySettingB" Value="Example2" />
  </Section>
</Settings>

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

تحذير

حسب التصميم، يجب ألا تتداخل المنافذ الثابتة مع نطاق منفذ التطبيق المُحدد في ClusterManifest. إذا قمت بتحديد منفذ ثابت، فقم بتعيينه خارج نطاق منفذ التطبيق، وإلا فسوف ينتج عنه تعارضات المنافذ. مع الإصدار 6.5CU2، سنصدر تحذير حماية عندما نكتشف مثل هذا التعارض ولكن نسمح باستمرار التوزيع بالتزامن مع سلوك 6.5 المنقول. ومع ذلك، قد نمنع توزيع التطبيق من الإصدارات الرئيسية التالية.

وصف تطبيق في ApplicationManifest.xml

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

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

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="VotingType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="VotingData_MinReplicaSetSize" DefaultValue="3" />
    <Parameter Name="VotingData_PartitionCount" DefaultValue="1" />
    <Parameter Name="VotingData_TargetReplicaSetSize" DefaultValue="3" />
    <Parameter Name="VotingWeb_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <!-- Import the ServiceManifest from the ServicePackage. The ServiceManifestName and ServiceManifestVersion 
       should match the Name and Version attributes of the ServiceManifest element defined in the 
       ServiceManifest.xml file. -->
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="VotingDataPkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="VotingWebPkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
  </ServiceManifestImport>
  <DefaultServices>
    <!-- The section below creates instances of service types, when an instance of this 
         application type is created. You can also create one or more instances of service type using the 
         ServiceFabric PowerShell module.
         
         The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. -->
    <Service Name="VotingData">
      <StatefulService ServiceTypeName="VotingDataType" TargetReplicaSetSize="[VotingData_TargetReplicaSetSize]" MinReplicaSetSize="[VotingData_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[VotingData_PartitionCount]" LowKey="0" HighKey="25" />
      </StatefulService>
    </Service>
    <Service Name="VotingWeb" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="VotingWebType" InstanceCount="[VotingWeb_InstanceCount]">
        <SingletonPartition />
         <PlacementConstraints>(NodeType==NodeType0)</PlacementConstraints
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

مثل بيانات الخدمة، سمات الإصدار هي سلاسل غير منظمة ولا يتم تحليلها بواسطة النظام. تُستخدم سمات الإصدار أيضاً لإصدار كل مكوّن للترقيات.

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

يحتوي ServiceManifestImport على مراجع إلى بيانات الخدمة التي تشكل نوع التطبيق هذا. يمكن أن يحتوي بيان التطبيق على استيرادات متعددة لبيان الخدمة، ويمكن إصدار كل منها بشكل مستقل. تحدد بيانات الخدمة المستوردة أنواع الخدمات الصالحة ضمن نوع التطبيق هذا. ضمن ServiceManifestImport، يمكنك تجاوز قيم التكوين في متغيرات Settings.xml والبيئة في ملفات ServiceManifest.xml. يمكن تعيين النُهج (لم يتم تعيينها في المثال السابق) لربط نقطة النهاية والأمان والوصول ومشاركة الحزم على بيانات الخدمة المستوردة. لمزيد من المعلومات، راجع تكوين نُهج الأمان للتطبيق الخاص بك.

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

تحذير

يتم إهمال الخدمات الافتراضية لصالح StartupServices.xml. يمكنك قراءة StartupServices.xml في تقديم StartupServices.xml في تطبيق Service Fabric.

تعلن الشهادات (لم يتم تعيينها في المثال السابق) عن الشهادات المستخدمة لإعداد نقاط نهاية HTTPS أو تشفير البيانات السرية في بيان التطبيق.

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

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

إشعار

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

تصف الأساسيات (التي لم يتم تعيينها في المثال السابق) أساسيات الأمان (المستخدمون أو المجموعات) المطلوبة لتشغيل الخدمات وتأمين موارد الخدمة. يُشار إلى الأساسيات في أقسام النُهج.

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