كيف يمكنك تحديث موقع ويب مباشر ومزدحم بأفضل طريقة ممكنة؟

StackOverflow https://stackoverflow.com/questions/67368

سؤال

عندما تقوم بإجراء تغييرات على موقع ويب مباشر، كيف يمكنك التحقق من أن يعيش النظام يعمل بشكل صحيح؟ما هي الأدوات التي تستخدمها؟من يفعل ذلك؟هل يتم منع الدخول إلى الموقع خلال فترة الاختبار؟ما مقدار التوقف المقبول؟

هل كانت مفيدة؟

المحلول

أميل إلى إجراء جميع اختباراتي في بيئة أخرى (وليس البيئة الحية!).يتيح لي هذا دفع التحديثات إلى الموقع المباشر مع العلم أن الكود يجب أن يعمل بشكل جيد، وأقوم فقط بإجراء اختبار السلامة على البيانات المباشرة - تأكد من أنني لم أنس ملفًا في مكان ما، أو حدث خطأ غريب.

لذا، فإن الاختبار المناسب في بيئة اختبار أو مرحلة، ثم مجرد فحص تافه للعقلانية.لا حاجة للتوقف.

نصائح أخرى

الكثير من النصائح الجيدة بالفعل.

كما ذكر الأشخاص، إذا لم تكن لديك نقطة واحدة معنية، فمن السهل فقط إجراء التغييرات تدريجيًا عن طريق ترقية خادم التطبيق في كل مرة.لكن هذا نادرًا ما يحدث، لذا دعونا نتجاهل ذلك ونركز على الأجزاء الصعبة.

عادةً ما يكون هناك قاعدة بيانات مشتركة بين كل شيء آخر.وهذا يعني توقف النظام بأكمله. كيف يمكنك التقليل من ذلك؟

أتمتة.قم بكتابة إجراء النشر بأكمله.يتضمن هذا (خاصة) أي تغييرات في مخطط قاعدة البيانات.يتضمن هذا (خاصة) أي ترحيل للبيانات تحتاجه بين إصدارات المخطط.

رقابة جودة.تأكد من وجود اختبارات.اختبارات القبول الآلية (ما يراه المستخدم ويتوقعه من منظور منطق العمل/الخبرة).فكر في وجود حسابات اختبارية في نظام الإنتاج والتي يمكنك كتابتها لاختبار أنشطة القراءة فقط.إذا كنت لا تتفاعل مع الأنظمة الخارجية الأخرى، ففكر في القيام بأنشطة الكتابة أيضًا.قد تحتاج إلى تصفية نشاط الحساب الاختباري في أجزاء معينة من النظام، خاصة إذا كانت تتعامل مع الأموال والمحاسبة.تنزعج عدادات الفاصوليا، لأسباب وجيهة، عندما لا تتطابق الفاصوليا.

تمرين.النشر في بيئة مرحلية مطابقة قدر الإمكان للإنتاج.افعل ذلك باستخدام أحجام بيانات الإنتاج وبيانات الإنتاج.عليك أن تشعر بالمدة التي يستغرقها جدول التغيير.وتحتاج إلى التحقق من أن جدول التغيير يعمل من الناحية الهيكلية ومع جميع المفاتيح الخارجية في البيانات الفعلية.

إذا كانت لديك كميات هائلة من البيانات، فستستغرق تغييرات المخطط بعض الوقت.ربما يكون هناك وقت أكثر مما تستطيع أن تتحمله.حل واحد هو الاستخدام ترحيل البيانات على مراحل, ، بحيث يتم ملء تغيير المخطط ببيانات "حديثة" أو "حالية" (على سبيل المثال، عمرها شهر أو ثلاثة أشهر) أثناء فترة التوقف، ويمكن أن تتدفق البيانات الخاصة بالسنوات الخمس المتبقية بعد اتصالك بالإنترنت مرة أخرى.تبدو الأمور بالنسبة للمستخدم النهائي على ما يرام، ولكن لا يمكن الوصول إلى بعض الميزات لمدة ساعتين/أيام/أي شيء آخر.

