مقياس مجموعة نسيج الخدمة برمجيًا

يتم إنشاء مجموعات Service Fabric التي تعمل في Azure فوق مجموعات مقياس الجهاز الظاهري. يصف قياس الكتلة كيفية تحجيم مجموعات Service Fabric إما يدويًا أو باستخدام قواعد القياس التلقائي. توضح هذه المقالة كيفية إدارة بيانات الاعتماد وتوسيع نطاق مجموعة داخل أو خارج باستخدام Azure compute SDK بطلاقة، وهو سيناريو أكثر تقدمًا. للحصول على نظرة عامة، اقرأ الأساليب البرمجية لتنسيق عمليات قياس Azure.

ملاحظة

نوصي باستخدام وحدة Azure Az PowerShell للتفاعل مع Azure. راجع تثبيت Azure PowerShell للبدء. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

إدارة بيانات الاعتماد

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

يمكن إنشاء مدير خدمة من خلال الخطوات التالية:

  1. تسجيل الدخول إلى Azure CLI (az login) كمستخدم لديه حق الوصول إلى مجموعة مقياس الجهاز الظاهري
  2. إنشاء كيان الخدمة بـaz ad sp create-for-rbac
    1. دون appId (يسمى "معرف العميل" في مكان آخر) والاسم وكلمة المرور والمستأجر للاستخدام لاحقًا.
    2. ستحتاج أيضًا إلى معرف الاشتراك الخاص بك، والذي يمكن عرضه باستخدام az account list

يمكن لمكتبة الحوسبة بطلاقة تسجيل الدخول باستخدام بيانات الاعتماد هذه على النحو التالي (لاحظ أن أنواع Azure الأساسية مثل IAzure موجودة في حزمة Microsoft.Azure.Management.Fluent):

var credentials = new AzureCredentials(new ServicePrincipalLoginInformation {
                ClientId = AzureClientId,
                ClientSecret = 
                AzureClientKey }, AzureTenantId, AzureEnvironment.AzureGlobalCloud);
IAzure AzureClient = Azure.Authenticate(credentials).WithSubscription(AzureSubscriptionId);

if (AzureClient?.SubscriptionId == AzureSubscriptionId)
{
    ServiceEventSource.Current.ServiceMessage(Context, "Successfully logged into Azure");
}
else
{
    ServiceEventSource.Current.ServiceMessage(Context, "ERROR: Failed to login to Azure");
}

بمجرد تسجيل الدخول، يمكن الاستعلام عن عدد مثيلات مجموعة المقياس عبر AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId).Capacity.

معنى التحجيم

باستخدام Azure compute SDK السلسة، يمكن إضافة مثيلات إلى مجموعة مقياس الجهاز الظاهري مع عدد قليل من المكالمات -

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

بدلًا من ذلك، يمكن أيضًا إدارة حجم مجموعة مقياس الجهاز الظاهري باستخدام cmdlets PowerShell. يمكن لـGet-AzVmss استرداد كائن مجموعة مقياس الجهاز الظاهري. تتوفر السعة الحالية من خلال الخاصية .sku.capacity. بعد تغيير السعة إلى القيمة المطلوبة، يمكن تحديث مقياس الجهاز الظاهري المعين في Azure باستخدام الأمر Update-AzVmss.

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

تقليص النطاق

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

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

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 والمثيل IAzure من وقت سابق.

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 shutdown
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 VMSS capacity
var newCapacity = (int)Math.Max(MinimumNodeCount, scaleSet.Capacity - 1); // Check min count 

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

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

await client.ClusterManager.RemoveNodeStateAsync(mostRecentLiveNode.NodeName);

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

للبدء في تنفيذ منطق القياس التلقائي الخاص بك، تعرف على المفاهيم التالية وواجهات برمجة التطبيقات المفيدة: