ما هو نموذج الخدمة السحابية (الكلاسيكية)، وكيف يمكنني حزمه؟

هام

تم الآن إهمال Cloud Services (كلاسيكي) للعملاء الجدد وسيتم استبعادها في 31 أغسطس 2024 لجميع العملاء. ينبغي أن تستخدم عمليات النشر الجديدة نموذج النشر الجديد القائم على Azure Resource Manager ‏‏Azure Cloud Services (الدعم الموسع) .

يتم إنشاء الخدمة السحابية من ثلاثة مكونات: تعريف الخدمة ⁧⁩ (. csdef) ⁧⁩، تكوين الخدمة ⁧⁩ (. cscfg) ⁧⁩، وحزمة الخدمة ⁧⁩ (. cspkg)⁧⁩. يعتمد كل من ملفي ⁧⁩ ServiceDefinition.csdef ⁧⁩ و ⁧⁩ ServiceConfig.cscfg ⁧⁩ على XML، ويصفان بنية الخدمة السحابية، وكيفية تهيئتها بشكل جماعي يسمى النموذج. ⁧⁩ ServicePackage.cspkg ⁧⁩ هو ملف مضغوط تم إنشاؤه من ⁧⁩ ServiceDefinition.csdef ⁧⁩، ويحتوي من بين أشياء أخرى على جميع التبعيات الثنائية المطلوبة. يقوم Azure بإنشاء خدمة سحابية من كل من ⁧⁩ ServicePackage.cspkg ⁧⁩، و ⁧⁩ ServiceConfig.cscfg ⁧⁩.

بمجرد تشغيل الخدمة السحابية في Azure، يمكنك إعادة تكوينها من خلال ملف ⁧⁩ ServiceConfig.cscfg ⁧⁩؛ ولكن لا يمكنك تغيير التعريف.

ماذا تريد أن تعرف المزيد عنه؟

ServiceDefinition.csdef

يحدد ملف ⁧⁩ ServiceDefinition.csdef ⁧⁩ الإعدادات التي يستخدمها Azure لتكوين خدمة السحابة. يوفر ⁧⁩ مخطط تعريف خدمة Azure (ملف.csdef) ⁧⁩ التنسيق المسموح به لملف تعريف الخدمة. يوضح المثال التالي الإعدادات التي يمكن تحديدها لأدوار الويب والعامل:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRole1" vmsize="Medium">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="HttpIn" endpointName="HttpIn" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
      <InternalEndpoint name="InternalHttpIn" protocol="http" />
    </Endpoints>
    <Certificates>
      <Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" />
    </Certificates>
    <Imports>
      <Import moduleName="Connect" />
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <LocalResources>
      <LocalStorage name="localStoreOne" sizeInMB="10" />
      <LocalStorage name="localStoreTwo" sizeInMB="10" cleanOnRoleRecycle="false" />
    </LocalResources>
    <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" />
    </Startup>
  </WebRole>

  <WorkerRole name="WorkerRole1">
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
    </ConfigurationSettings>
    <Imports>
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="tcp" port="10000" />
      <InternalEndpoint name="Endpoint2" protocol="tcp" />
    </Endpoints>
  </WorkerRole>
</ServiceDefinition>

يمكنك الرجوع إلى ⁧⁩ مخطط تعريف الخدمة ⁧⁩؛ للحصول على فهم أفضل لمخطط XML المستخدم هنا، ومع ذلك، فيما يلي شرح سريع لبعض العناصر:

المواقع
يحتوي على تعريفات لمواقع الويب أو تطبيقات الويب التي تتم استضافتها في IIS7.

⁩InputEndpoints⁧
يحتوي على تعريفات لنقاط النهاية المستخدمة للاتصال بالخدمة السحابية.

⁩InternalEndpoints⁧
يحتوي على تعريفات لنقاط النهاية التي تستخدمها مثيلات الدور للتواصل مع بعضها البعض.

⁩ ⁩ConfigurationSettings⁦ ⁧
يحتوي على تعريفات الإعداد لميزات دور معين.

⁩الشهادات⁧
يحتوي على تعريفات الشهادات المطلوبة لدور ما. يُظهر مثال الرمز السابق شهادة تُستخدم لتكوين اتصال Azure.

⁩LocalResources⁧
يحتوي على تعريفات موارد التخزين المحلية. مورد التخزين المحلي هو دليل محجوز في نظام الملفات الخاص بالجهاز الظاهري حيث يتم تشغيل مثيل للدور.

الاستيراد
يحتوي على تعريفات للوحدات النمطية المستوردة. يُظهر مثال الكود السابق الوحدات النمطية لاتصال سطح المكتب البعيد واتصال Azure.

الشركات الناشئة
يحتوي على المهام التي يتم تشغيلها عند بدء الدور. يتم تحديد المهام في ملف .cmd، أو قابل للتنفيذ.

ServiceConfiguration.cscfg

