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