في العمل، نقضي فترة من الوقت مع تجميد الكود في بيئة الاختبار.ثم بعد بضعة أسابيع من الإشعار، نقوم بإغلاق الموقع في منتصف ليل الجمعة، ونعمل طوال الليل على النشر والتحقق من الصحة، ونقوم بتشغيله في وقت متأخر من صباح يوم السبت.أظهرت لنا إحصائيات حركة المرور أن هذا هو أفضل إطار زمني للقيام بذلك.

إذا كان لديك مجموعة من الخوادم ذات التحميل المتوازن، فستتمكن من أخذ واحدة تلو الأخرى دون اتصال بشكل منفصل وتحديثها.لا التوقف للمستخدمين!

احصل على صورة جذابة و/أو صفحة احتياطية.تستخدم بعض المواقع ألعاب جافا سكريبت بسيطة لإبقائك مشغولاً أثناء انتظار التحديث.

على سبيل المثال، فشل الحوت.

-آدم

في آخر مكان عملت فيه، كان ضمان الجودة يقوم بإجراء الاختبار في بيئة ضمان الجودة.سيتم إصلاح أي مشكلات كبيرة واختبارها والتحقق منها قبل طرحها.

بعد اعتماد البناء من قبل ضمان الجودة، قام فريق دعم الإنتاج بإرسال الكود إلى بيئة التدريج حيث ينظر العميل إلى الموقع ويتحقق من أن كل شيء كما هو مطلوب.

يتم بدء الإنتاج الفعلي خلال ساعات التوقف (بعد الساعة 9 مساءً.إذا كان ذلك بمثابة دفعة ليلية طارئة، أو من الساعة 5 صباحًا.- 8 صباحاإذا كان طرحًا مجدولًا عادةً).

تتم استضافة الموقع على خوادم متعددة، والتي تتم موازنة التحميل باستخدام F5 Load Balancer:

  • تمت إزالة اثنين من الخوادم من الإنتاج،
  • تم تثبيت الكود و
  • يتم إجراء فحص سريع على الخوادم قبل إعادة الخوادم إلى المجموعة.

ويتكرر هذا حتى تتم ترقية كافة الخوادم إلى أحدث التعليمات البرمجية والسماح للموقع بالبقاء نشطًا طوال الوقت.

تعتبر هذه العملية مثالية، ولكن هناك حالات تحتاج فيها قاعدة البيانات إلى الترقية أيضًا.إذا كان الأمر كذلك، فهناك خياران، اعتمادًا على ما إذا كانت قاعدة البيانات الجديدة ستعطل الموقع أم لا.

إذا كانت قاعدة البيانات الجديدة غير متوافقة مع الواجهة الأمامية الحالية، فلن يكون لديك خيار حقيقي سوى الحصول على فترة زمنية حيث يكون الموقع معطلاً.

ولكن إذا كانت قاعدة البيانات الجديدة متوافقة مع الواجهة الأمامية الحالية، فلا يزال بإمكانك دفع التعليمات البرمجية للخارج دون أي توقف فعلي، ولكن هذا يتطلب وجود خادمين لقاعدة بيانات الإنتاج.

  • يتم توجيه كل حركة المرور إلى قاعدة البيانات الثانية ويتم سحب خادم قاعدة البيانات الأول.
  • تتم ترقية قاعدة البيانات الأولى وبعد اكتمال التحقق، يتم إعادتها إلى الإنتاج.
  • يتم توجيه كل حركة المرور إلى قاعدة البيانات الأولى ويتم سحب قاعدة البيانات الثانية.
  • تتم ترقية قاعدة البيانات الثانية وبعد اكتمال التحقق، يتم إعادتها إلى الإنتاج.
  • الخطوة التالية هي إجراء الترقيات الجزئية كما هو موضح أعلاه.