يتم تحديد تكوين إعدادات الخدمة السحابية الخاصة بك من خلال القيم الموجودة في ملف ⁧⁩ ServiceConfiguration.cscfg ⁧⁩. أنت تحدد عدد المثيلات التي تريد نشرها لكل دور في هذا الملف. تتم إضافة قيم إعدادات التكوين التي حددتها في ملف تعريف الخدمة إلى ملف تكوين الخدمة. تتم أيضًا إضافة بصمات الأصابع لأي شهادات إدارة مرتبطة بالخدمة السحابية إلى الملف. يوفر ⁧⁩ مخطط تكوين خدمة Azure (ملف.cscfg) ⁧⁩ التنسيق المسموح به لملف تكوين الخدمة.

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

<?xml version="1.0"?>
<ServiceConfiguration serviceName="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
  <Role name="WebRole1">
    <Instances count="2" />
    <ConfigurationSettings>
      <Setting name="SettingName" value="SettingValue" />
    </ConfigurationSettings>

    <Certificates>
      <Certificate name="CertificateName" thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
      <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption"
         thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
    </Certificates>
  </Role>
</ServiceConfiguration>

يمكنك الرجوع إلى ⁧⁩ مخطط تكوين الخدمة ⁧⁩ لفهم مخطط XML المستخدم هنا بشكل أفضل، ومع ذلك، فيما يلي شرح سريع للعناصر:

⁩ مثيلات ⁧
يكون عدد مثيلات التشغيل للدور. لمنع احتمال عدم توفر الخدمة السحابية أثناء الترقيات، يوصى بنشر أكثر من مثيل واحد من الأدوار التي تواجه الويب. من خلال نشر أكثر من مثيل واحد، فإنك تلتزم بالإرشادات الواردة في ⁧⁩ اتفاقية مستوى خدمة حساب Azure (SLA) ⁧⁩، والتي تضمن اتصالاً خارجيًا بنسبة 99.95٪ للأدوار المواجهة للإنترنت عند نشر اثنين أو أكثر من مثيلات الأدوار لـ خدمة.

⁩ ⁩ConfigurationSettings⁦ ⁧
يعمل على تكوين الإعدادات الخاصة بالمثيلات قيد التشغيل لدور ما. يجب أن يتطابق اسم عناصر ⁧<Setting>⁩ مع تعريفات الإعداد في ملف تعريف الخدمة.

⁩الشهادات⁧
تكوين الشهادات التي تستخدمها الخدمة. يوضح مثال الكود السابق كيفية تعريف الشهادة لوحدة RemoteAccess. يجب تعيين قيمة سمة ⁧⁩ بصمة الإبهام ⁧⁩ على بصمة الشهادة المراد استخدامها.

ملاحظة

يمكن إضافة بصمة الإبهام للشهادة إلى ملف التكوين باستخدام محرر نص. أو يمكن إضافة القيمة في علامة التبويب ⁧⁩ الشهادات ⁧⁩ في صفحة ⁧⁩ الخصائص ⁧⁩ للدور في Visual Studio.

تحديد المنافذ لمثيلات الدور

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

يوضح النموذج التالي التكوين لدور ويب مع موقع ويب، وتطبيق ويب. تم تكوين موقع الويب كموقع الإدخال الافتراضي على المنفذ 80، وتم تكوين تطبيقات الويب لتلقي الطلبات من رأس مضيف بديل يسمى "mail.mysite.cloudapp.net".

<WebRole>
  <ConfigurationSettings>
    <Setting name="DiagnosticsConnectionString" />
  </ConfigurationSettings>
  <Endpoints>
    <InputEndpoint name="HttpIn" protocol="http" port="80" />
    <InputEndpoint name="Https" protocol="https" port="443" certificate="SSL"/>
    <InputEndpoint name="NetTcp" protocol="tcp" port="808" certificate="SSL"/>
  </Endpoints>
  <LocalResources>
    <LocalStorage name="Sites" cleanOnRoleRecycle="true" sizeInMB="100" />
  </LocalResources>
  <Site name="Mysite" packageDir="Sites\Mysite">
    <Bindings>
      <Binding name="http" endpointName="HttpIn" />
      <Binding name="https" endpointName="Https" />
      <Binding name="tcp" endpointName="NetTcp" />
    </Bindings>
  </Site>
  <Site name="MailSite" packageDir="MailSite">
    <Bindings>
      <Binding name="mail" endpointName="HttpIn" hostHeader="mail.mysite.cloudapp.net" />
    </Bindings>
    <VirtualDirectory name="artifacts" />
    <VirtualApplication name="storageproxy">
      <VirtualDirectory name="packages" packageDir="Sites\storageProxy\packages"/>
    </VirtualApplication>
  </Site>
</WebRole>

تغيير تكوين الدور

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

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

معالجة تغييرات التكوين مع أحداث وقت تشغيل الخدمة

