أساسيات التعامل مع الخوادم وكيف يمكنك إستخدامها


مُنذ عام 1992 – انتشار الويب لأول مرّة – وحتى العام 2005 تقريبًا، أخذت المواقع والتقنيات التي تقف خلفها شكلًا واحد لا يختلف كثيرًا. ففي ذلك الوقت كانت مُعظم الواقع تتألف من مُحتوى ثابت يتغيّر بين الفترة والثانية من قبل مُدير الخادم، وبالتالي لم تكن هُناك حاجة كبيرة للكثير من التقنيات.

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

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

تاريخ الخودام

في عام 1995 ظهرت خوادم أباتشي Apache لأول مرّة حينما كانت شبكة الويب في بداياتها، وكما ذكرنا سابقًا فإن الطلبات على المواقع لم تكن كثيرة وبالتالي كانت هذه الخوادم تؤدي الوظيفة المطلوبة دون مشاكل.

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

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

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

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

الفرق بين أباتشي و nginx

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

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

في nginx الوضع مُختلف، فهو يعمل بمبدأ المهام الغير مُتزامنة، وبالتالي يُمكن تشغيل أكتر من مهمّة في نفس الوقت، وكل مهمّة بإمكانها مُعالجة أكثر من طلب في نفس الوقت.

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

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

يُمكن تشبيه Node.js بتطبيق جافا الافتراضي JVM الخاص بلغة جافا، والذي يقوم بترجمة ملفات جافا بعدما يقوم الخادم بتحويل الطلبات إليها.

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

لغة ASP.NET من لغات برمجة الويب أيضًا، وهي مدعومة من مايكروسوفت عبر إطار عمل .NET الشهير، لكن خوادم أباتشي أو nginx لا تقوم بتفسيرها، وبالتالي يجب استخدام خوادم مايكروسوفت الخاصّة التي تُعرف باسم IIS. 

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

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

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