لقد قمنا بتقليل وقت عملية النشر في بيئات متعددة إلى النصف باستخدام تقنية Docker، وبالإضافة إلى ذلك، وفرنا وظيفتين للصيانة لفريق مكون من 10 أشخاص.
في الشهر الماضي ، كاد فريق التجارة الإلكترونية SaaS في سنغافورة أن ينهار - قبل تحديث وظيفة مزامنة المخزون لثلاثة مواقع في جنوب شرق آسيا ، تم اختبارها محليًا جيدًا ، بمجرد دفع الخادم السحابي إلى إندونيسيا ، فقد تم الإبلاغ عن الاعتماد الجماعي ، واستغرق الأمر 18 ساعة من الخلفية والصيانة ، مما أدى إلى تأخير خطة اختبار الإجهاد لمدة 3 أيام.
أولاً، دعونا نفهم ما هو نشر Docker بشكل أساسي:
ببساطة، يعني أنك تقوم بتجميع كود تطبيقك، ومكتبات الاعتماد عليها، وملفات الإعدادات، بل وحتى معلمات نواة نظام التشغيل، في صورة “مرآة حاوية” قياسية. بغض النظر عن كيف يعمل التطبيق على جهازك المحلي، فإنه سيعمل بنفس الطريقة عند تشغيله على أي خادم مزود بمحرك Docker.الحد الأدنى من المرآة الفردية التي يمكن أن تفعل 20MB ، لا يتجاوز وقت التشغيل 1 ثانية。
لقد استخدمنا الأرباح الحقيقية التي حققناها على مدار 3 أشهر.

أولاً، يتم حل مشكلة عدم الاتساق البيئي بشكل كامل.قبل مجرد إصدار مختلف Node.js لكل موقع ، وسائق قاعدة البيانات يستغرق نصف يوم ، والآن يتم نقل صورة المرآة المعبأة مباشرة إلى مستودع المرآة ، ثلاثة مواقع بنقرة واحدة لبدء التشغيل ، واستغرق وقت النشر من متوسط 4 ساعات إلى 24 دقيقة ، قبل تحديث الإصدارات الكبيرة لا تحتاج إلى قضاء الليل.
وتضاعف معدل استخدام موارد الخادم بشكل مباشر.في السابق ، استأجرنا كل موقع خادم سحابي من النواة 2 4G بشكل منفصل ، واستخدام وحدة المعالجة المركزية في وقت الخمول أقل من 10٪ ، والآن باستخدام Docker لتطبيقات المواقع الثلاثة ، وذاكرة التخزين المؤقت ، ومهام التوقيت إلى خادم من النواة 4 8G ، والموارد كافية فقط ،تم توفير مبلغ 620 دولارًا شهريًا مباشرة في تكاليف الخادم.بالنسبة لفريق صغير يضم أقل من 10 أشخاص، هذا ليس مبلغًا صغيرًا.
وأخيرًا، سرعة التوسعة تتماشى تمامًا مع الزيادة المفاجئة في الطلب على الخدمة. العام الماضي، خلال عطلة الجمعة السوداء، استغرقت عملية إضافة الخوادم ما يقرب من ساعتين لتهيئة البيئة بشكل صحيح، أما هذا العام، فقد تم تشغيل 12 نسخة من الخوادم قبل 10 دقائق من ذروة الطلب، وتمكنت من تحمل ثلاثة أضعاف الحجم العادي من الطلبات دون أي تأخير في الاستجابة للطلبات.
لا تتعجل في الصعود إلى السيارة، لقد قمنا بالفعل بتجنب تلك الحفر والعقبات لك.

