تخطيط السعة وتوسيع نطاقها لتصميم خدمة Azure

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

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

التكلس التلقائي

يجب عليك إجراء عمليات التحجيم عبر قوالب Azure Resource Manager، لأنه من أفضل الممارسات التعامل مع تكوينات الموارد كتعليمات برمجية.

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

  • لا يدعم توزيع قوالب Resource Manager الخاصة بك مع السعة المناسبة المعلنة حالة الاستخدام الخاصة بك.

    بالإضافة إلى التحجيم اليدوي، يمكنك تكوين خط أنابيب تكامل وتسليم مستمرين في Azure DevOps Services باستخدام مشاريع توزيع مجموعة موارد Azure. يُشغل خط الأنابيب هذا عادة بواسطة تطبيق منطقي يستخدم مقاييس أداء الجهاز الظاهري التي تم الاستعلام عنها من واجهة برمجة تطبيقات Azure Monitor REST. يقوم خط الأنابيب تلقائيًّا بالتحجيم التلقائي بشكل فعال استنادًا إلى أي مقاييس تريدها، مع تحسين قوالب Resource Manager.

  • تحتاج إلى توسيع نطاق عقدة مجموعة تحجيم جهاز ظاهري واحدة فقط أفقيًّا في كل مرة.

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

  • لديك موثوقية فضية أو أعلى لمجموعة تصميم الخدمة الخاصة بك، وقدرة فضية على الصمود أو أعلى على أي تحجيم حيث تقوم بتكوين قواعد التحجيم التلقائي.

    يجب أن يكون الحد الأدنى لسعة قواعد التحجيم التلقائي مساويًا لخمسة مثيلات للجهاز الظاهري أو أكبر منها. كما يجب أن يكون مساويًا أو أكبر من الحد الأدنى لطبقة الموثوقية لنوع العقدة الأساسية.

ملاحظة

تصميم الخدمة المزود بحالة تصميم الخدمة:/System/InfastructureService/<NODE_TYPE_NAME> يعمل على كل نوع عقدة له قدرة فضية علي الصمود أو أعلى. وهي خدمة النظام الوحيدة التي يتم دعمها للتشغيل في Azure على أي نوع من أنواع عقد المجموعات.

هام

يدعم التحجيم التلقائي لتصميم الخدمة Default و NewestVM مجموعة تحجيم الأجهزة الظاهرية تضييق نطاق التكوينات.

اعتبارات التحجيم الرأسي

يتطلب التحجيم الرأسي لنوع عقدة في تصميم خدمة Azure عددًا من الخطوات والاعتبارات. على سبيل المثال:

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

ملاحظة

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

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

تستخدم مجموعتك خصائص عقدة تصميم الخدمة وقيود الموضع لتحديد مكان استضافة خدمات التطبيق الخاص بك. عند تحجيم نوع عقدة أساسية عموديًّا، ستقوم بتوزيع نوع عقدة أساسية ثانية ثم تعيين ("isPrimary": false) على نوع العقدة الأساسية الأصلية والمتابعة لتعطيل العقد الخاصة بها وإزالة مجموعة التحجيم الخاصة بها والموارد المرتبطة بها. لمزيد من التفاصيل، راجع توسيع نطاق نوع العقدة الأساسية لمجموعة تصميم الخدمة

