النشر مقابل الإصدار: متى يحصل المستخدمون فعليًا على نسختك الجديدة
فريقك أنهى للتو نشر الإصدار 1.2.0 إلى بيئة الإنتاج. القطعة البرمجية موجودة على الخادم، التطبيق يعمل، وكل فحوصات الصحة تظهر باللون الأخضر. هل يعني ذلك أن جميع مستخدميك يستخدمون الميزات الجديدة الآن؟ على الأرجح لا.
ربما قام فريقك عمدًا بإخفاء بعض الميزات أثناء مراقبة الاستقرار. ربما تم النشر إلى خادم جديد غير متصل بالمستخدمين بعد. الفجوة بين "الكود يعمل" و"يمكن للمستخدمين استخدامه" أوسع مما يدركه معظم الفرق.
الفرق بين النشر والإصدار
النشر هو إجراء تقني. تضع قطعة برمجية في بيئة وتجعلها تعمل. يقبل الخادم الملف الثنائي الجديد، يكتمل ترحيل قاعدة البيانات، يبدأ التطبيق في الاستجابة للطلبات. من منظور البنية التحتية، المهمة منجزة.
يوضح المخطط التالي كيف يختلف النشر عن الإصدار:
الإصدار هو قرار تجاري. إنها اللحظة التي تصبح فيها ميزة أو إصلاح متاحًا فعليًا للمستخدمين. يمكن أن يحدث النشر بدون إصدار، لكن الإصدار لا يمكن أن يحدث بدون نشر.
هذا التمييز مهم لأنه يغير طريقة تفكيرك في المخاطر. عندما يكون النشر والإصدار شيئًا واحدًا، يحمل كل نشر الوزن الكامل لتأثير المستخدم. عندما تفصل بينهما، تكتسب مساحة للمناورة.
أعلام الميزات: أبسط فصل
أعلام الميزات هي الطريقة الأكثر شيوعًا لفصل النشر عن الإصدار. تضيف كودًا يمكنه تشغيل الميزات أو إيقاف تشغيلها دون إعادة النشر. تذهب النسخة الجديدة إلى الإنتاج تحتوي على عدة ميزات، لكن واحدة فقط نشطة لمجموعة صغيرة من المستخدمين.
إليك مثال بسيط لما قد يبدو عليه تكوين علم الميزة في ملف YAML:
# config/feature-flags.yaml
features:
new-checkout:
enabled: false
description: "New checkout flow with one-page payment"
rollout_percentage: 0
dark-mode:
enabled: true
description: "Dark mode toggle for all users"
rollout_percentage: 100
عندما يكون الفريق مستعدًا لإصدار عملية الدفع الجديدة، يغيرون enabled: false إلى enabled: true ويحدثون النسبة المئوية للطرح. لا تغيير في الكود، لا إعادة نشر — مجرد تحديث تكوين يصبح ساري المفعول فورًا.
إذا كانت الميزة تعمل بشكل جيد، تفتحها لمزيد من المستخدمين. إذا حدث خطأ ما، تقلب العلم إلى إيقاف. لا حاجة للتراجع، لا نشر طارئ. باقي التطبيق يستمر في العمل بشكل طبيعي.
هذا النمط يعمل بشكل جيد خاصة للفرق التي تنشر بشكل متكرر. يمكنك نشر الكود عدة مرات في اليوم دون القلق بشأن كشف الميزات غير المكتملة. يصبح العلم مفتاح الأمان الخاص بك.
الإصدارات الكناري: الاختبار بحركة مرور حقيقية
تأخذ الإصدارات الكناري الفصل إلى أبعد من ذلك. تنشر النسخة الجديدة إلى الإنتاج لكنك توجّه نسبة صغيرة فقط من المستخدمين إليها — لنقل 5 بالمائة. هذه المجموعة تحصل على الكود الجديد بينما يبقى الجميع على النسخة القديمة.
تراقب معدلات الأخطاء، أوقات الاستجابة، وسلوك المستخدم لتلك المجموعة الصغيرة. إذا كان كل شيء يبدو طبيعيًا، تزيد النسبة تدريجيًا. إذا حدث خطأ ما، تعيد توجيه كل حركة المرور إلى النسخة القديمة. لا حاجة للتراجع، لا توقف.
الميزة الرئيسية هي أنك تختبر بحركة مرور حقيقية، وليس اختبارات اصطناعية. المستخدمون الحقيقيون لديهم متصفحات حقيقية، ظروف شبكة حقيقية، وأنماط استخدام حقيقية. الإصدار الكناري يكتشف مشاكل لن تكتشفها بيئات الاختبار أبدًا.
النشر الأزرق-الأخضر: فصل على مستوى البنية التحتية
النشر الأزرق-الأخضر يفصل الإصدار عن النشر على مستوى البنية التحتية. تحتفظ ببيئتي إنتاج متطابقتين: زرقاء وخضراء. النسخة القديمة تعمل على الزرقاء. تنشر النسخة الجديدة على الخضراء بينما لا تزال الزرقاء تخدم جميع المستخدمين.
عندما تكون واثقًا من استقرار الخضراء، تحول حركة المرور من الزرقاء إلى الخضراء. يحدث الإصدار في لحظة تحويل حركة المرور، وليس عند اكتمال النشر. إذا حدث خطأ ما بعد التحويل، تعيد حركة المرور إلى الزرقاء.
هذا النمط مفيد للتطبيقات حيث لا يمكنك استخدام أعلام الميزات بسهولة، أو حيث تكون التغييرات أساسية جدًا بحيث لا يمكن التبديل بعلم. تغييرات مخطط قاعدة البيانات، ترقيات الإطار الرئيسي، أو تعديلات البنية التحتية غالبًا ما تستفيد من النشر الأزرق-الأخضر.
لماذا فصل النشر والإصدار مهم
الفصل يمنحك التحكم في التوقيت. يمكنك النشر في الساعة 2 صباحًا عندما تكون حركة المرور منخفضة، لكن تأجيل الإصدار حتى الصباح عندما يكون فريقك مستعدًا للمراقبة. يمكنك النشر عدة مرات خلال اليوم دون القلق بشأن إزعاج المستخدمين، لأن الإصدار قرار منفصل.
كما يغير طريقة تعاملك مع المشاكل. عندما يكون النشر والإصدار مقترنين، النشر السيء يعني أن المستخدمين يرون الأخطاء فورًا. عندما يكونان منفصلين، لديك وقت لاكتشاف المشاكل قبل أن يتأثر المستخدمون. إشارات الصحة من النشر تخبرك أن الخادم يعمل. الإشارات بعد الإصدار تخبرك أن المستخدمين سعداء.
ماذا تراقب بعد الإصدار
الإصدار هو اللحظة التي يبدأ فيها المستخدمون بتجربة تغييراتك. قبل الإصدار، كل شيء تحت سيطرتك. بعد الإصدار، المستخدمون متورطون. إذا كانت هناك مشكلة، يشعرون بها أولاً.
فحوصات الصحة التي بدت خضراء أثناء النشر قد لا تروي القصة كاملة. التطبيق يعمل، لكن هل يكمل المستخدمون مهامهم؟ هل معدلات الأخطاء منخفضة فعلاً، أم أن الأخطاء تحدث في أجزاء من التطبيق لا تغطيها مراقبتك؟ هل الأداء مستقر تحت حمل المستخدم الحقيقي؟
تحتاج إلى المراقبة بشكل مختلف بعد الإصدار. راقب المقاييس التي تواجه المستخدم: أوقات تحميل الصفحة، معدلات إكمال المعاملات، معدلات الأخطاء حسب الميزة. قارنها بالخط الأساسي من قبل الإصدار. النشر الأخضر مع إصدار سيء لا يزال نتيجة سيئة.
قائمة تحقق عملية لإصدارك القادم
قبل أن تعتبر الإصدار منتهيًا، راجع هذه النقاط:
- هل يمكنك التراجع دون إعادة النشر؟ إذا لم يكن كذلك، ما هي خطة التراجع الخاصة بك؟
- هل تعرف أي المستخدمين يرون النسخة الجديدة؟ إذا كنت تقوم بإصدار كناري، تأكد من أن تقسيم حركة المرور يعمل.
- هل تراقب مقاييس تواجه المستخدم، وليس فقط صحة الخادم؟ صحة الخادم تخبرك أن التطبيق يعمل. مقاييس المستخدم تخبرك أن التطبيق يعمل بشكل صحيح.
- هل لديك طريقة لتعطيل الميزة دون إعادة النشر؟ إذا كنت لا تستخدم أعلام الميزات، فكر في إضافتها قبل الإصدار القادم.
- من يحتاج إلى معرفة أن الإصدار حدث؟ فرق الدعم، كتاب التوثيق، وأصحاب المصلحة الآخرين يجب إعلامهم.
الخلاصة
النشر يضع الكود على الخوادم. الإصدار يضع الميزات في أيدي المستخدمين. تعامل معهما كقرارين منفصلين، وستكتسب القدرة على النشر بثقة، والإصدار بحذر، والتعافي بسرعة عندما يحدث خطأ ما. أفضل الفرق لا تنشر بشكل جيد فقط — بل تصدر بشكل جيد، لأنهم يعرفون أن الاثنين ليسا نفس الشيء.