إعداد MinExecutionEnvironments و MaxExecutionEnvironments على 0/0 في مثيلات AWS Lambda المدارة لا يعني بدء التشغيل من الصفر، بل يؤدي إلى إلغاء تنشيط الدالة بالكامل وفشل فوري للاستدعاءات.
يا جماعة مطوري الويب والتقنيين، إذا كنت تستخدم أو تخطط لاستخدام «مثيلات AWS Lambda المدارة» (LMI)، فهناك أمر مهم جداً بخصوص إعدادات التحجيم يجب أن تعرفه: إعداد MinExecutionEnvironments و MaxExecutionEnvironments على 0/0 لا يعني «ابدأ من الصفر عند الطلب»، بل يعني «أوقف تشغيل دالة Lambda نهائياً». هذا يختلف تماماً عن سلوك Lambda العادي، وعدم معرفة ذلك سيؤدي إلى فشل فوري ومحبط لدوالك.
ما هي مثيلات Lambda المدارة؟ ببساطة، هي تتيح لك تشغيل دوال Lambda الخاصة بك على سعة حوسبة من نوع EC2 أنت تتحكم بها، مع الحفاظ على سهولة نموذج برمجة Lambda. الكثير من الحديث مؤخراً كان عن إزالة سقف الذاكرة، وعن نموذج التسعير الجديد المرتبط بـ EC2 والذي يسمح لك باستخدام خطط التوفير (Savings Plans) والمثيلات المحجوزة (Reserved Instances). لكن القليل جداً من التغطية ركز على إعدادات التحجيم، وخاصة ماذا يحدث عندما تعيّن الحد الأدنى MinExecutionEnvironments والحد الأقصى MaxExecutionEnvironments على الصفر.
الافتراض الشائع الذي يحمله معظم المهندسين من استخدام Lambda القياسي هو أن الحد الأدنى صفر يعني «لا توجد سعة جاهزة، ابدأ عند الطلب التالي». ولكن في LMI، هذا الافتراض خاطئ تماماً. عندما يتم ضبط كل من الحد الأدنى والأقصى لبيئات التنفيذ على الصفر، فإن Lambda لا تقوم فقط بتعطيل الدالة مؤقتاً أو إيقافها لتنتظر الاستدعاء التالي. بدلاً من ذلك، يتم إلغاء تنشيط إصدار الدالة بالكامل. هذا يعني أن كل مثيل EC2 يدعم هذا الإصدار يتم إنهاؤه فعلياً، وتستمر تكلفة المثيل حتى اكتمال الإنهاء.
عندما يتم إلغاء تنشيط إصدار الدالة، فإن حالتها تتغير إلى «معطلة». أي استدعاء يتم توجيهه إلى هذا الإصدار المعطل سيعود بخطأ صريح وفوري. لا يوجد بدء تشغيل بطيء (cold start)، ولا يوجد انتظار في قائمة انتظار، ولا توجد محاولة إعادة. إنه فشل مباشر. الأهم من ذلك، أن إعادة التنشيط ليست تلقائية أبداً. يجب عليك يدوياً تطبيق إعداد تحجيم جديد بقيم غير صفرية، سواء من خلال لوحة التحكم، أو واجهة PutFunctionScalingConfig API، أو إجراء مجدول. هذا هو عكس ما يحدث عندما تقوم بتعيين ReservedConcurrentExecutions=0 في Lambda القياسية، حيث يتم منع الاستدعاءات الجديدة لكن الدالة تظل نشطة. لذا، انتبهوا جيداً لهذه التفاصيل عند العمل مع مثيلات Lambda المدارة!
ما هي مثيلات Lambda المدارة؟ ببساطة، هي تتيح لك تشغيل دوال Lambda الخاصة بك على سعة حوسبة من نوع EC2 أنت تتحكم بها، مع الحفاظ على سهولة نموذج برمجة Lambda. الكثير من الحديث مؤخراً كان عن إزالة سقف الذاكرة، وعن نموذج التسعير الجديد المرتبط بـ EC2 والذي يسمح لك باستخدام خطط التوفير (Savings Plans) والمثيلات المحجوزة (Reserved Instances). لكن القليل جداً من التغطية ركز على إعدادات التحجيم، وخاصة ماذا يحدث عندما تعيّن الحد الأدنى MinExecutionEnvironments والحد الأقصى MaxExecutionEnvironments على الصفر.
الافتراض الشائع الذي يحمله معظم المهندسين من استخدام Lambda القياسي هو أن الحد الأدنى صفر يعني «لا توجد سعة جاهزة، ابدأ عند الطلب التالي». ولكن في LMI، هذا الافتراض خاطئ تماماً. عندما يتم ضبط كل من الحد الأدنى والأقصى لبيئات التنفيذ على الصفر، فإن Lambda لا تقوم فقط بتعطيل الدالة مؤقتاً أو إيقافها لتنتظر الاستدعاء التالي. بدلاً من ذلك، يتم إلغاء تنشيط إصدار الدالة بالكامل. هذا يعني أن كل مثيل EC2 يدعم هذا الإصدار يتم إنهاؤه فعلياً، وتستمر تكلفة المثيل حتى اكتمال الإنهاء.
عندما يتم إلغاء تنشيط إصدار الدالة، فإن حالتها تتغير إلى «معطلة». أي استدعاء يتم توجيهه إلى هذا الإصدار المعطل سيعود بخطأ صريح وفوري. لا يوجد بدء تشغيل بطيء (cold start)، ولا يوجد انتظار في قائمة انتظار، ولا توجد محاولة إعادة. إنه فشل مباشر. الأهم من ذلك، أن إعادة التنشيط ليست تلقائية أبداً. يجب عليك يدوياً تطبيق إعداد تحجيم جديد بقيم غير صفرية، سواء من خلال لوحة التحكم، أو واجهة PutFunctionScalingConfig API، أو إجراء مجدول. هذا هو عكس ما يحدث عندما تقوم بتعيين ReservedConcurrentExecutions=0 في Lambda القياسية، حيث يتم منع الاستدعاءات الجديدة لكن الدالة تظل نشطة. لذا، انتبهوا جيداً لهذه التفاصيل عند العمل مع مثيلات Lambda المدارة!