ملاحظة

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

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

  1. من PowerShell، قم بالتشغيلDisable-ServiceFabricNode عن عمد RemoveNode لتعطيل العقدة التي ستقوم بإزالتها. أزل نوع العقدة التي تحتوي على أعلى رقم. على سبيل المثال، إذا كان لديك مجموعة من ست عقد، أزل مثيل الجهاز الظاهري «MyNodeType_5».
  2. شغّل Get-ServiceFabricNode للتأكد من أن العقدة قد انتقلت إلى معطل. إذا لم يكن الأمر كذلك، فانتظر حتى يتم تعطيل العقدة. وقد يستغرق هذا بضع ساعات لكل عقدة. لا تتابع في العملية حتى تنتقل العقدة إلى معطلة.
  3. قلل عدد الأجهزة الظاهرية بمقدار واحد في نوع العقدة هذا. ستتم الآن إزالة أعلى مثيل جهاز ظاهري.
  4. كرر الخطوات من 1 إلى 3 حسب الحاجة، ولكن لا تقم أبدًا بتحجيم عدد المثيلات في أنواع العقد الأساسية أقل مما تتطلبه طبقة الموثوقية. راجع تخطيط سعة مجموعة تصميم الخدمة للحصول على قائمة بالمثيلات الموصى بها.
  5. بمجرد اختفاء جميع الأجهزة الظاهرية (ممثلة باسم «أسفل»)، سيعرض التصميم:/النظام/خدمة البنية الأساسية/[اسم العقدة] حالة خطأ. بعدها يمكنك تحديث مورد نظام المجموعة لإزالة نوع العقدة. بإمكانك إما استخدام نشر قالب ARM أو تحرير مورد الكتلة من خلال Azure Resource Manager. سيؤدي ذلك إلى بدء ترقية نظام المجموعة الذي سيؤدي إلى إزالة تصميم الخدمة:/النظام/خدمة البنية الأساسية/[نوع العقدة] الموجودة في حالة خطأ.
  6. بعد ذلك، يمكنك اختياريًّا حذف VMScaleSet، وستظل ترى العقد كـ «أسفل» من طريقة عرض Service Fabric Explorer على الرغم من ذلك. ستكون الخطوة الأخيرة هي تنظيفها بالأمر Remove-ServiceFabricNodeState.

تحجيم أفقي

يمكنك إجراء التحجيم الأفقي إما يدويًّا أو برمجيًّا.

ملاحظة

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

معنى التحجيم

قم بتوسيع نطاق مجموعة تصميم الخدمة عن طريق زيادة عدد المثيلات لمجموعة تحجيم جهاز ظاهري معينة. يمكنك التوسع برمجيًّا باستخدام AzureClient وتعيين معرف التحجيم المطلوب لزيادة السعة.

var scaleSet = AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId);
var newCapacity = (int)Math.Min(MaximumNodeCount, scaleSet.Capacity + 1);
scaleSet.Update().WithCapacity(newCapacity).Apply(); 

لتوسيع نطاقها يدويًّا، قم بتحديث السعة في خاصية SKU لمورد مجموعة تحجيم الجهاز الظاهري المطلوب.

"sku": {
    "name": "[parameters('vmNodeType0Size')]",
    "capacity": "[parameters('nt0InstanceCount')]",
    "tier": "Standard"
}

تقليص النطاق

يتطلب التقليص مزيدًا من الاهتمام أكثر من التوسع. على سبيل المثال:

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

لتوسيع النطاق يدويًّا، اتبع الخطوات التالية:

  1. من PowerShell، قم بالتشغيلDisable-ServiceFabricNode عن عمد RemoveNode لتعطيل العقدة التي ستقوم بإزالتها. أزل نوع العقدة التي تحتوي على أعلى رقم. على سبيل المثال، إذا كان لديك مجموعة من ست عقد، أزل مثيل الجهاز الظاهري «MyNodeType_5».
  2. شغّل Get-ServiceFabricNode للتأكد من أن العقدة قد انتقلت إلى معطل. إذا لم يكن الأمر كذلك، فانتظر حتى يتم تعطيل العقدة. وقد يستغرق هذا بضع ساعات لكل عقدة. لا تتابع في العملية حتى تنتقل العقدة إلى معطلة.
  3. قلل عدد الأجهزة الظاهرية بمقدار واحد في نوع العقدة هذا. ستتم الآن إزالة أعلى مثيل جهاز ظاهري.
  4. كرر الخطوات من 1 إلى 3 حسب الحاجة حتى تقوم بتوفير السعة التي تريدها. لا تقم بقياس عدد المثيلات في أنواع العقد الأساسية إلى أقل مما تضمنه طبقة الموثوقية. راجع تخطيط سعة مجموعة تصميم الخدمة للحصول على قائمة بالمثيلات الموصى بها.

للتحجيم يدويًّا، قم بتحديث السعة في خاصية SKU لمورد مجموعة تحجيم الجهاز الظاهري المطلوب.

"sku": {
    "name": "[parameters('vmNodeType0Size')]",
    "capacity": "[parameters('nt0InstanceCount')]",
    "tier": "Standard"
}

يجب إعداد العقدة لإيقاف التشغيل لتقليص نطاقها برمجيًّا. ابحث عن العقدة المراد إزالتها (العقدة الأعلى مثيلًا). على سبيل المثال:

