تحليل ما بعد المشكلة: حدث خطأ غير متوقع 500 أثناء تسجيل دخول المستخدم
تقرير الحادث عن الخطأ غير المتوقع 500 الذي أعيد من خدمات المصادقة في 18 يوليو 2024.
تقرير الحادث عن الخطأ غير المتوقع 500 الذي أعيد من خدمات المصادقة في 18 يوليو 2024.
في 18 يوليو 2024، واجه Logto Cloud انقطاعًا في الخدمة مع خطأ خادم داخلي 500 من خدمات المصادقة.
أثناء نشر حديث للسحابة، أحدث تغيير جذري في مخطط قاعدة البيانات فشل API تجربة تسجيل الدخول أثناء الانتقال بين بيئات التدريج والإنتاج.
نحن نقوم حاليًا بتطوير ميزة جديدة تسمى "أحضر واجهتك الخاصة" ، والتي تتيح للمستخدمين تخصيص تجربة تسجيل الدخول إلى Logto باستخدام صفحات الويب الخاصة بهم. تتطلب هذه الميزة عمودًا جديدًا في جدول sign-in-exp لتخزين إعدادات الواجهة المخصصة.
بسبب بعض التغييرات في المتطلبات أثناء التطوير، تأخر إصدار الميزة، ولكن الجزء الأول من تغيير المخطط قد تم نشره بالفعل في الإنتاج قبل عدة أسابيع، رغم أنه لم يكن قيد الاستخدام حتى الآن. تم إدخال تحديث لعمود قاعدة البيانات في هذا PR.
لسوء الحظ، لم يكن هذا التغيير متوافقًا مع الخلف، مما تسبب في فشل طلبات API من التعليمات البرمجية القديمة عند التواصل مع قاعدة البيانات الجديدة.
عند نشر نسخة جديدة من Logto Cloud، نقوم أولاً بنشرها في بيئة التدريج ثم نقوم بتبديل بيئات التدريج والإنتاج. العملية كما يلي:
ولكن كلتا البيئتين تتشاركان نفس قاعدة البيانات، وتستغرق العملية بأكملها وقتًا. لذلك في النافذة الزمنية بين تحديث قاعدة البيانات وتبديل البيئات، يظل المستخدمون عبر الإنترنت في بيئة الإنتاج مع التعليمات البرمجية القديمة لكن يحاولون التواصل مع قاعدة البيانات الجديدة.
كان هذا هو السبب الجذري للحادث والسبب في أنه تم حله تلقائيًا في 35 دقيقة.
لدينا بالفعل مهمة CI للتحقق من التوافق مع الخلف لتغييرات قاعدة البيانات. ومع ذلك، لم يكن من الضروري في السابق اجتياز فحص CI قبل دمج PR. وذلك لأن مرحلة التطوير في معظم الأحيان تكون قصيرة عادةً ضمن بضعة سبرينتات، وعادةً ما يتم تضمين الجزء الأول والثاني من تغييرات المخطط في نفس مرحلة الإصدار.
هذه المرة، تأخر إصدار الميزة، وانتشرت تغييرات المخطط عبر إصدارين. افترض المطور أن إخفاق CI كان متوقعًا وأبلغ المراجعين بأنه لا ينبغي أن يعوق دمج PR.
كان هناك فجوة في التواصل بالتأكيد، وأخيرًا تم دمج PR دون توفير أي دعم لازم للتوافق مع الخلف.