لذلك لتلخيص:

  • عندما تقوم بإجراء تغييرات على موقع ويب مباشر، كيف يمكنك التحقق من أن النظام المباشر يعمل بشكل صحيح؟ وفي أفضل الأحوال، يتم ذلك بشكل تدريجي.

  • ما هي الأدوات التي تستخدمها؟ عمليات فحص يدوية للتحقق من تثبيت التعليمات البرمجية بشكل صحيح إلى جانب بعض الاختبارات الآلية الأساسية، باستخدام أي أداة أتمتة.استخدمنا السيلينيوم IDE.

  • من يفعل ذلك؟ يقوم DBA بإجراء ترقيات قاعدة البيانات، ويقوم مسؤولو الدعم الفني/النظام بدفع/سحب الخوادم وتثبيت التعليمات البرمجية، ويقوم ضمان الجودة أو دعم الإنتاج بإجراء الاختبارات اليدوية و/أو تشغيل الاختبارات الآلية.

  • هل يتم منع الدخول إلى الموقع خلال فترة الاختبار؟ إذا أمكن، يجب تجنب ذلك بأي ثمن، خاصة كما ذكر جيلز سابقًا، إذا كان موقعًا مدفوع الأجر.

  • ما مقدار التوقف المقبول؟ يجب أن يقتصر وقت التوقف عن العمل على الأوقات التي يكون فيها احتمال استخدام المستخدمين للموقع أقل، ويجب أن يتم ذلك في أقل من 3 ساعات.
    ملحوظة: 3 ساعات سخية جدا.بعد التدريب والتمرين، كما ذكر jplindstrom، سينتهي الفريق من العملية برمتها ويمكنه الدخول والخروج في أقل من ساعة في بعض الأحيان.

أتمنى أن يساعدك هذا!

يعتمد بعض ذلك على ما إذا كنت تقوم بتحديث قاعدة البيانات أيضًا.في الماضي، إذا كان يتم تحديث قاعدة البيانات، فقد قمنا بإسقاط الموقع لفترة صيانة مخططة (ومنشورة) - عادةً ما يكون ذلك خارج ساعات العمل حيث يكون التأثير في حده الأدنى.إذا لم يتضمن التحديث قاعدة البيانات، ففي بيئة متوازنة التحميل، فسنأخذ مربعًا واحدًا من المزيج وننشره ونختبره.إذا كان ذلك ناجحًا، فقد تم إدخاله في المزيج وتم إخراج الصندوق الآخر (بافتراض وجود صندوقين) وتحديثه/اختباره.

ملحوظة:نحن لا نختبر الكود، ولكن عملية النشر تمت بسلاسة، لذلك كان وقت التوقف عن العمل في حده الأدنى بأي حال من الأحوال.كما ذكرنا سابقًا، يجب أن يكون الكود قد اجتاز الاختبار بالفعل في بيئة أخرى.

فترات التوقف الطويلة لـ IMHO (ساعات) مقبولة للموقع المجاني.إذا قمت بتثقيف المستخدمين بشكل كافٍ فسوف يفهمون أن ذلك ضرورة.ربما أعطهم شيئًا ليلعبوا به حتى يعود موقع الويب مرة أخرى (على سبيل المثال.لعبة فلاش، بث مباشر لكاميرا الويب يُظهر فريق التطوير في العمل، وما إلى ذلك).بالنسبة لموقع ويب يدفع الأشخاص مقابل الوصول إليه، سيضيع الكثير من الأشخاص وقتك في تقديم الشكاوى إذا أطعمتهم فترات توقف منتظمة.سأتجنب التوقف عن العمل مثل الطاعون وأقوم بنشر التحديثات ببطء شديد وبعناية إذا كنت أقوم بتشغيل خدمة تفرض رسومًا على المستخدمين.

في الإعداد الحالي، لدي موقع ويب ثانوي متصل بنفس قاعدة البيانات وذاكرة التخزين المؤقت مثل النسخة المباشرة لاختبار تغييراتي.

لدي أيضًا العديد من البرامج النصية "لمراقبة الصفحة" التي تعمل على وظائف cron التي تستخدم التعبيرات العادية للتحقق من أن موقع الويب يعرض الصفحات الرئيسية بشكل صحيح.

والجواب هو أن ذلك يعتمد".بادئ ذي بدء، فيما يتعلق بنوع البيئة التي تنطلق فيها.هل هو موقع ويب من النوع "hello, World" على مضيف مشترك في مكان ما، أم موقع google.com به نصف مليون خادم؟هل يوجد عادةً مستخدم واحد يوميًا، أو أكثر من مليونين؟هل تنشر HTML/CSS/JPG، أم أن هناك واجهة خلفية كبيرة الحجم تحتوي على خوادم SQL، وخوادم الطبقة المتوسطة، وذاكرة التخزين المؤقت الموزعة، وما إلى ذلك؟