using (var client = new FabricClient())
{
    var mostRecentLiveNode = (await client.QueryManager.GetNodeListAsync())
        .Where(n => n.NodeType.Equals(NodeTypeToScale, StringComparison.OrdinalIgnoreCase))
        .Where(n => n.NodeStatus == System.Fabric.Query.NodeStatus.Up)
        .OrderByDescending(n =>
        {
            var instanceIdIndex = n.NodeName.LastIndexOf("_");
            var instanceIdString = n.NodeName.Substring(instanceIdIndex + 1);
            return int.Parse(instanceIdString);
        })
        .FirstOrDefault();

قم بإلغاء تنشيط العقدة وإزالتها باستخدام نفس FabricClient المثيل (clientفي هذه الحالة) ومثيل العقدة (instanceIdStringفي هذه الحالة) الذي استخدمته في التعليمة البرمجية السابقة:

var scaleSet = AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId);

// Remove the node from the Service Fabric cluster
ServiceEventSource.Current.ServiceMessage(Context, $"Disabling node {mostRecentLiveNode.NodeName}");
await client.ClusterManager.DeactivateNodeAsync(mostRecentLiveNode.NodeName, NodeDeactivationIntent.RemoveNode);

// Wait (up to a timeout) for the node to gracefully shut down
var timeout = TimeSpan.FromMinutes(5);
var waitStart = DateTime.Now;
while ((mostRecentLiveNode.NodeStatus == System.Fabric.Query.NodeStatus.Up || mostRecentLiveNode.NodeStatus == System.Fabric.Query.NodeStatus.Disabling) &&
        DateTime.Now - waitStart < timeout)
{
    mostRecentLiveNode = (await client.QueryManager.GetNodeListAsync()).FirstOrDefault(n => n.NodeName == mostRecentLiveNode.NodeName);
    await Task.Delay(10 * 1000);
}

// Decrement virtual machine scale set capacity
var newCapacity = (int)Math.Max(MinimumNodeCount, scaleSet.Capacity - 1); // Check min count 

scaleSet.Update().WithCapacity(newCapacity).Apply();

ملاحظة

عند التحجيم في مجموعة، سترى مثيل العقدة/ الجهاز الظاهري الذي تمت إزالته معروضًا في حالة غير صحية في Service Fabric Explorer. للحصول على شرح لهذا السلوك، راجع السلوكيات التي قد تلاحظها في «مستكشف تصميم الخدمة». يمكنك:

مستويات الموثوقية

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

سيحدد مستوى الموثوقية الحد الأدنى لعدد العقد التي يجب أن يمتلكها نوع العقدة الأساسية. يمكن أن تأخذ طبقة الموثوقية القيم التالية:

  • البلاتينيوم: يشغّل خدمات النظام مع عدد مجموعة النسخ المتماثلة المستهدفة المكونة من سبع وتسع عقد بذور.
  • الذهب: يشغّل خدمات النظام مع عدد مجموعة النسخ المتماثلة المستهدفة من سبع وسبع عقد بذور.
  • الفضة: يشغّل خدمات النظام مع عدد مجموعة النسخ المتماثلة المستهدفة من خمس وخمس عقد بذور.
  • البرونز: يشغّل خدمات النظام مع عدد مجموعة النسخ المتماثلة المستهدفة من ثلاث وثلاث عقد بذور.

الحد الأدنى الموصى به لمستوى الموثوقية هو الفضي.

يتم تعيين مستوى الوثوقية في قسم الخصائص من مورد Microsoft.ServiceFabric/clusters، علي النحو التالي:

"properties":{
    "reliabilityLevel": "Silver"
}

مستويات القدرة على الصمود

تحذير

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

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

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

"extensionProfile": {
    "extensions":          {
        "name": "[concat('ServiceFabricNodeVmExt','_vmNodeType0Name')]",
        "properties": {
            "settings": {
                "durabilityLevel": "Bronze"
            }
        }
    }
}

المورد الآخر موجود ضمن nodeTypesمورد Microsoft.ServiceFabric/clusters:

"nodeTypes": [
    {
        "name": "[variables('vmNodeType0Name')]",
        "durabilityLevel": "Bronze"
    }
]

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