الملخص
بين 29 أكتوبر و1 نوفمبر 2024، توقفت واحد وأربعون محرك أقراص NVMe من فئة المؤسسات عبر أربعة مواقع عن قبول الأوامر عند عدد ساعات تشغيل ثابت، وهو خلل في البرنامج الثابت في دفعة تصنيع واحدة. استوعب النسخ المتطابق تسعة وثلاثين من تلك الإخفاقات دون تأثير على العملاء. عقدة واحدة في وارسو فقدت نصفي نسخة متطابقة في غضون أربعين دقيقة، لأن كلا المحركين جاءا من نفس الدفعة وتم تركیبهما في نفس اليوم. حالتان على تلك العقدة فقدتا بيانات. هذا الجزء الثاني كان خطأنا، وليس خطأ المورد.
الجدول الزمني
جميع الأوقات بتوقيت UTC.
| الوقت | الحدث |
|---|---|
| 29 أكتوبر 03:11 | محرك أقراص ينفصل عن الناقل على عقدة في وارسو. يتدهور النسخ المتطابق، ويبدأ القرص الاحتياطي الساخن في إعادة البناء. أمر روتيني، لا تنبيه. |
| 29 أكتوبر 03:49 | محرك أقراص ثانٍ في نفس النسخة المتطابقة ينفصل. تفقد العقدة مجموعة الجذر الخاصة بها وتتوقف. |
| 29 أكتوبر 03:52 | ينطلق التنبيه. يتصل المهندس المناوب في 03:55. |
| 29 أكتوبر 04:20 | تُعلن العقدة غير قابلة للاسترداد في مكانها. إعادة البناء من القرص الاحتياطي الساخن مستحيلة؛ كان القرص الاحتياطي في منتصف إعادة البناء من مصدر لم يعد يستجيب. |
| 29 أكتوبر 05:40 | مهندس يراجع سجلات المحركات يلاحظ أن الإخفاقين يفصل بينهما ثماني عشرة ساعة تشغيل، وليس ثمانية عشر شهرًا. ينتقل الشك من سوء الحظ إلى مجموعة. |
| 29 أكتوبر 06:15 | استعلام على مستوى الأسطول بواسطة معرّف الدفعة وساعات التشغيل. مئتان وستة محركات أقراص في الدفعة المتأثرة. واحد وثلاثون تجاوزت العدد وفشلت بالفعل؛ والباقي بين أربعين وتسعمائة ساعة بعيدًا عن ذلك. |
| 29 أكتوبر 07:30 | الاتصال بالمورد. تأكيد الخلل في غضون أربع ساعات: عداد في تيليمتري معادلة التآكل يفيض عند 1,536 ساعة تشغيل ويثبّت وحدة التحكم. إصلاح البرنامج الثابت الذي يعالجه كان قد شُحن، بهدوء، قبل ستة أسابيع. |
| 29 أكتوبر 09:00 | بدء تحديث البرنامج الثابت المتدرج، مرتبًا حسب الساعات المتبقية. |
| 30 أكتوبر 22:40 | تحديث أو استبدال آخر محرك في الدفعة. |
| 1 نوفمبر 14:00 | استعادة حالات العملاء المتأثرة أو رد أموالهم. |
السبب الجذري
سببان، وواحد منهما فقط يخص مصنع المحرك.
بسببهم: عداد تيليمتري فاض عند عدد ساعات تشغيل ثابت وعلّق وحدة التحكم. ينجو المحرك من دورة طاقة، ويعود، وينحشر مرة أخرى في غضون دقائق. البيانات على اللوحة سليمة ولا يمكن الوصول إليها، وهو أسوأ مزيج لأي شخص يحاول تشخيصها في الرابعة فجرًا.
بسببنا: بنينا نسخًا متطابقة من محركات وصلت في نفس التسليم. النسخة المتطابقة يُفترض أن تكون مجالين فشل مستقلين، ومحركان من دفعة واحدة، رُكّبا في نفس المساء، وشُغّلا في نفس الساعة، ليسا مستقلين بأي معنى مهم. أحد عشر نسخة متطابقة عبر الأسطول بُنيت بهذه الطريقة. عشرة كانت محظوظة في أن القرص الاحتياطي الساخن أنهى إعادة البناء أولاً. واحد لم يفعل.
كنا نعرف هذا من حيث المبدأ لسنوات. لم يكتبه أحد في إجراءات البناء، وإجراءات البناء هي ما يتبعه الناس في الثانية صباحًا تحت موعد تسليم.
التأثير
- تسعة وثلاثون إخفاقًا استوعبتها النسخ المتطابقة دون تأثير مرئي للعملاء.
- عقدة واحدة غير متصلة لمدة تسع ساعات وثماني عشرة دقيقة.
- أربع عشرة حالة على تلك العقدة استُعيدت من نسخ احتياطية خارج العقدة، مع فقدان إحدى عشرة دقيقة من عمليات الكتابة على الأكثر.
- حالتان بدون أي نسخة احتياطية. كلتاهما فقدتا كل شيء على العقدة.
ما غيّرناه
- تقسيم دفعات الشراء. لا يجوز لمحركين من نفس الدفعة تكوين نسخة متطابقة، ويأتي القرص الاحتياطي الساخن الذي يحمي زوجًا من دفعة ثالثة. يُنفَّذ بواسطة أدوات البناء، وليس بوثيقة. تم في 4 نوفمبر.
- تنبيه المجموعة على ساعات التشغيل. ننبه الآن عندما يكون أكثر من أربعة محركات تشترك في معرّف دفعة ضمن مائة ساعة من بعضها البعض وتقترب من أي عدد ساعات دائري. إنه استدلال تقريبي وكان سيلتقط هذه الحالة قبل تسعة عشر يومًا.
- اختبار البرنامج الثابت قبل الإنتاج. عائلة محركات جديدة تعمل ألفي ساعة تشغيل في رف اختبار قبل أن تحمل بيانات العملاء. كان هذا الخلل سيظهر عند 1,536.
- نقرأ الآن ملاحظات إصدار البرنامج الثابت للموردين وفق جدول. كان الإصلاح موجودًا قبل ستة أسابيع من حاجتنا إليه. لم يُكلف أحد بالاطلاع، فلم يطلع أحد.
ما لم نغيّره، ولماذا
لم نغيّر عائلة المحركات أو المورد. كان الخلل حقيقيًا والإفصاح ضعيفًا، لكن خسارتنا جاءت من ارتباط الدفعات، الذي كنا سنعيد إنتاجه مع أي مصنع. كان تغيير المورد سيبدو حاسمًا ولن يصلح شيئًا.
تبقى النسخة الاحتياطية خارج العقدة إضافة بتسعة يورو لكل خمسمائة غيغابايت. جعلها شاملة يعني فرض رسوم على كل عميل مقابل خدمة معظمهم يكررونها بأنفسهم، ولن نفرض على الناس مقابل مظهر الأمان. ما تغيّر هو نموذج الطلب، الذي يذكر الآن بوضوح أن تخزين الحالة منسوخ متطابق والنسخ المتطابق ليس نسخة احتياطية، وخطوة التأكيد لم تعد تسمح بتجاوز تلك الجملة بصمت.
لم ننتقل إلى النسخ المتطابق الثلاثي. يكلف ثلثًا إضافيًا لكل غيغابايت ولا يعالج الفشل المرتبط، الذي كان الآلية الفعلية هنا. مجالان مستقلان يتغلبان على ثلاثة معتمدين.
العميلان
استُرد أموال كلاهما بالكامل عن الفترة المتأثرة، بالأصل الذي دفعا به، دون طلب تبرير. غادر واحد. بقي الآخر ويشتري الآن إضافة النسخة الاحتياطية، بعد أن قرأ نفس الجملة في نموذج الطلب التي كانت موجودة بصيغة أضعف طوال الوقت.
لم تكن أي من هاتين النتيجتين في يدنا. الشيء الوحيد الذي كان في يدنا هو بناء النسخة المتطابقة بشكل صحيح، ولم نفعل.