كانت الحفرة الأولى متضخمة جدا للكتابة في المرآة.في البداية ، قمنا مباشرة بتعبئة صورة كاملة الوظائف من Node.js الرسمية ، وهناك 1.2G من صورة التطبيق ، وينقل إلى مستودع المرآة في الخارج لأكثر من 20 دقيقة ، وبعد ذلك قمنا بتبديل صورة أساسية Alpine ، وإزالة جميع الاعتمادات غير المفيدة ، والمرآة النهائية هي 90MB فقط ، وسرعة النقل أسرع 10 مرات.
الحفرة الثانية هي البيانات الموجودة في حاويات.في البداية ، لم نلاحظ أن صور السلع التي قام بتحميل المستخدم مباشرة في الدليل المحلي للحاوية ، وبعد ذلك تم إعادة تشغيل الحاوية مرة واحدة ، فقدت جميع الصور ، واستغرق يومًا لاستردادها من النسخة الاحتياطية ، وبعد ذلك تم تثبيت جميع البيانات الدائمة في الدليل المحلي للخادم أو تخزين الكائن ، ولم تحدث أي مشكلة مرة أخرى.
الثالث هو عدم قيود الموارد.في البداية على الإنترنت لم يتم تعيين الحد الأقصى لوحدة المعالجة المركزية والذاكرة للحاويات ، وكان هناك خطأ في مهمة توقيت موقع واحد ، مما أدى إلى تعليق موقعين آخرين ، وفي وقت لاحق تم تعيين الحد الأقصى للموارد لكل حاوية ، حتى لو كان هناك مشكلة في خدمة واحدة لن تؤثر على العالم.
هل يجب استخدام Docker أم لا؟ معاييرنا للحكم بسيطة جدًا.
الحالات التي يمكن استخدامه فيها: عندما تحتاج إلى نشر نفس التطبيق على عدة خوادم، أو عندما تقوم بتغيير بيئات التطوير/الاختبار/الإنتاج بشكل متكرر، أو عندما يتجاوز حجم الفريق ثلاثة أشخاص ولكل شخص بيئة تطوير مختلفة، فإن استخدام Docker سيساعد فقط على تحسين الكفاءة.
الحالات التي لا يجب فيها استخدام Docker: إذا كان لديك مدونة صغيرة جدًا، وتعمل على خادم واحد فقط، ولا تقوم بتحديث الكود إلا مرة كل نصف عام، فلا حاجة على الإطلاق لقضاء الوقت في تعلم Docker. من الأسهل بكثير استخدام أداة مثل Baota أو القيام بالتثبيت يدويًا.
ثلاث نصائح محددة للمبتدئين

- الطريقة الأفضل للمرات الثلاث الأولى لحزم الصور (images) هي البحث مباشرة عن القوالب الرسمية الموصى بها، وعدم كتابة ملف Dockerfile بنفسك. بهذه الطريقة، يمكنك تجنب ما يقرب من 80% من مشاكل تضخم الصور وأخطاء الصلاحيات.
- في البداية، لا داعي لاستخدام أدوات التنسيق المعقدة مثل K8s؛ يمكنك بسهولة إدارة ما يصل إلى 3 خدمات باستخدام Docker Compose، وهو أمر كافٍ تمامًا.
- يمكنك استخدام عقد الخوادم الخارجية الخاصة بمزودي الخدمات السحابية لمستودعات الصور، بدلاً من بنائها بنفسك. الوقت الذي توفره سيكون كافيًا لتطوير عدة ميزات إضافية.
الأسئلة الشائعة الصغيرة والإجابات الموحدة
س: هل يستهلك Docker الكثير من أداء الخادم بشكل إضافي؟ لقد قمنا بالاختبار، ووجدنا أن فقدان الأداء أقل من 5٪، وهو أمر لا يمكن لمعظم الفرق الصغيرة والمتوسطة أن تلاحظه على الإطلاق.
س: هل يمكن نقل التطبيقات القديمة إلى Docker؟ بالطبع يمكن ذلك، لدينا مشروع PHP قديم يعمل منذ 3 سنوات، وقد استغرق الأمر يومين فقط لإنشاء الصورة الاستراتيجية (image) ونقله، وهو أسرع بكثير من إعادة إعداد البيئة من الصفر.
هل كان هذا مفيدًا؟