تتضمن ⁧⁩ مكتبة Azure Runtime ⁧⁩ مساحة الاسم ⁧⁩ Microsoft.WindowsAzure.ServiceRuntime ⁧⁩، والتي توفر فئات للتفاعل مع بيئة Azure من دور. تحدد فئة ⁧⁩ RoleEnvironment ⁧⁩ الأحداث التالية التي تنشأ قبل تغيير التكوين وبعده:

  • ⁩ ⁧⁩ تغيير ⁧⁩ الحدث ⁧
    يحدث هذا قبل تطبيق تغيير التكوين على مثيل محدد للدور مما يمنحك فرصة لإزالة حالات الدور إذا لزم الأمر.
  • ⁩ حدث ⁧⁩ تم تغييره ⁧⁩ ⁧
    يحدث بعد تطبيق تغيير التكوين على مثيل محدد للدور.

ملاحظة

نظرًا لأن تغييرات الشهادة تأخذ دائمًا مثيلات الدور دون اتصال، فإنها لا ترفع الأحداث RoleEnvironment.Changing، أو RoleEnvironment.Changed.

ServicePackage.cspkg

ملاحظة

الحد الأقصى لحجم الحزمة التي يمكن نشرها هو 600 ميغا بايت

لنشر تطبيق كخدمة سحابية في Azure، يجب عليك أولاً حزم التطبيق بالتنسيق المناسب. يمكنك استخدام أداة سطر الأوامر ⁧⁩ CSPack ⁧⁩ (المثبتة مع ⁧⁩ Azure SDK ⁧⁩) لإنشاء ملف الحزمة كبديل لبرنامج Visual Studio.

يستخدم ⁧⁩ CSPack ⁧⁩ محتويات ملف تعريف الخدمة، وملف تكوين الخدمة لتحديد محتويات الحزمة. ينشئ ⁧⁩ CSPack ⁧⁩ ملف حزمة تطبيق (.cspkg) يمكنك تحميله إلى Azure باستخدام ⁧⁩ مدخل Azure ⁧⁩. بشكل افتراضي، يتم تسمية ⁧[ServiceDefinitionFileName].cspkg⁩ الحزمة؛ ولكن يمكنك تحديد اسم مختلف باستخدام ⁧/out⁩ خيار ⁧⁩CSPack⁧⁩.

يقع ⁧⁩ CSPack ⁧⁩ في
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\

ملاحظة

يتوفر CSPack.exe (في Windows) عن طريق تشغيل اختصار ⁧⁩ Microsoft Azure Command Prompt ⁧⁩ المثبت مع SDK.

قم بتشغيل برنامج CSPack.exe بمفرده للاطلاع على الوثائق المتعلقة بجميع المفاتيح، والأوامر الممكنة.

تلميح

قم بتشغيل الخدمة السحابية محليًا في ⁧⁩ Microsoft Azure Compute Emulator ⁧⁩، واستخدم الخيار ⁧⁩ / copyonly ⁧⁩. ينسخ هذا الخيار الملفات الثنائية للتطبيق إلى تخطيط دليل يمكن من خلاله تشغيلها في محاكي الحساب.

مثال أمر لحزم خدمة سحابية

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

cspack [DirectoryName]\[ServiceDefinition]
       /role:[RoleName];[RoleBinariesDirectory]
       /sites:[RoleName];[VirtualPath];[PhysicalPath]
       /out:[OutputFileName]

إذا كان التطبيق يحتوي على دور ويب ودور عامل، فسيتم استخدام الأمر التالي:

cspack [DirectoryName]\[ServiceDefinition]
       /out:[OutputFileName]
       /role:[RoleName];[RoleBinariesDirectory]
       /sites:[RoleName];[VirtualPath];[PhysicalPath]
       /role:[RoleName];[RoleBinariesDirectory];[RoleAssemblyName]

حيث يتم تعريف المتغيرات على النحو التالي:

المتغير القيمة
[اسم الدليل] الدليل الفرعي ضمن دليل المشروع الجذر الذي يحتوي على ملف .csdef الخاص بمشروع Azure.
[ServiceDefinition] اسم ملف تعريف الخدمة. بشكل افتراضي، يسمى هذا الملف ServiceDefinition.csdef.
[OutputFileName] اسم ملف الحزمة الذي تم إنشاؤه. عادة، يتم تعيين هذا على اسم التطبيق. إذا لم يتم تحديد اسم ملف، فسيتم إنشاء حزمة التطبيق بالشكل [ApplicationName].cspkg.
[RoleName] اسم الدور كما هو محدد في ملف تعريف الخدمة.
[RoleBinariesDirectory] موقع الملفات الثنائية للدور.
[VirtualPath] الدلائل المادية لكل مسار افتراضي محدد في قسم المواقع من تعريف الخدمة.
[PhysicalPath] الدلائل المادية لمحتويات كل مسار افتراضي محدد في عقدة الموقع لتعريف الخدمة.
[RoleAssemblyName] اسم الملف الثنائي للدور.

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

أنا أقوم بإنشاء حزمة خدمة سحابية وأريد...

أنا أستخدم Visual Studio وأريد...