مقدمة مختصره عن منهجية الـDevOps
لكي نفهم بشكل مبسط منهجية الـDevOps , سنأخذ هذا المثال التالي: فارس وعزام زملاء عمل ويعملون على مشروع برمجي لبناء روبوت. فارس يصنع روبوت في المعمل الخاص به وهذا الروبوت يتحكم بمعدل درجة حرارة الجو في الغرفة. اذا انتهى فارس من عمل الروبوت وبرمجته, سيذهب بالمنتج إلى زميله في المشروع, عزام. عزام سيأخذ الروبوت إلى حديقة المنزل الخاص به ويتأكد بأن الروبوت يحقق جميع المتطلبات ومن أهمها معدل درجة الحرار في “الغرفة”. لكن هنا سيتفاجأ عزام بأداء مختلف من الروبوت وذلك بسبب تغيير البيئة التي يعمل بها الروبوت. هنا عزام سيكون منزعج تماما من فعل فارس؟! وفيما يبدو لدى عزام بأن فارس لم يقم بالعمل كما يبدو الاتفاق عليه في المتطلبات (Requirements). عدم التواصل فيما بين عزام وفارس سبب لهذه المشكله. ماذا لو ان عزام وفارس عملوا مع بعض في برمجة الروبوت, بحيث ان فارس يقوم بعمل الأكاود البرمجية التي تنفذ الوظائف المخصصة لعمل الروبوت وفي نفس اللحظة عزام يقوم بالتأكد بأن فارس نفذ الأكاود كما هو متفق عليه بالتطبيق العملي لأداء الروبوت. كلا منهما يعمل على المهام المسندة له وبدون حاجز فيما بينهم, يتشاركون الأفكار ويتعاونون على حل المشكلات لكي يتحقق الجميع بأن الروبوت يتم برمجته بالشكل الصحيح!
ولكي يتم تسريع العمل على انجاز المشروع, بإمكان عزام وفارس استخدام مجموعه من البرامج التي تقوم بأتمتة (Automate) العمل في كل مرحلة من مراحل بناء الروبوت. هذا يساعد بان الروبوت سيكون جاهز في وقت اقصر, واقل عدد من التكرار لبعض الأعمال وكذألك أتمتة العمليات فيما بينهم.
فإذا نظرنا إلى عزام وفارس من منظور شركة تطوير برمجيات: فإنا فارس هو المطور (Developer) وعزام هو العمليات (Operations) اتحادهم مع بعضهم البعض في العملية التطويرية للمنتجات البرمجية هو الأساس في منهجية الـDevOps. منهجية الـDevOps هي اختصار للكلمتين Development وOperations . هذه المنهجية لديها عدة مراحل, ومجموعه من الأدوات لأتمتة كل مرحله من تلك المراحل. لنأخذ نظره مختصره لتلك المراحل والأدوات لكل مرحله.
فارس كمطور يضع الخطة (Plan) لبرمجة الروبوت, فبالتالي يضع التصميم المناسب والخوارزمية التي سيتبعها. في حال اكتمال الخطة لدى فارس, ينتقل لمرحلة البرمجة (Code) ومن الأدوات التي يستطيع استخدامها في هذه المرحلة مثلا أداة الـGit التي تتيح له التحكم في تتبع الكود منذ بداية كتابته حتى الانتهاء منه ومن ثم يصنع مخزن (Repository) على منصة الـ GitHub على سبيل المثال لحفظ الأكواد وادارتها بشكل اوتوماتيكي وبالتالي يصبح لديه إصدارات (versions) مختلفة من الأكاود التي عمل ويعمل عليها. المرحلة التالية, يستخدم فارس أدوات مثل Maven أو gradle لبناء الأكواد وجعلها على صيغة التنفيذ (Build) وبعد ذلك وقبل النشر, يقوم فارس باختبار (Test) المنتج الذي عمل عليه لكي يكتشف أي خطاء محتمل ومن الأدوات التي يستطيع استخدامها في هذه المرحلة مثلا Selenium التي تتيح إمكانية عمل Tests بشكل اتوماتيك واكتشاف الأخطاء المنطقية والبرمجية في البرنامج. عندما يتم تجاوز هذه المرحلة ويكون المنتج تم اختباره والتأكد من خلوه من المشاكل البرمجية. يأتي عزام في هذه المرحلة ويقوم بعمل الـDeployment. في هذه المرحلة, عزام يقوم بعمل deploy للمنتج وفي نفس اللحظة يعمل configuration للعمليات (operations) او تهيئة المنتج على حسب البيئة التي سيعمل عليها المنتج. ومن الأدوات التي قد تساعد عزام في هذه المرحلتين وتقوم بأتمتة العمل فيها أدوات مثل Ansible او puppet او Docker. أخيرا كل منتج يكون بشكل مستمر مراقب (Monitor) في البيئة التي يعمل بها وNagios كمثال من الأدوات التي تستخدم في مثل هذه المرحلة, والنتائج لمراقبة عمل المنتج ترسل كـfeedback لمرحلة الـPlan التي انشأها عزام في بداية تطوير المنتج. أخيرا, المرحلة الأخيرة والتي تشكل حلقة الوصل بين مراحل تطوير المنتج في منهجية الـDevOps المتبعه من قبل فارس وعزام هي مرحلة الـIntegration. ومن الأدوات المستخدمة في هذه المرحلة مثلا Jenkins وهي مسؤوله في ارسال الأكواد من مرحلة البناء و الاختبار واذا تم الاختبار بشكل الصحيح تقوم بإرسال الجزئية المجتازة للاختبار إلى مرحلة الـDeployment وهذه تسمى Continues Integration او ما يعرف بالدمج المستمر. أي انه أي جزئية يقوم عزام ببنائها واختبارها يتم دمجها بشكل اتوماتيكي في مرحلة الـDeployment لدى عزام, مما يتيح لعزام سرعة اكتشاف المشاكل في بيئة الـ operation ومن ثم سرعة إصلاحها من قل فارس.
الصورة التالية توضيح جميع الخطوات اللتي تحقق مفهوم منهجية الـDevOps المتبعه بين فارس وعزام.
كبرى الشركات العالمية مثل Netflix, Amazon قامت بتطبيق هذه المنهجية (DevOps) مما زاد حجم إيصال المنتجات بشكل اسرع, وبجودة عالية.
على سبيل المثال وفي عام 2012, واجهت Netflix انقطاعا حزئيا في خدمتها استمرت عدة ساعات. وذلك بسبب ناجما عن خطا في خدمات امازون السحابية Amazon Web Services (AWS). وفي عام 2014, قدر بأن ساعة توقف عن العمل لموقع Nefflix قد يكلف الشركة 200,000$. لهذا السبب، قامت Netflix باستخدام منهجية الـDevOps بحيث قاموا بتطوير أداة تسمى SIMIAN ARMY. وهذه الأداة تقوم بشكل اتوماتيكي بإنشاء مشاكل برمجيه ودمجها وعمل deploy لها في بيئة لا تؤثر على المستخدم لخدمات Netflix مما يتيح لفريق التطوير في Netflix بعمل troubleshoot للمشاكل التي صنعتها الأداة والعمل على إصلاح العيوب التي قد تحدث مستقبلا للمستخدمين, وكل هذه الأعمال تتم بشكل اتوماتيكي ومتزامن ممايساعد Netflix على إيصال الخدمه لمستخدميها بشكل سريع وخالي من العيوب الفنيه وبجوده عاليه.
أخيرا, مراعاة للفوائد التي ذكرناها عن منهجية الـ DevOps واختلافها عن الطرق التقليدية لتطوير البرمجيات هل ستكون هذه المنهجية هي المستقبل في تطوير البرمجيات خصوصا للشركات الناشئة؟