اختيار استراتيجية استعادة قاعدة البيانات المناسبة لفريقك
لقد نشرت للتو ترحيل قاعدة بيانات إلى بيئة الإنتاج. بعد خمس دقائق، تظهر لوحة المراقبة ارتفاعًا في الاستعلامات الفاشلة. فريقك الآن في موقف مألوف: تحتاج إلى إصلاح هذا بسرعة. لكن طريقة الإصلاح تعتمد على أكثر من مجرد القدرة التقنية. تعتمد على من أنت، وكم مرة تنشر، ونوع التطبيق الذي تديره.
لا توجد إجابة واحدة تناسب الجميع لاستعادة قاعدة البيانات. الاستراتيجية التي تنجح مع فريق صغير ينشر مرة واحدة في الأسبوع ستفشل مع فريق ينشر عشر مرات في اليوم. الحيلة ليست في العثور على الاستراتيجية المثالية، بل في العثور على استراتيجية يمكنك تنفيذها باستمرار تحت الضغط.
حجم الفريق وتكرار النشر مهمان
فريق من ثلاثة أشخاص ينشرون مرة واحدة في الأسبوع لديه مشكلة استعادة مختلفة تمامًا عن فريق من عشرين شخصًا ينشرون عدة مرات في اليوم.
عندما تنشر بشكل غير متكرر، تعرف بالضبط ما الذي تغير. كان هناك فقط عدد قليل من الترحيلات في الأسبوع الماضي، ويتذكرها الجميع في الفريق. إذا حدث خطأ ما، يمكنك التفكير في تشغيل ترحيل عكسي (down migration) لعكس تغيير المخطط. خطر التصادم مع عمل عضو آخر في الفريق منخفض لأنه لم يكن أحد ينشر في نفس الوقت.
تخيل الآن فريقًا ينشر كل بضع ساعات. بحلول الوقت الذي تلاحظ فيه مشكلة في الترحيل الخاص بك، قد يكون ثلاثة مطورين آخرين قد دفعوا ترحيلات جديدة فوق ترحيلك. تشغيل ترحيل عكسي في هذه البيئة خطير. قد تعكس تغييرك، ولكن قد تمحو أيضًا ترحيل شخص آخر كان جيدًا تمامًا. خطر التصادم مرتفع، والعواقب فوضوية.
بالنسبة للفرق عالية التردد، تصبح الترحيلات العكسية عبئًا. إنها تعمل نظريًا ولكنها تسبب فوضى عمليًا. تحتاج هذه الفرق إلى استراتيجية استعادة لا تفترض أنهم الوحيدون الذين يقومون بالتغييرات.
تحمل فترة التوقف يشكل خياراتك
ليست كل التطبيقات يمكنها تحمل التوقف بينما تقوم بإصلاح مشكلة قاعدة البيانات. درجة تحملك للتوقف تحدد بشكل مباشر استراتيجيات الاستعادة المتاحة لك.
إذا كنت تدير تطبيقًا داخليًا يستخدمه خمسون شخصًا خلال ساعات العمل، فقد تتمكن من إيقاف النظام لمدة خمس دقائق. هذا يمنحك مساحة للاستعادة من نسخة احتياطية أو تشغيل ترحيل عكسي يستغرق وقتًا لإكماله. سينزعج المستخدمون، لكن التأثير على الأعمال محدود.
الآن فكر في تطبيق عام يعالج آلاف الطلبات في الثانية. كل دقيقة توقف تكلف إيرادات وتضعف ثقة المستخدم. الاستعادة من نسخة احتياطية قد تستغرق عشرين دقيقة أو أكثر. هذا غير مقبول. في هذا السيناريو، الاستعادة التقدمية (roll-forward) شبه إلزامية. تكتب ترحيلًا جديدًا يصلح المشكلة، وتنشره، وتنتقل إلى الأمام. يستغرق الإصلاح ثوانٍ للتطبيق، وليس دقائق.
ينطبق نفس المنطق على البرامج النصية التعويضية (compensating scripts). إذا كنت تعلم أنك تعمل على تغيير عالي المخاطر، قم بإعداد البرنامج النصي التعويضي قبل نشر الترحيل الأصلي. لا تنتظر حتى يحدث خطأ ما. عندما يكون الضغط مرتفعًا، تنخفض قدرتك على كتابة SQL صحيحة تحت ضغط الموعد النهائي بشكل كبير. البرنامج النصي المُعد مسبقًا يزيل هذا العبء المعرفي.
نوع التغيير يحدد مستوى المخاطرة
ليست كل تغييرات قاعدة البيانات تحمل نفس المخاطرة. إضافة عمود قابل للقيم الفارغة (nullable) أو إنشاء جدول جديد هو تغيير منخفض المخاطرة. هذه التغييرات سهلة الاستعادة التقدمية لأنها لا تكسر الاستعلامات الحالية. يمكنك إضافة العمود، ونشر كود التطبيق الذي يستخدمه، ويعمل كل شيء.
لكن حذف عمود، أو تغيير نوع بيانات، أو ترحيل بيانات بين الجداول هو تغيير عالي المخاطرة. هذه التغييرات يمكن أن تكسر الاستعلامات التي لا تزال قيد التشغيل في الإنتاج. يمكنها قفل الجداول لدقائق أو ساعات. يمكنها إفساد البيانات إذا كان منطق الترحيل يحتوي على خطأ.
بالنسبة للتغييرات عالية المخاطرة، يجب ألا تعتمد أبدًا على الاستعادة التفاعلية. تحتاج إلى تخطيط مسار الاستعادة قبل تشغيل الترحيل. هذا يعني كتابة البرنامج النصي التعويضي مسبقًا. يعني اختبار مسار الاستعادة التقدمية في بيئة اختبارية (staging). يعني معرفة بالضبط ما ستفعله إذا استغرق الترحيل وقتًا أطول من المتوقع أو إذا نجح ولكنه أنتج بيانات خاطئة.
الاستراتيجية الافتراضية: الاستعادة التقدمية أولاً
بعد العمل مع العديد من الفرق، يظهر نمط واضح. الفرق الناضجة تجعل الاستعادة التقدمية هي الخيار الافتراضي. الترحيلات العكسية محجوزة لبيئات الاختبار أو مراحل التطوير المبكرة جدًا. يتم التعامل مع النسخ الاحتياطية كشبكة أمان للفشل الكارثي، وليس كآلية تراجع يومية. تُستخدم البرامج النصية التعويضية عندما تحتاج البيانات إلى الإصلاح دون تغيير المخطط.
سبب نجاح هذا النمط هو الاتساق. عندما تستخدم دائمًا الاستعادة التقدمية، تطور عادات تجعل الاستعادة أسهل. تكتب ترحيلات أصغر وأكثر تكرارًا. تختبر مسار الاستعادة التقدمية في كل مرة. تصبح مرتاحًا لفكرة أن إصلاح المشكلة يعني نشر تغيير آخر، وليس التراجع عن التغيير الأخير.
الفرق التي تخلط الاستراتيجيات غالبًا ما تعاني. أسبوع يستخدمون الترحيل العكسي، والأسبوع التالي يستعيدون من نسخة احتياطية، والأسبوع التالي يكتبون برنامجًا نصيًا تعويضيًا على الطاير. كل حادثة تتطلب قرارًا جديدًا تحت الضغط. هذا هو الوقت الذي تحدث فيه الأخطاء.
قائمة مراجعة عملية لاختيار استراتيجية الاستعادة
- كم مرة ينشر فريقك؟ إذا كان أكثر من مرة في اليوم، تجنب الترحيلات العكسية في الإنتاج.
القائمة أعلاه هي بداية جيدة، لكن شجرة القرار المرئية يمكن أن تجعل الاختيار أكثر وضوحًا تحت الضغط. إليك مخطط انسيابي بسيط لتوجيه فريقك في اختيار استراتيجية الاستعادة:
- هل يمكن لتطبيقك تحمل خمس دقائق من التوقف؟ إذا لم يكن كذلك، يجب أن تكون الاستعادة التقدمية هي الخيار الافتراضي.
- هل الترحيل الخاص بك يضيف عمودًا أم يحذفه؟ التغييرات عالية المخاطرة تحتاج إلى برنامج نصي تعويضي مُعد مسبقًا.
- هل لديك بيئة اختبارية تعكس الإنتاج؟ اختبر مسار الاستعادة الخاص بك هناك أولاً.
- هل اتفق فريقك على استراتيجية افتراضية؟ الاتساق أهم من الكمال.
الخلاصة
استراتيجية استعادة قاعدة البيانات الخاصة بك ليست قرارًا تقنيًا. إنها قرار جماعي يتشكل من خلال كيفية عملك، وكم مرة تنشر، وما يمكن لمستخدميك تحمله. أفضل استراتيجية هي تلك التي يمكن لفريقك تنفيذها دون تردد عندما يحدث خطأ ما. اختر واحدة، ومارسها، واجعلها افتراضية. هذا الاتساق سيوفر لك وقتًا أكثر مما يمكن لأي أداة أو برنامج نصي أن يوفره.