التحجيم المستند إلى الهدف

يوفر التحجيم المستند إلى الهدف نموذج تحجيم سريع وبديهي للعملاء وهو مدعوم حاليا لملحقات الربط هذه:

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

رسم توضيحي للمعادلة: المثيلات المطلوبة = طول مصدر الحدث / عمليات التنفيذ الهدف لكل مثيل.

تأتي عمليات التنفيذ الهدف الافتراضية لكل قيم مثيل من SDKs المستخدمة بواسطة ملحقات Azure Functions. لا تحتاج إلى إجراء أي تغييرات للتحجيم المستند إلى الهدف للعمل.

الاعتبارات

تنطبق الاعتبارات التالية عند استخدام التحجيم المستند إلى الهدف:

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

إلغاء الاشتراك

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

إعداد التطبيق القيمة‬
TARGET_BASED_SCALING_ENABLED 0

تخصيص التحجيم المستند إلى الهدف

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

يلخص host.json هذا الجدول القيم المستخدمة لعمليات التنفيذ الهدف لكل قيم مثيل والإعدادات الافتراضية:

ملحق قيم host.json القيمة الافتراضية
مراكز الأحداث (ملحق v5.x+) extensions.eventHubs.maxEventBatchSize 100*
مراكز الأحداث (ملحق v3.x+) extensions.eventHubs.eventProcessorOptions.maxBatchSize 10
مراكز الأحداث (إذا تم تعريفها) extensions.eventHubs.targetUnprocessedEventThreshold غير متوفر
Service Bus (Extension v5.x+, Single Dispatch) extensions.serviceBus.maxConcurrentCalls 16
ناقل خدمة Microsoft Azure (Extension v5.x+، Single Dispatch Sessions Based) extensions.serviceBus.maxConcurrentSessions 8
ناقل خدمة Microsoft Azure (ملحق v5.x+، معالجة الدفعات) extensions.serviceBus.maxMessageBatchSize 1000
Service Bus (Functions v2.x+, Single Dispatch) extensions.serviceBus.messageHandlerOptions.maxConcurrentCalls 16
ناقل خدمة Microsoft Azure (الوظائف v2.x+، يستند إلى جلسات الإرسال الأحادية) extensions.serviceBus.sessionHandlerOptions.maxConcurrentSessions 2000
ناقل خدمة Microsoft Azure (الوظائف v2.x+، معالجة الدفعات) extensions.serviceBus.batchOptions.maxMessageCount 1000
قائمة انتظار التخزين extensions.queues.batchSize 16

* تم تغيير الافتراضي maxEventBatchSize في v6.0.0 من الحزمة Microsoft.Azure.WebJobs.Extensions.EventHubs . في الإصدارات السابقة، كانت هذه القيمة 10.

بالنسبة لبعض ملحقات الربط، يتم تعيين عمليات التنفيذ المستهدفة لكل مثيل باستخدام سمة دالة:

ملحق إعداد مشغل الدالة القيمة الافتراضية
Apache Kafka lagThreshold 1000
Azure Cosmos DB maxItemsPerInvocation 100

لمعرفة المزيد، راجع أمثلة التكوينات للملحقات المدعومة.

خطة متميزة مع تمكين مراقبة مقياس وقت التشغيل

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

اسم الملحق الحد الأدنى للإصدار المطلوب
Apache Kafka 3.9.0
Azure Cosmos DB 4.1.0
مراكز الأحداث 5.2.0
ناقل الخدمة 5.9.0
قائمة انتظار التخزين 5.1.0

دعم التزامن الديناميكي

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

الملحقات المدعومة

تعتمد الطريقة التي تقوم بها بتكوين التحجيم المستند إلى الهدف في ملف host.json على نوع الملحق المحدد. يوفر هذا القسم تفاصيل التكوين للملحقات التي تدعم حاليا التحجيم المستند إلى الهدف.

قوائم انتظار ناقل خدمة Azure والموضوعات

يدعم ملحق ناقل خدمة Microsoft Azure ثلاثة نماذج تنفيذ، يتم تحديدها بواسطة IsBatched سمات و IsSessionsEnabled لمشغل ناقل خدمة Microsoft Azure. القيمة الافتراضية ل IsBatched و IsSessionsEnabled هي false.

نموذج التنفيذ IsBatched IsSessionsEnabled الإعداد المستخدم لعمليات التنفيذ المستهدفة لكل مثيل
معالجة الإرسال الفردي true true الحد الأقصى للمكالمات المتزامنة
معالجة الإرسال الفردي (المستندة إلى الجلسة) true صحيح الحد الأقصى للجلسات المتزامنة
معالجة الدُفعات صحيح true maxMessageBatchSize أو maxMessageCount

إشعار

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

معالجة الإرسال الفردي

في هذا النموذج، يعالج كل استدعاء لدالتك رسالة واحدة. maxConcurrentCalls يتحكم الإعداد في عمليات التنفيذ المستهدفة لكل مثيل. يعتمد الإعداد المحدد على إصدار ملحق ناقل خدمة Microsoft Azure.

