← All posts

التوسّع إلى الصفر لا يستطيع العدّ إلى واحد

Authagonal·July 6, 2026
authinfrastructurekubernetesaksserverlessazurearchitecture

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

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

اللاخادمي يعدّ إلى الصفر وإلى N

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

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

لكن تحت ذلك توجد طبقة ليست أيًا من هذه الأشياء.

الرقم هو واحد

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

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

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

يمكنك تزييفه، وهذا أسوأ

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

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

الفاتورة كان لها حل ممل

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

اختبار الشكل

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

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

تلك الطبقة هي أيضًا بالضبط ما تتوقف عن تشغيله عندما تشغّل المصادقة على Authagonal بدلاً من تشغيل المنصة الخلفية بنفسك.