المعلوماتية > اتصالات وشبكات

الشبكات المبرمجة Network As Code

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

إنّ مفهومات الأتمتة هذه التي عرفناها بأسماء Net DevOps أو (Network As Code (NAC هي مستقبل العمل لمهندسي الشبكات، وسنتكلم عنها في هذا المقال.

إن للحوسبة السحابية ولمسمّى التطوير والعمليات (DevOps) أثرًا واضحًا في أي مجال كنتَ تعمل فيه من مجالات تقنية المعلومات؛ إذ دفعت الفوائد الكبيرة لاستخدام العمليات الرشيقة (Agile processes) والأتمتة مجالاتِ البنية التحتية للتطور وتبنّي هذه التقنيات في عملها، لتتحول عملية إعداد الأنظمة والشبكات من الشكل اليدوي إلى الشكل الآلي المبرمَج.

البنية التحتية المبرمجة (infrastructure as code) هي الاسم الذي يطلق على التقنيات المستخدمة لوصف عقد الحوسبة وتجهيزها، والتخزين، والشبكات، وغيرها من الموارد بوصفها جزءًا من عملية نشر التطبيقات على منصات الحوسبة السحابية؛ إذ يمكن للمطورين -بالاعتماد على مفهومات البنية التحتية المبرمجة (Infrastructure as Code (IAC- أن يضمّنوا متطلبات العتاد الخاصة بالتطبيقات جنبًا إلى جنب مع الشيفرة البرمجية للتطبيق ضمن مستودعات التحكم (Control Repositories)، وترسل أدواتُ نشر البنية التحتية المتطلبات بصيغة سهلة المعالجة. (1)(2)

ومن أشهر أدوات نشر البنية التحتية المتعددة المنصات أداةٌ تسمّى "Terraform" التي تعمل كالآتي:

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

يُعدّ مفهوم البنية التحتية المبرمجة (Infrastructure As Code (IAC السبيلَ لتغيير كيفية إنجاز مهندسي الشبكات لأعمالهم وتطويرها، فقد ظهر مفهوم الشبكات المبرمجة (Network As Code) -الذي يُعدّ تخصيصًا لمفهومات IAC- في مجال محدد هو الشبكات.

يسمح مفهوم NAC لمهندسي الشبكات بإنشاء قوالب من الإعدادات على هيئة شيفرة برمجية، وعند الحاجة إلى تطبيق هذه الإعدادات على جهاز شبكي ما؛ تُنقَل إلى الجهاز المطلوب بواسطة واجهات برمجة تطبيقات Application programming interfaces (APIs) على نحو آلي؛ مما يوفر الوقت والجهد ويسمح بتنفيذ الأعمال المرتبطة بتكرار التجهيزات (Redundancy) وموازنة الحمل بسرعة وفعالية كبيرتين. (1)(2)

أساسيات البنية التحتية المبرمجة في شبكات NAC:

إذا كنا سنلجأ إلى اعتماد منهجية NAC، فيجب علينا التعامل مع إعدادات الشبكة على أنها شيفرات برمجية تُخزَّن في مركز تحكم؛ أي إنشاء قوالب للإعدادات الخاصة بالتجهيزات الشبكية وتخزينها لتُستعمَل عند الحاجة إلى ضبط إعدادات جهاز ما، كذلك يجب استعمال نظام تحكم بالنُسخ؛ مما يضمن لنا متابعةً فعالةً للتغيرات التي تحدث على الملفات ضمن مستودعات الشيفرات البرمجية Code Repositories، ومن ثم تسهيل عمل المطوّرين.

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

وباعتماد هذه الطريقة فإننا نستغني عن الطرائق التقليدية المُعتمِدة على إعطاء اسم جديد للملفات بعد كل تعديل -مثل switch1_v1.txt، وswitch1_v2,txt، والخ- والتي تعد طرائقَ غير دقيقة ومعرّضة للخطأ، ونحصل بالمقابل على طريقة فعالة تمكّننا من معرفة الزمن الذي حدث فيه كل تعديل، ومَن المطوِّر الذي أجرى التعديل، فضلًا عن إمكانية الرجوع إلى أية نسخة سابقة.

وإضافة إلى نظام التحكم بالنسخ مثل git، توجد منصات تُقدّم وصولَ مشترك للمطورين ضمن الفريق إلى المستودعات؛ إذ توفر منصات مثل GitHub، وGitLab، وBitBucket، وGogs تطبيقًا لنظام التحكم بالنُسخ مع منصة تشارك بين المطورين على الويب.

كذلك تقدّم هذه المنصات -إضافة إلى الخدمات السابقة- بعضَ ميزات التعاون بين المطورين؛ مثل تسجيل المشكلات، وتتبع الإصدارات، والتوثيق، وواجهات إدارة المشاريع؛ ما يعني أنّ فِرَق الـ 

(NetDevOps (Network DevOPS أصبح بإمكانها أداء أعمالها على هذه المنصات كما تفعل فرق تطوير البرمجيات. (1)(2)

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

وأما فيما يخص الشبكات، فتُنشَأ شبكة افتراضية مماثلة للشبكة الحقيقية وتُختبَر الإعدادات ضمنها، وبعد التأكد منها تُخزَّن في مركز التحكم وتُطبَّق على الشبكة الحقيقية.

يُستفاد من هذه العملية في تزويد صنّاع القرار -كفِرق التطوير وفِرق الاختبار- بالمعلومات اللازمة في الوقت المناسب، إضافة إلى توفير الوقت والجهد عند توسيع الشبكة الحالية أو تكرارها في مكان آخر.

إنّ أغلب المؤسسات حاليًّا لا تملك منصات تمكّنها من إنشاء شبكات اختبار افتراضية واختبار تطبيقاتها ضمنها، ويُعتمَد غالبًا على المحاكيات وبعض حلول السحابة لإتمام هذه العمليات، ولكن؛ من المتوقع أنّ تبنّي تقنيات الشبكات المبرمجة وتطويرها سيقدم حلًّا لهذه المشكلات، ويسمح للمؤسسة باختيار أي جزء من شبكتها وبناء شبكة افتراضية مماثلة له وتطبيق الاختبارات ضمنه بسرعة وكفاءة كبيرتين. (1)(2)

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

هناك العديد من الأسباب التي تجعل هذا المبدأ من مبادئ البنية التحتية المبرمجة في الشبكات مهمًّا جدًّا، وتعود هذه الأسباب جميعها إلى إحدى النقطتين الأساسيتين الآتيتين: الأعمال المتشابهة المتكرّرة، والحجم الكبير للأعمال الذي يتطلب دقةً عالية في التنفيذ، فالعقل البشري مميز جدًّا ويميل دومًا إلى الإبداع؛ لكنّه سريع الملل ولا يمكن الاعتماد عليه في التفاصيل الدقيقة، ولحسن الحظ؛ لا تشعر الحواسيب بالملل، فهي تنجز الأعمال المتكررة بالجودة نفسها ودون أخطاء كونها تنفذ عمليات محددة مسبقًا، ومن هنا ظهرت الحاجة إلى إزاحة المَهمات المكرّرة -التي تحتاج إلى دقة في العمل- عن كاهل المهندس أو المطور وجعل الحاسب ينجزها بدلًا عنه، فينتقل المهندس من استعمال موجه الأوامر لضبط الإعدادات يدويًّا إلى استعمال واجهات برمجة تطبيقات مثل NETCONF وRESTCONF أو واجهات برمجة التطبيقات للنظام الأساسي الأصلي.

إنّ معظم البنى التحتية لا تدعم -حتى الآن- واجهات برمجة تطبيقات جديدة، ولكن؛ لا يجب أن يمنعنا هذا الأمر من تبنّي مفهومات البنية التحتية المبرمجة، فيمكننا مبدئيًّا الاعتماد على موجه الأوامر CLI بوصفه واجهة برمجة تطبيقات، ومع تطوير البنية التحتية يمكننا تطوير أساليب نشر الإعدادات والتطبيقات.

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

المصادر: 

1- هنا

2- هنا

3- هنا