بشكل عام - إذا كنت تستطيع توفير بيئات منفصلة للتطوير، وضمان الجودة، والتدريج، والإنتاج - فافعل ذلك.إذا كانت لديك الموارد - قم بإنشاء النظام البيئي بحيث يمكنك إنشاء الحزمة الكاملة القابلة للتثبيت بنقرة واحدة (واحدة).وتأكد من ذلك نفس الشيء يمكن تثبيت التثبيت الثنائي بنجاح في DEV/QA/STAGE/PROD بنقرة واحدة أخرى...هناك الكثير من الأشياء المكتوبة حول هذا الموضوع، ويجب أن تكون أكثر تحديدًا في سؤالك للحصول على إجابة معقولة

قم بتشغيل الخادم الرئيسي الخاص بك على منفذ آخر غير 80.عصا خادم خفيف الوزن (على سبيل المثال.nginx) أمامه على المنفذ 80.عندما تقوم بتحديث موقعك، ابدأ مثيلًا آخر على منفذ جديد.امتحان.عندما تقتنع بأنه قد تم نشره بشكل صحيح، قم بتحرير ملف تكوين الوكيل الخاص بك، ثم أعد تشغيله.في حالة nginx، يؤدي هذا إلى عدم توقف العمل أو الطلبات الفاشلة، ويمكن أن يوفر أيضًا تحسينات في الأداء عبر خيار استضافة Apache فقط الأكثر نموذجية.

بالطبع، هذا ليس بديلاً عن خادم مرحلي مناسب، فهو مجرد طريقة "مهذبة" لإجراء عملية التسليم بموارد محدودة.

لاختبار كل شيء قدر الإمكان على موقع dev منفصل قبل الذهاب مباشرة ، أستخدم السيلينيوم (اختبار صفحة الويب) لتشغيل جميع الأجزاء القابلة للملاحة في الموقع ، وملء القيم الوهمية إلى نماذج الأماكن نتيجة لذلك ، إلخ.

إنها قوية بما يكفي للتحقق من الكثير من جافا سكريبت أو الأشياء الديناميكية أيضًا.

بعد ذلك ، يتحقق الجري السريع مع السيلينيوم مرة أخرى بعد ترقية الموقع المباشر من أن التحديث يعمل وأنه لا توجد روابط مفقودة أو أخطاء قاعدة البيانات.

لقد أنقذني عدة مرات من خلال اصطياد أخطاء خفية كنت سأفتقدها فقط.

أيضًا ، إذا وضعت الموقع المباشر خلف نوع من "الوكيل العكسي" أو موازن التحميل (إذا كان كبيرًا) ، فإن ذلك يجعل من السهل العودة إلى الإصدار السابق إذا كانت هناك مشاكل.

الطريقة الوحيدة لجعلها شفافة للمستخدمين هي وضعها خلف وكيل متوازن التحميل.يمكنك إزالة خادم واحد أثناء تحديث خادم آخر.وبعد ذلك، عند الانتهاء من التحديث، تقوم بوضع التحديث الذي قمت بتحديثه عبر الإنترنت وإزالة الآخر.هذه كيف نقوم بها.

إذا كان لديك أي نوع من الإصدار "التجريبي"، فلا تقم بطرحه على الخادم المباشر.إذا كان لديك موقع "مباشر ومزدحم"، فمن المحتمل أن يقوم الأشخاص بقصفه وكسر شيء ما.

يعد هذا إعدادًا نموذجيًا عالي التوفر، وللحفاظ على التوفر العالي، ستحتاج إلى 3 خوادم على الأقل.2 منها حية و1 خادم اختبار.بالإضافة إلى أي خوادم إضافية أخرى إذا كنت تريد الحصول على قاعدة بيانات مخصصة أو شيء من هذا القبيل.

قم بإنشاء فئة مضيفة ونشر موقعك المباشر على تلك الفئة المضيفة.أعني بفئة المضيف مجموعة من المضيفين حيث يتم إعداد موازنة التحميل ومن السهل إضافة وإزالة المضيفين من الفصل.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top