إبقاء منصة تعلم تعمل حين انتقل العالم إلى الإنترنت بين ليلة وضحاها
ضاعف ربيع 2020 زياراتنا خلال أسابيع. ترتيب ما تعطّل، والقرارات التي صمدت، والخيارات الطارئة التي اضطررنا للتراجع عنها لاحقًا، وكيف صار ذلك كله دليل تشغيل نسلّمه اليوم لعملائنا الحكوميين.
· 7 دقائق قراءة · Cozyplus Technologies
حين أغلقت الجامعات في آذار 2020، وصل الطلاب أسرع من أي توقع لدينا. لم يكن أسبوعًا مزدحمًا، بل نقلة مستوى لم تعد إلى ما كانت عليه.
بقينا نعمل. ولم يكن ذلك حظًا، ولم يكن بطولات. كان مجموعة قرارات غير لافتة اتُّخذت قبل وصول الحمل، مع بضعة قرارات سيئة اتُّخذت أثناءه وقضينا السنة التالية في إزالتها. والنصفان يستحقان التدوين، لأن شكل الحدث هو نفسه الذي تواجهه جهة عامة في يوم استحقاق.
ترتيب ما تعطّل
تتعطل الأنظمة بتسلسل، ومعرفة التسلسل هي معظم قيمة أن تكون قد عشت واحدًا منها.
تعطّل البحث أولًا. كان أغلى عملية لكل طلب، وخلافًا لصفحات العرض لم يكن ممكنًا تقديمه من ذاكرة مؤقتة لأن كل استعلام يختلف قليلًا عن سابقه. وتدهور البحث هو أسوأ أنواع الفشل أيضًا، لأن الطالب الذي لا يجد شيئًا يعيد المحاولة ببساطة، فيضيف حملًا جديدًا.
وتعطّلت قاعدة البيانات ثانيًا، لا بسبب حجم الاستعلامات بل بسبب الاتصالات. كل نسخة تطبيق جديدة أضفناها لمواجهة الزحام فتحت مجمّع اتصالات خاصًا بها، واستنفدت هذه المجمّعات مجتمعةً الخادم قبل أن يصبح المعالج هو القيد بوقت طويل. والتوسع الأفقي لما يقف أمام قاعدة البيانات قد يكون هو ما يقتل قاعدة البيانات.
وتعطّل الدعم ثالثًا، واستمر تعثره أسابيع بعد استقرار المنصة. التذاكر تصل بعد الحادثة لا أثناءها، فطابور الدعم مؤشر متأخر. ومن يخطط للسعة عليه أن يخطط للطابور البشري بالجدية نفسها التي يخطط بها للطابور التقني.
وما لم يتعطل كان لافتًا أيضًا. الملفات الثابتة وتوصيل الفيديو وكل ما كان على الحافة أصلًا لم يتأثر إطلاقًا. والدرس أن أجزاء النظام التي تصمد تحت الضغط هي الأجزاء التي أُخرجت من المسار الحرج قبل ذلك بوقت، لأسباب لا علاقة لها بالحمل.
ما صمد، ولماذا صمد قبل الحاجة إليه
حملتنا ثلاثة أمور، وليس فيها شيء بارع.
التخزين المؤقت على الحافة، بحيث لم تصل غالبية الطلبات إلى خوادمنا أصلًا. والانضباط خلفه هو أن تقرروا، لكل مسار، ما القابل للتخزين ولأي مدة، وأن تملكوا وسيلة لإبطال عنصر واحد دون مسح كل شيء.
ونسخ القراءة، مع معرفة التطبيق أي استعلامات يُسمح لها بقراءة بيانات غير محدَّثة. هذا التمييز يجب أن يُكتب في الكود قبل ذلك بوقت طويل؛ لا يمكنكم أن تقرروا أثناء حادثة أي استعلاماتكم المئتين يحتمل تأخرًا بضع ثوانٍ.
وطابور أمام كل ما يكتب. تحت حمل مفاجئ، الفرق بين نظام يتباطأ ونظام ينهار هو ما إذا كانت عمليات الكتابة مسموحًا لها بالتراكم في مخزن مؤقت أم مجبرة على الحدوث تزامنيًا. الطوابير تحوّل الانقطاع إلى تأخير، والتأخير شيء يمكن شرحه للمستخدمين.
وسبب نجاح الثلاثة أنها كانت مجرَّبة. كنا قد أجرينا اختبارات حمل، وأسقطنا نسخة قراءة عمدًا، وتمرّنا على رفع مدد التخزين المؤقت بحزم. والضابط الذي لم يُجرَّب قط ليس ضابطًا، بل افتراض.
القرارات التي اضطررنا للتراجع عنها
هذا هو الجزء الذي يُحذف عادة من قصص كهذه.
لشراء متسع سريع أطفأنا أمورًا مهمة. أُسقطت بعض عمليات الكتابة غير الحرجة بدل وضعها في طابور، وهو ما يعني أسابيع من تحليلات استخدام ناقصة لم نستطع إعادة بنائها أبدًا. ورفعنا مدد التخزين المؤقت إلى ما يتجاوز ما يبرره المحتوى، فرأى عدد قليل من الطلاب شرحًا مصحَّحًا بعد أيام من موعده. ووسّعنا قاعدة البيانات رأسيًا لأنه كان الإجراء الوحيد الممكن خلال بعد ظهر واحد، ثم حملنا تلك التكلفة شهورًا حتى اكتمل العمل على تجزئة حركة القراءة على نحو سليم.
كما أضفنا مفاتيح ميزات على عجل، ومفاتيح العجلة تصير دائمة. وبعد سنة كنا ما نزال نعثر على شروط تحرس شيئًا أُطفئ في نيسان 2020 ولم يُعد تشغيله. كل مفتاح طوارئ يحتاج مالكًا وتاريخ مراجعة لحظة إنشائه، وإلا صار جزءًا من البنية تلقائيًا.
والخلاصة الصادقة أن النجاة من حدث حمل تكلّف دينًا تقنيًا، وتصل الفاتورة لاحقًا. خططوا للتنظيف كجزء من الاستجابة، لا كشيء ستصلون إليه يومًا ما.
ما كلّفه ذلك
ارتفع الإنفاق على البنية التحتية ارتفاعًا حادًا ولم يعد إلى ما كان، لأن الزيارات لم تعد إلى ما كانت. هذا هو الرقم السهل.
أما التكاليف الأصعب فكانت خارطة الطريق والبشر. شهران من العمل المخطط على المنتج لم يحدثا. والمهندسون الذين حملوا المناوبة في تلك الفترة أُنهكوا على نحو ظهر أثره في الربع التالي، وتلك تكلفة حقيقية لا تظهر في أي فاتورة. ونحن اليوم نتعامل مع مناوبات الطوارئ في حادثة ممتدة كأمر يُدار بفاعلية لا كأمر يُترك لمن هو أكثر استعدادًا.
وكانت هناك تكلفة ثقة رغم أننا لم ننقطع. كانت أزمنة الاستجابة أسوأ من المعتاد عدة أسابيع، والمستخدمون يلاحظون البطء قبل أن يلاحظوا الانقطاع.
تحويل ذلك إلى شيء تستخدمه جهة حكومية
بعدها دوّنا الأرقام: عدد الطلبات في الثانية عند كل مرحلة، ونسبة القراءة إلى الكتابة، والنقطة التي صار عندها كل مكوّن هو القيد، والمدة التي استغرقها تطبيق كل إجراء تخفيف. وهذه الأرقام أثمن من أي نصيحة عامة، لأنها تتيح النقاش حول السعة بالأدلة.
ثم حوّلنا التمارين إلى دليل تشغيل، وهذا الدليل يدخل اليوم في العروض الحكومية. يتضمن، لكل عطل من أكثر عشرة أعطال ترجيحًا، شكل العَرَض على اللوحة، وما يُفحص أولًا، وما يُفعل، ومن يُبلَّغ، وما هو مسار التراجع. وهو مكتوب ليُنفَّذ بيد موظف في الجهة في الثانية فجرًا، لا بأيدينا.
والإسقاط على العمل العام مباشر. بوابة المواطن يوم انتهاء مهلة ضريبية تتصرف تمامًا كمنصة دراسة ليلة الامتحانات: موعد نهائي صارم، وجمهور لا يستطيع اختيار المجيء لاحقًا، وذروة معروفة التاريخ تمامًا ومعروفة الحجم تقريبًا. والذروات المتوقعة هي أسهل ما يُستعد له وأكثر ما يُحرج الفشل فيه.
والخطوة العملية التي نوصي بها هي تمرين مع العميل قبل التشغيل الفعلي: اختبار حمل على شكل الإنتاج الحقيقي، وإسقاط نسخة قراءة عمدًا، وتنفيذ موظفي الجهة لدليل التشغيل بينما نراقب دون تدخل. وكل ما يعجزون عن فعله بدوننا هو ثغرة في التوثيق لا فيهم.
الرأي المضاد
ليس كل نظام ينبغي أن يُبنى للذروة، ونقول ذلك في عروضنا.
الهندسة لذروة تعادل عشرة أو مئة ضعف الحمل المعتاد تحمل تكلفة دائمة في التعقيد. التخزين المؤقت يُدخل قِدَم البيانات، ونسخ القراءة تُدخل التأخر، والطوابير تُدخل الاتساق المؤجل، وكل واحد من هذه يجعل النظام أصعب على الفهم وأصعب على فريق يرثه. وفي نظام داخلي يستخدمه أربعمئة موظف في أيام العمل، هذه مقايضة سيئة. اشتروا خادمًا أكبر.
والحكم يتعلق بشكل الطلب لا بحجم المؤسسة. اسألوا: هل يمكن مطالبة المستخدمين بالعودة لاحقًا؟ في أداة سير عمل داخلية، غالبًا نعم. وفي بوابة في آخر يوم من نافذة تقديم، لا إطلاقًا، وهنا يستحق التعقيد مكانه.
والتحفظ الصادق الآخر أن أي قدر من الاستعداد لا يلغي الحاجة إلى القرار في اللحظة. دليل التشغيل يغطي الأعطال التي تخيلتموها، أما العطل الذي سيوقعكم فهو الذي لم تتخيلوه، وما ينقذكم حينها فريق يفهم لماذا يوجد كل ضابط، لا فريق يحسن اتباع الخطوات.