host.json تعديل الإعداد maxConcurrentCalls، كما في المثال التالي:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "maxConcurrentCalls": 16
        }
    }
}

معالجة الإرسال الفردي (المستندة إلى الجلسة)

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

host.json تعديل الإعداد maxConcurrentSessions لتعيين عمليات التنفيذ المستهدفة لكل مثيل، كما في المثال التالي:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "maxConcurrentSessions": 8
        }
    }
}

معالجة الدُفعات

في هذا النموذج، يعالج كل استدعاء لدالتك دفعة من الرسائل. يعتمد الإعداد المحدد على إصدار ملحق ناقل خدمة Microsoft Azure.

host.json تعديل الإعداد maxMessageBatchSize لتعيين عمليات التنفيذ المستهدفة لكل مثيل، كما في المثال التالي:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "maxMessageBatchSize": 1000
        }
    }
}

مراكز الأحداث

بالنسبة لمراكز أحداث Azure، تتدرج Azure Functions استنادا إلى عدد الأحداث غير المعالجة الموزعة عبر جميع الأقسام في مركز الأحداث. بشكل افتراضي، host.json السمات المستخدمة لعمليات التنفيذ الهدف لكل مثيل هي maxEventBatchSize و maxBatchSize. ومع ذلك، إذا اخترت ضبط التحجيم المستند إلى الهدف، يمكنك تحديد معلمة targetUnprocessedEventThreshold منفصلة تتجاوز لتعيين عمليات التنفيذ المستهدفة لكل مثيل دون تغيير إعدادات الدفعة. إذا targetUnprocessedEventThreshold تم تعيين، يتم تقسيم إجمالي عدد الأحداث غير المعالجة على هذه القيمة لتحديد عدد المثيلات، والتي يتم تقريبها بعد ذلك إلى عدد مثيلات العامل الذي ينشئ توزيع قسم متوازن.

إشعار

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

يعتمد الإعداد المحدد على إصدار ملحق مراكز الأحداث.

host.json تعديل الإعداد maxEventBatchSize لتعيين عمليات التنفيذ المستهدفة لكل مثيل، كما في المثال التالي:

{
    "version": "2.0",
    "extensions": {
        "eventHubs": {
            "maxEventBatchSize" : 100
        }
    }
}

عند تعريفها في host.json، targetUnprocessedEventThreshold يتم استخدامها كعملية تنفيذ هدف لكل مثيل بدلا من maxEventBatchSize، كما هو الحال في المثال التالي:

{
    "version": "2.0",
    "extensions": {
        "eventHubs": {
            "targetUnprocessedEventThreshold": 153
        }
    }
}

Storage Queues

بالنسبة إلى v2.x+ من ملحق التخزين، قم بتعديل host.json الإعداد batchSize لتعيين عمليات التنفيذ المستهدفة لكل مثيل:

{
    "version": "2.0",
    "extensions": {
        "queues": {
            "batchSize": 16
        }
    }
}

إشعار

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

Azure Cosmos DB

يستخدم Azure Cosmos DB سمة على مستوى الوظيفة، MaxItemsPerInvocation. تعتمد طريقة تعيين هذه السمة على مستوى الدالة على لغة الدالة.

بالنسبة لدالة C# المترجمة، قم بتعيين MaxItemsPerInvocation في تعريف المشغل الخاص بك، كما هو موضح في الأمثلة التالية لدالة C# قيد المعالجة:

namespace CosmosDBSamplesV2
{
    public static class CosmosTrigger
    {
        [FunctionName("CosmosTrigger")]
        public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            MaxItemsPerInvocation: 100,
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
            ILogger log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.LogInformation($"Documents modified: {documents.Count}");
                log.LogInformation($"First document Id: {documents[0].Id}");
            }
        }
    }
}

إشعار

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

Apache Kafka

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

تعتمد طريقة تعيين هذه السمة على مستوى الدالة على لغة الدالة. يعين هذا المثال الحد إلى 100.

بالنسبة لدالة C# المترجمة، قم بتعيينها LagThreshold في تعريف المشغل الخاص بك، كما هو موضح في الأمثلة التالية لدالة C# قيد المعالجة لمشغل Kafka Event Hubs:

[FunctionName("KafkaTrigger")]
public static void Run(
    [KafkaTrigger("BrokerList",
                  "topic",
                  Username = "$ConnectionString",
                  Password = "%EventHubConnectionString%",
                  Protocol = BrokerProtocol.SaslSsl,
                  AuthenticationMode = BrokerAuthenticationMode.Plain,
                  ConsumerGroup = "$Default",
                  LagThreshold = 100)] KafkaEventData<string> kevent, ILogger log)
{            
    log.LogInformation($"C# Kafka trigger function processed a message: {kevent.Value}");
}

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

لمعرفة المزيد، راجع المقالات التالية: