محمد أحمد العيل

الأعضاء
  • المساهمات

    286
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • Days Won

    27

السُّمعة بالموقع

134 Excellent

المعلومات الشخصية

  • النبذة الشخصية مهندس نظم معلومات، أكتب في مدونتي (تلميحات تقنية) عن البرامج الحرة ومفتوحة المصدر. لدي خبرة في التطوير بلغة جافا وإدارة قواعد بيانات MySQL و Oracle، إضافة إلى إدارة أنظمة لينوكس (دبيان ومشتقاتها).
  1. icnd1/ccent 100-101

    نأتي في هذا الدرس، بعد أن تطرّقنا في دروس سابقة إلى مبادئ عمل OSPF، نأتي إلى طريقة ضبط البروتوكول للعمل على موجِّهات Cisco. سنعمل خلال هذا الدرس على مُخطَّط شبكة ذات منطقة واحدة، وبموجهيْن كما في الصورة التوضيحية التالية. تتكون الشبكة من موجه موجود في المقر الرئيس (Headquarter أو HQ) وآخر يوجد في فرع (Branch) يتصلان بشبكة نريد تفعيل بروتوكول OSPF عليها. إعداد بروتوكول OSPF على موجه الفرع نبدأ بتفعيل وضع الإدارة (enable) ثم ندخل إلى وضع الضبط العام (config t)، ثم نستخدم الأمر router لضبط إعدادات بروتوكول التوجيه، أي OSPF. Branch(config)# router ospf 1 Branch(config-router)# network 10.0.0.0 0.255.255.255 area 0 معرّف العملية في OSPF نمرِّر للأمر router معطى بالبروتوكول الذي نريد ضبطه (ospf) متبوعًا بعدد (‎1) يمثل معرّف العملية (Process ID)، وهو معرّف مختلف عن معرّف الموجّه (Router ID) الذي تحدثنا عنه في الدرس السابق. يمكِّن معرّف العملية من تشغيل عمليّات OSPF عدّة على الموجّه نفسه. من المهم الانتباه إلى أنه لا يُلجَأ لتشغيل عمليّات OSPF مختلفة على الموجّه نفسه إلا في حالات خاصة، مثلًا عندما يريد مزوِّد خدمة الفصل بين توجيه البيانات القادمة من شركاء مختلفين. لا يُنصَح في الحالات العادية باستخدام عمليّات OSPF عدّة على الموجّه. احرص على التأكد من استخدام معرّف العمليّة المناسب، وإلا فقد يحصل خلط بين العمليّات يؤدّي إلى التشويش على الضبط. استخدمنا العدد 1 لمعرّف عمليّة OSPF في الأمثلة السابقة. ننتقل بعد تنفيذ الأمر router ospf إلى وضع إعداد البروتوكول حيث ننفّذ الأمر network، وهو أمر مهمّ في ضبط إعدادات بروتوكول التوجيه. قد يبدو للوهلة الأولى أن مهمة الأمر هي الإعلان عن الشبكات المتصلة بالموجّه، إلا أن ذلك غير دقيق. تتمثّل مهمة الأمر network في تفعيل عمليّة التوجيه على بطاقات الشبكة (Interfaces). يخبر الأمر network الموجّه أن بروتوكول OSPF يعمل على البطاقة المُحدَّدة. يعني إدراج بطاقة شبكة ضمن عمليّة OSPF أننا بصدد إدراجها ضمن النظام المستقل (Autonomous system) الخاصّ بعملية OSPF المذكورة. ينبغي أن تكون الإستراتيجية المبدئيّة هي تضمين جميع بطاقات الشبكة النشطة (الحالة up/up) التي لديها عنوان IP ضمن مجال التوجيه. يمكن أن تُستثنى بعضٌ من البطاقات في حالات خاصّة مثل الاتصال بشبكة خارجية - شريك تجاري أو شبكة للاختبار مثلًا - لا ترغب في تضمينها ضمن النظام المستقل. المشكل في الأمر هنا هو أنّنا لا نرى أي دور لبطاقات الشبكة عندما ننظر إلى صيغة الأمر network في الأمثلة السابقة. قناع محرف البدل (Wildcard mask) لا تظهر للوهلة الأولى علاقة البطاقات بالأمر، إلّا أن العلاقة تكمن في عنوان IP والقناع الذي يليه في الأمر، والذي يُسمَّى قناع محرف البدل. يعمل قناع مِحرف البدل كمحدِّد لمجال عناوين ويشبه قناع الشبكة في طريقة كتابته، إلّا أن البتات في محرف البدل تؤدّي دورًا معاكسًا لدورها في أقنعة الشبكة. يدلّ البت 0 في قناع محرف البدل أنّ البت المقابل من عنوان IP يجب أن يكون مطابقًا، في حين يدلّ البت 1 أنه لا حاجة للمطابقة (لا ننسى أن 255 في الكتابة العشرية لعناوين IP تحلّ محل 11111111 في الكتابة بالنظام الثنائي). إذا كان لدينا مثلًا العنوان 192.168.2.0 وقناع محرف البدل 0.0.0.255 فإن مجال العناوين المطابقة هو الذي يبدأ بالعنوان 192.168.2.0 وينتهي بالعنوان 192.168.2.255. نرى هنا أن المواضع التي تحوي 0 في قناع محرف البدل تبقى ثابتة (192.168.2)، في حين تتغيّر المواضع التي تحوي 1 في قناع محرف البدل. يعمل الأمر network على تضمين بطاقات الشبكة التي توافق العنوان وقناع محرف البدل ضمن عمليّة البروتوكول OSPF. يعني ذلك أنّ الأمر network 10.0.0.0 0.255.255.255 area 0 سيبحث عن بطاقات الشبكة النشطة على الموجّه والتي يقع عنوان IP الخاص بها ضمن المجال الذي يبدأ بالعنوان 10.0.0.0 وينتهي بالعنوان 10.255.255.255. نستنتج من الفقرة أعلاه أن تفعيل عمليّة OSPF على بطاقات الشبكة يتمّ عبر مطابقة عنوانها مع مجال العناوين المحدَّد بالعنوان والقناع المُمرَّريْن للأمر network. إنْ أمعنَّا النظر في إعدادات الموجّه Branch في الصورة التوضيحية أعلاه فسنلاحظ وجود أسماء مُنقَّطة لبطاقات الشبكة، مثلًا Gi0/0.1 وGi0/0.10. تحيل هذه الأسماء إلى بطاقات فرعية، أي أننا أمام شبكات محليّة وهمية (Virtual LAN). تدخل عناوين الشبكات الفرعية المُعدَّة على الموجّه Branch ضمن المجال المُحدَّد في أمر الإعداد network، وهو ما يعني أن الموجّه سيُعلِن عبر بروتوكول OSPF عن تلك الشبكات. الأمر network فعّال جدًّا في ضبط بطاقات الشبكة للعمل ضمن عمليّة OSPF، إلّا أنه قد يتطلب استعمال أقنعة محرف بدل معقَّدة، لاختيار البطاقات المُراد ضمّها للعملية؛ لذا فقد عمدت Cisco إلى توفير طريقة أخرى لتضمين بطاقات الشبكة ضمن عمليّة OSPF. ضبط عملية OSPF على بطاقات الشبكة مباشرة تتمثّل هذه الطريقة في الذهاب مباشرة إلى بطاقة الشبكة وتفعيل العملية عليها. فيما يلي مثال لاستخدام هذه الطريقة على بطاقة الشبكة GigabitEthernet 0/1: Branch(config)# interface GigabitEthernet 0/1 Branch(config-if)# ip ospf 1 area 0 يتلخص تفعيل عمليّة OSPF على بطاقة الشبكة في الدخول إلى وضع ضبط البطاقة عبر الأمر interface ثم الأمر ip ospf لضبط إعدادات بروتوكول OSPF إذ نمرّر له معرّف العمليّة والمنطقة. يُرجَى ملاحظة أن الضبط على مستوى بطاقة الشبكة له الأولوية على الضبط على مستوى الشبكة (الأمر network)، أي أنه إذا كان عنوان بطاقة شبكة يقع ضمن مجال عناوين مُحدَّد بالأمر network وضُبِط باستخدام الأمر ip ospf بعد الدخول إلى وضع ضبط البطاقة، فإنّ هذا الضبط الأخير هو الذي سيُعتمَد. نرى بالنظر في الأمر network في الأمثلة أعلاه أنه لا يكتمل بتمرير عنوان IP والقناع بل يُحدِّد المنطقة (Area) التي تنتمي إليها بطاقة الشبكة، وهي في هذه الحالة المنطقة 0، التي تعرَف بمنطقة العمود الفقري (Backbone area) والتي يجب أن ترتبط بها بقية مناطق OSPF جميعا. إعداد بروتوكول OSPF على موجه المقر الرئيس نطبِّق الأوامر التالية على الموجّه في المقر الرئيس (HQ): HQ(config)# router ospf 1 HQ(config-router)# network 172.16.1.0 0.0.0.255 area 0 HQ(config-router)# network 192.168.1.2 0.0.0.0 area 0 نلاحظ استخدام المعرّف 1 لعمليّة OSPF في الأمر router، ولكن هذا لا يعني أن معرّف العملية يجب أن يطابق معرّف عملية OSPF على الموجّه الآخر (الفرع). يمكن أن نختار المعرّف الذي نريده، ولكن من الأفضل الاستقرار على معرّف واحد حتى لا يحدث خلط وتشويش فنضبط عمليات OSPF عدّة دون الحاجة لذلك. نلاحظ بالانتقال إلى أوامر network أن الأمر الأول يستخدم العنوان 172.16.1.0 مع قناع محرف البدل 0.0.0.255؛ وهو ما يعني أننا نريد تضمين بطاقات الشبكة التي يقع عنوانها في المجال من 172.16.1.0 إلى 172.16.1.255 ضمن نطاق التوجيه، وبالتالي يمكن إرسال رزم ترحيب (Hello packet) واستلامها، وبالتالي إنشاء علاقات جوار بين الموجّهات والشبكات. قناع محرف بدل لعنوان IP مُحدَّد نلاحظ في أمر network الثاني أن قناع محرف البدل يتكون من أصفار فقط (0.0.0.0). لا ننسى أن قناع محرف البدل يعبر عن مجال من عناوين IP، وعندما يتكون من أصفار فقط فهذا يعني أن المطابقة مع عنوان IP يجب أن تكون تامة، أي أن عنوان بداية المجال هو نفسه عنوان نهاية المجال، وبالتالي فمجال العناوين ينحصر في عنوان وحيد فقط، وهذا هو قناع محرف البدل الأكثر تحديدًا. يخبر هذا الأمر عملية OSPF أنه يريد بطاقة الشبكة لديها العنوان 192.168.1.2. تنصح Cisco بتفضيل استخدام الأقنعة الأكثر تحديدًا، أي بمجال عناوين لا يحوي سوى عناوين البطاقة التي نحتاجها. قد يؤدي مجال بعناوين IP أكثر من الحاجة إلى حدوث مفاجآت من قبيل تضمين بطاقة تتصل بشبكة غير جاهزة أو غير مخصصة للعمل في إطار منطقة OSPF، وهو ما يعني صعوبة في تشخيص المشاكل. يؤدي استخدام أقنعة بعناوين محدَّدة إلى تحكم أكثر في عملية OSPF. يجب أن يوافق معرّف المنطقة (Area ID) على بطاقة الشبكة معرّف المنطقة المضبوط على بطاقة الشبكة في الموجّه الآخر حتى ينتميا للمنطقة نفسها. في المثال السابق، وبما أننا نعمل ضمن شبكة وحيدة – العمود الفقري – فإن بطاقات الشبكة تحمل جميعها معرّف المنطقة نفسه (0). ترجمة – وبتصرف – للمقال Configuring Single Area OSPF.
  2. نستخدم في حياتنا اليومية الكثير من الوحدات لقياس المسافة، مثل المتر، والبوصة، والياردة، وغيرها. بالنسبة للشبكات المعلوماتية – وخصوصًا عندما يتعلّق الأمر ببروتوكول OSPF - فإنّ وحدة القياس المستخدَمة هي الكلفة أو التكلفة (Cost). عندما نتحدّث عن وحدة القياس في إطار بروتوكول OSPF فإن المقصود هو التكلفة. تكلفة المسار يحتفظ كلّ موجِّه عامل ببروتوكول OSPF بتكلفة المسارات إلى كلّ واحدة من الوِجهات التي يمكنه الوصول إليها. يعتمد حساب التكلفة مبدئيًّا على سرعة التراسل الشبكي (Bandwidth) المتوفّرة، فإذا كانت السرعة عالية تكون التكلفة أقل، أما إذا كانت السرعة منخفضة فإن التكلفة تصبح أقل؛ أي أن التناسب عكسي. تجمع خوارزمية OSPF تكاليف التراسل عبر جميع الروابط في مسار معيَّن للحصول على التكلفة النهائية للمسار، ثم يوازن بين تكاليف المسارات لاختيار الأقل تكلفة. تُحسَب التكلفة انطلاقًا من ما يُعرَف بالتراسل الشبكي المرجعي (Reference bandwidth)، الذي تساوي قيمته المبدئية 100‎ Mbps (بطاقة Fast Ethernet). تُقسَّم قيمة سرعة التراسل الشبكي بالنسبة لرابط معيَّن على القيمة المرجعية الآنفة الذكر للحصول على تكلفة الرابط؛ أي أن تكلفة رابط بسرعة 100‎ Mbps تبلغ 1. يجب الانتباه إلى أن القيمة 1 هي أدنى قيمة للتكلفة بالنسبة لبروتوكول OSPF، كما أن القيمة عدد صحيح دائمًا، بمعنى أنها لا تحوي أي فاصلة. يعني ذلك أننا أمام إشكالية بالنسبة للروابط التي تزيد سرعتها عن 100‎ Mbps، فسرعات مثل 10‎ Gbps و40‎ Gbps تفوق كثيرًا 100‎ Mbps، إلّا أن تكلفتها بحساب القيمة المرجعية للتراسل الشبكي ستكون 1، وبالتالي تتساوى في التكلفة مع 100‎ Mbps رغم أنها أسرع منها بمئة مرة أو أكثر. ضبط طريق حساب التكلفة توجد طريقتان لمعالجة الإشكالية المذكورة أعلاه. الطريقة الأولى هي تحديد التكلفة مباشرة بالنسبة لكل بطاقة شبكة على الموجِّه بالأمر ip ospf cost؛ أما الطريقة الثانية – وهي الأفضل – فتتمثل في تغيير القيمة المرجعية للتراسل الشبكي. يُفضَّل أن تأخذ القيمة المرجعية بالحسبان سرعة الروابط المتوفرة في الشبكة بحيث تكون القيمة الدنيا للتكلفة (أي 1) من نصيب الروابط ذات السرعات العالية. تجدر الإشارة إلى أنّه يمكن أن تكون لكل موجِّه قيمة مرجعية خاصة به، إلا أنه يُنصَح باستخدام القيمة المرجعية نفسها في عموم الشبكة. يُستخدَم الأمر auto-cost reference-bandwidth لتعيين قيمة التراسل الشبكي المرجعي (بالميغابت في الثانية Mbps): Router# configure terminal Enter configuration commands, one per line. End with CNTL/Z. Router(config)# router ospf 100 Router(config-router)# auto-cost reference-bandwidth 1000 % OSPF: Reference bandwidth is changed. Please ensure reference bandwidth is consistent across all routers. آلية اختيار معرِّف الموجِّه يدخُل معرِّف الموجِّه في الكثير من الاستخدامات، ممّا يجعل ثباته وتوقّع قيمته أمرًا أساسيًَّا، غير أنّ الطريقة المبدئية لتعيينه تجعله قيمته قابلة للتغير من إعادة تشغيل إلى أخرى. يُختار معرّف الموجِّه أثناء بدء عمل بروتوكول OSPF. يعتمد البروتوكول على عناوين IP البطاقات لحساب المعرِّف. يبدأ الموجِّه الذي يشغِّل OSPF بالنظر في بطاقات الشبكة الفيزيائية (Physical interfaces) وينظُر في حالة البطاقة، فإذا كانت up/up فهي مؤهَّلة لأن يدخل عنوانها في عملية الاختيار، أما إذا كانت حالتها up/down أو down/down أو مُعطَّلة فلا تؤخَذ بالحسبان. إذا كانت بطاقة واحدة في وضع العمل (up/up) فسيختار البروتوكول عنوانها لحساب المعرِّف، أما إذا كان عدد البطاقات العاملة أكثر فسيُختار عنوان البطاقة الأكبر عدديًا، حيث توازن عناوين IP من اليسار إلى اليمين. عنوان يبدأ – مثلًا – بـ 192 أكبر من عنوان يبدأ بـ 10، فإذا كان الجزء الأول متساويًّا بين عنوانين ننتقل إلى الجزء الثاني، ثم إلى الجزء الثالث وهكذا. العنوان 192.168.2.110 - مثلًا - أكبر من 192.168.2.100. يمكن أن نلاحظ أن طريقة الاختيار المبدئية للبطاقة والعنوان الذين سيعتمد عليهما حساب المعرِّف لا تضمن استقرار معرِّفات الموجِّهات، إذ يمكن أن تتغير بعد إعادة التشغيل إذا تغيرت حالة بطاقات الشبكة. توجد طريقتان لضمان استقرار معرِّف الموجِّه حتى بعد إعادة التشغيل. تحديد قيمة المعرِّف يدويّا تتمثل الطريقة الأولى في تحديد معرِّف الموجِّه يدويّا بالأمر router-id كما في المثال التالي: RouterX(config)# router ospf 100 RouterX(config-router)# router-id 10.2.2.2 RouterX(config-router)# end RouterX# copy running-config startup-config RouterX# clear ip ospf process استخدام بطاقات الاسترجاع (Loopback interfaces) تستخدم الطريقة الثانية ما يُعرَف ببطاقات الاسترجاع، وهي بطاقات شبكة برمجية افتراضية (غير فيزيائية) توجد على الموجِّهات، ومُعدَّة لمحاكاة بطاقة شبكة فيزائية. تُستخدَم بطاقات الاسترجاع لأغراض عدّة مثل إدارة الموجِّه ومحاكاة الاتصال بشبكة معيَّنة. تتميّز بطاقة الاسترجاع – على افتراض تفعيلها - بكونها دائمًا على وضع التشغيل، إذ أنها تبدأ في العمل فور تشغيل الموجِّه، وهو ما يعني أنها تتمتع بالاستقرار، عكس البطاقات الملموسة. ماذا لو كانت لدينا بطاقات استرجاع عدة؟ في هذه الحالة يطبِّق بروتوكول OSPF المبدأ نفسه الذي يتبعه عند الاختيار بين بطاقات ملموسة عدّة، أي عنوان البطاقة الأكبر. الخلاصة بخصوص معرّف الموجِّه هي أنه سيكون العنوان الأكبر من بين عناوين بطاقات الشبكة الملموسة، إلّا إذا ضُبطت إعدادات بطاقات الاسترجاع، وحينها سيكون معرِّف الموجِّه هو العنوان الأكبر بين عناوين بطاقات الاسترجاع. يُستخدَم الأمر interface لإعداد بطاقات الاسترجاع، كما في المثال التالي: R1# configure terminal R1(config)# interface loopback 0 R1(config-if)# ip address 1.1.1.1 255.0.0.0 R1(config-if)# ip ospf 100 area 0 R1(config-if)# exit R1(config) ترجمة – وبتصرف – للمقال SPF Algorithm and OSPF Router ID
  3. icnd1/ccent 100-101

    يُصنَّف بروتوكول OSPF (اختصارًا لـ Open Shortest Path First، المسار المفتوح الأقصر أولًّا) ضمن بروتوكولات حالة الربط، وقد طوّرته جمعيّة مجموعة مهندسي شبكة الإنترنت (IETF) ليكون بديلًا عن بروتوكول RIP. تختلف بروتوكولات حالة الربط عن بروتوكولات متجه المسافة، إذ أن بروتوكولات حالة الربط تعمل على تكوين علاقات جوار بين مكوِّنات الشبكة عن طريق تتبّع حالة بطاقات الشبكة. تأخذ بطاقات الشبكة واحدةً من ثلاث حالات: up/up، وتعني أنّ كلًّا من الطبقة الأولى (الطبقة الفيزيائيّة) والثانيّة (طبقة وصل البيانات) تعملان جيّدًا؛ up/down، وتدلّ على وجود مشكلة في بروتوكول وصل البيانات (الطبقة الثانيّة)؛ down/down، وتشير إلى وجود مشكلة في الكابل (الطبقة الثانيّة). استخدم الأمر sh ip int brie لعرض ملخَّص لضبط بطاقات الشبكة. راجع درس بدء تشغيل الموجهات (Routers) عند بناء الشبكات للمزيد. يراقب الموجِّه، على افتراض استخدام البروتكول OSPF، حالة بطاقات الشبكة وفور تبدّل الحالة عن up/up فإنه يرسل إشعارًا بحالة الربط LSA‏ (Link-State Advertisement)، إذ نعني بالربط هنا بطاقة الشبكة، والحالة كونها تعمل (up) أم لا (down). في حال عودة بطاقة الشبكة للعمل (up/up) يرسل الموجِّه إشعارًا جديدًا بذلك. ينتشر الإشعار عبر ما يُعرَف بالمناطق (Areas)، ويمرّ على الأجهزة الموجودة بين المناطق، المعروفة بالموجِّهات الحدوديّة (Border routers) كما سنرى لاحقا. يجمع بروتوكول OSPF المعلومات التي يتحصّل عليها من أجل بناء مخطَّط يشمل جميع المسارات المتوفّرة في الشبكة، ويحتفظ بها في قاعدة بيانات تُسمَّى قاعدة بيانات حالة الربط (Link-State Database, LSDB)، ثم يستخدم خوارزميّة طوّرها عالم الحاسوب إدسخر ديكسترا (Edsger W. Dijkstra) سنة 1956 للحصول على أقصر مسار إلى كلّ شبكة أو شبكة فرعيّة ضمن المخطَّط. يعمل بروتوكول OSPF على إنشاء ثلاثة جداول: جدول الجوار (Neighbor table)، ويشمل جميع الموجهات المجاورة التي أنشأ معها علاقة جوار، والتي ستُتَبادل معها المعلومات. جدول المُخطَّط (Topology table)، ويحوي خارطة كاملة للشبكة بما في ذلك موجهات OSPF المتاحة والمسارات الأفضل، والمسارات البديلة للمسارات الأفضل في حال عدم توفرها. جدول التوجيه (Routing table)، ويتضمّن المسار الأفضل في الظروف الحاليّة، والذي سيُستخدَم لتوجيه حركة البيانات بين الموجهات المتجاورة. مفهوم الجوار في OSPF يعدّ مفهوم تقارب الجوار (Neighbor adjacency) أحد المفاهيم الأساسيّة في OSPF. إنْ أردنا معرفة طرق الوصول إلى الوِجهات باستخدام OSPF فعلينا إنشاء علاقات جوار بالموجِّهات. تُستخدَم لهذا الغرض رزم تُعرَف برزم الترحيب (Hello packet) التي تستخدم عناوين بثّ متعدّد (Multicast) معروفة. عرضنا للبثّ المتعدّد في السابق أثناء شرح بروتوكول Ethernet إذ قلنا إنّ الإرسال في الشبكة المحلية إمّا أن يكون ذا وجهة وحيدة (Unicast)، أو إلى جميع الأجهزة (البث الإذاعي Broadcast)، أو أن يكون وسطًا بين الإثنين (البث المتعدّد Multicast). تحدّثنا في درس فهم طبقة الإنترنت في TCP/IP عن تقسيم عناوين IP إلى فئات A، و B، و C. توجد فئة عناوين آخرى خاصّة تُسمَّى الفئة D تشمل العناوين من 224.0.0.0 إلى 239.255.255.255. عندما يريد موجِّه إرسال رزمة إلى أجهزة محدَّدة فإنّه يرسل الرزمة إلى عنوان IP الذي يعرِّف مجموعة الأجهزة تلك، مثلًا 224.1.2.3، يتلقّى الموجِّه الرسالة عندما يكون عضوًا في المجموعة، بمعنى أنّ لديه عنوان البثّ المتعدّد نفسه (224.1.2.3 في المثال السابق)، فيُنشِئ نسخًا جديدة من الرزمة ويعيد بثّها إلى شبكته الفرعيّة باستخدام رزمة متعدّدة الوجهات من الطبقة الثانية (إيثرنت). يستخدم بروتوكول OSPF عنوان البثّ المتعدّد 224.0.0.5 لإرسال رزم الترحيب التي تهدف إلى تكوين علاقات جوار بين الموجِّهات، لذا فإنّه على الموجِّه أن يكون عضوًا في المجموعة التي تستخدم العنوان المذكور. سنتعمّق في علاقات الجوار في OSPF في الدروس القادمة. يبدأ بروتوكول OSPF إذن بتكوين علاقات جوار بين الموجِّهات التي تستخدمه، فيرسل كلّ موجِّه دوريًّا رزم ترحيب على بطاقات الشبكة التي فُعِّل عليها بروتوكول OSPF معلنة عن جاهزيّته لتكوين علاقات جوار. ولكن ممّ تتكوّن رزم الترحيب تلك؟ ماذا لو حلّلنا بنية رزم الترحيب. سيساعد هذا الأمر كثيرًا الطلاب الذين يستعدّون لخوض امتحان الشهادة المتخصّصة، فهو من المواضيع التي يركّز عليها الامتحان. تتكوَّن رزم الترحيب من حقول عدّة، أهمّها: معرّف الموجِّه (ID): وهي قيمة من 32 بتًّا تُعرِّف الموجِّه في الشبكة، تُستنتَج عادةً من عنوان IP الخاص بالبطاق. يجب أن تكون هذه القيمة فريدة ومستقرّة. معرِّف المنطقة (Area) التي ينتمي إليها الموجِّه، والمنطقة – كما سنرى أدناه – هي تقسيم منطقي للنظام المستقلّ (Autonomous System) بحيث تجتمع موجِّهات ضمن منطقة واحدة من أجل تسهيل الإدارة والرفع من أداء البروتكول. يبلغ حجم معرِّف المنطقة 32 بتا. مؤقّت الترحيب (Hello interval): يحدّد المدة الفاصلة بين إرسال رزمتيْ ترحيب. يجب أن يتطابق مؤقِّت الترحيب بين الموجهات المتجاورة في OSPF، وإلّا فإن مخطَّط التجاور لن يعمل. القيمة المبدئيّة للمؤقّت هي 10 ثوان. مؤقّت الخمول (Dead interval): يحدّد المدّة القصوى التي إن تجاوزها الموجِّه دون إرسال رزمة ترحيب فإنّه يعدّ خارج الخدمة. تكون قيمة مؤقّت الخمول – مبدئيًّا – أربعة أضعاف قيمة مؤقّت الترحيب، فإذا كانت قيمة مؤقّت الترحيب 10 ثوان فإنّ قيمة مؤقّت الخمول 40 ثانية. يجب أن تتطابق هذه القيمة أيضًا بين الموجِّهات. معرّفات الموجِّهات المجاورة: تشمل الموجهات التي تلقى منها رزم ترحيب ضمن المجال المسموح به. يجب الانتباه إلى أنّ علاقة الجوار في OSPF هي علاقة متبادلة، فالموجِّه R1 يرسل رزمة ترحيب إلى الموجِّه R2 ولكنه لا يعتمد هذا الموجِّه ضمن جواره إلّا إذا تلقى منه رزمة ترحيب تفيد بأنّ العلاقة متبادلة، بمعنى أنّ معرِّف R1 يوجد ضمن حقل معرّفات الموجِّهات المجاورة في رزمة الترحيب القادمة من الموجّه R2. الأمر نفسه ينطبق على R2. مفهوم المنطقة في OSPF يتوفّر بروتوكول OSPF على خاصيّة مميِّزة وهي مناطق التوجيه (Routing areas)، وتتمثّل في تقسيم الموجِّهات ضمن نظام مستقلّ يعمل ببروتوكول OSPF إلى مناطق بحيث تتكوّن كل منطقة من مجموعة من الموجِّهات المترابطة فيما بينها. تهدف المناطق إلى تسهيل الإدارة والتحسين من استخدام الموارد المتوفّرة في الشبكة. يعدّ ترشيد موارد الشبكة غاية الأهميّة في الشبكات الكبيرة، التي تحوي الكثير من الشبكات الفرعيّة والروابط. قد يؤدّي تبادل قاعدة بيانات حالة الربط (LSDB) في الشبكات الكبيرة إلى ملْء الشبكة بالرزم والحدّ بالتالي من أدائها، وبالتالي لُجئ إلى إنشاء المناطق. تشترك الموجِّهات التي تنتمي إلى المنطقة نفسها في قيمة معرِّف المنطقة. تحمل المنطقة الأولى المُنشَأة في الشبكة الرقم 0 و تُسمَّى بمنطقة العمود الفقري (Backbone area). يجب أن ترتبط مناطق الشبكة جميعها بمنطقة العمود الفقري عن طريق موجِّهات تُسمَّى موجِّهات حدود المنطقة ABR‏ (اختصارًا إلى Area Boarder Routers). تمرّ البيانات التي تنتقل من منطقة إلى أخرى حتمًا بمنطقة العمود الفقري. تتقاسم الموجهات في المنطقة جدول المُخطَّط وقاعدة بيانات حالة الربط، إلّا أنّ لكلّ منها جدول توجيه مختلفًا، نظرًا لكون OSPF يحسب المسارات الأفضل بالنسبة لكلّ موجِّه اعتمادًا على موقعه في الشبكة. لا يتضمّن جدول المُخطَّط داخل المنطقة سوى المعلومات المتعلِّقة بموجِّهات المنطقة تمنح حدود المناطق الفرصة لتجميع المسارات، رغم أنّ بروتوكولات حالة الربط لا تتيح هذه الإمكانيّة عادةً، نظرًا لأنّه من المفترَض أن يكون لدى الموجِّهات جميعًا مخطّط الشبكة نفسه، في حين أنّ OSPF يستخدم مناطق لها مخطّط خاصّ بها. تجنّب إغراق الشبكة بإشعارات حالة الربط (LSA)، خصوصًا في الشبكات الكبيرة جدًّا التي تتعرّض للتغيير باستمرار، حيث لا تتلقّى الموجّهات سوى الإشعارات من الموجِّهات التي تشترك معها في المنطقة. ترجمة - بتصرّف - للمقال Introducing OSPF.
  4. سنتناول في هذا المقال كيفيّة ضبط بروتوكول RIP، وهو من بروتوكولات متّجه المسافة، على موجّهات Cisco. سنحلّل هذا البروتوكول اعتمادًا على ثلاثة عوامل: استكشاف الموجّهات للشبكات الأخرى، الحصول على معلومات عن الشبكة، تعامل البروتوكول مع التغييرات في مخطَّط الشبكة. نظرة عامّة على بروتوكول RIP العامل الأوّل الذي سندرُس من خلاله بروتوكول RIP هو كيف يستكشف كلّ موجّه بقيّة الموجِّهات الموجودة معه في الشبكة. تعتمد الموجِّهات التي تستخدم بروتوكولات متّجه المسافة - مثل RIP - على الموجِّهات المجاورة لتخبرها بالاتجاه الذي يجب أخذه للوصول إلى الوجهة، والمسافة معها. أي أن موجِّهًا يستخدم بروتوكول RIP يخبرالموجِّهات المجاورة له بالوجهات التي لديه معلومات عنها، كما أنّه يتلقّى معلومات من الموجِّهات المجاورة له التي تستخدم نفس البروتوكول. يعني هذا أن التوجيه يعتمد على سلسلة من التفاعلات بين الموجِّهات. إنْ حصل تغيير على وِجهة لا ترتبط مياشرةً بالموجِّه فسينتظر أن تصله التغييرات من الموجِّهات المجاورة له، والتي تنتظر أن تصلها التغييرات من الموجِّهات المجاورة لها، وهو ما يجعل اكتشاف التغييرات الحاصلة في الشبكة عمليّةً بطيئة، علاوة على أنها معلومات قد تكون من موجِّه ليس لديه اتّصال مباشر بمصدر التغيير، وهو ما يجعلها معلومات غير دقيقة. تتبادل الموجِّهات العاملة ببروتوكول RIP جداول التوجيه كاملةً مع الموجِّهات المجاورة لها، ممّا ينتُج عنه بطء في الأداء. يعتمد الإصدار الأوّل من RIP على إذاعة (Broadcast) هذه المعلومات على الشبكة، وهي طريقة أكثر بطئًا وأقل فاعليّة. فيما يخصّ كيفية حصول بروتوكولات متجه المسافة على المعلومة، فإنّه توجد إشعارات دوريّة بجدول التوجيه كاملًا ترسلها الموجِّهات إلى الموجِّهات المتصلة بها مباشرة. بعضٌ من المسارات المُضمَّنة في جدول التوجيه المُرسَل قادمة من موجِّهات بعيدة، لذا فهي ليست شديدة الموثوقيّة. يوضّح الشكل أدناه سلسلة تفاعل بين ثلاثة موجِّهات A‏، B، وC؛ وكيف يمكن للموجِّه A الحصول على معلومات عن شبكات متّصلة بالموجِّه C. تُتَبادل المعلومات دوريًّا، وتشمل جدول التوجيه بكامله، فحتى إنْ لم يحدُث أي تغيير فإنّ الموجّهات تستمرّ في إخبار جيرانها بالمعلومات نفسها. أداء بروتوكول RIP تميل مدة التقارب في بروتوكولات متجه المسافة - مثل RIP - إلى البطء، ممّا يعني أن الموجِّه سيستغرق وقتًا طويلًا حتى يعرف بوجود تغيير في الشبكة ويختار بالتالي مسارًا مختلفًا للرزم. قد تصل هذه المدة إلى دقائق، وهي مدة طويلة. نظرًا لطول مدّة التقارب فإنّ بروتوكوللات متجه المسافة عرضة لحلقات التوجيه (Routing loops) التي تحصُل عندما تستمر الرزم في الانتقال بين الموجِّهات نفسها، ضمن حلقة غير منتهية. يستخدم بروتكول RIP لمنع حدوث الحلقات غير المنتهية حدًّا أقصى لتكلفة المسار، وإذا تجاوزت الرزمة هذا الحد فإنّ الموجِّه يلغيها ولا يعيد توجيهها. تُحسَب التكلفة بالاعتماد على عدد القفزات (الموجّهات) التي يتكوَّن منها المسار. تعدّ هذه الوسيلة غير فعّالة في حالة وجود مُخطَّط شبكة بمسارات مُكرَّرة توصِل إلى الوجهة نفسها. إذا افترضنا أنّ السرعة T1 في المُخطَّط أعلاه أكبر بكثير من 19.2، فإنّ ذلك لن يشفع - عند استخدام RIP - للمسار الذي يمرّ عبر ثلاثة موجّهات رغم أنّه الأسرع، وسيُفضَّل عليه المسار الذي يمرّ على موجِّه واحد. يجعل هذا الأمر من RIP بروتوكولًا غير فعّال وغير مناسب للشبكات الكبيرة جدًّا، ينضاف إلى ذلك الإعلان عن المسارات بواسطة إشعارات دوريّة، ممّا يمثّل عبئًا إضافيّا. موازنة بين الإصدارين الأول والثاني من بروتوكول RIP أعدّ مصمّمو بروتوكول RIP إصدارًا ثانيًّا للتحسين من أداء البروتوكول. تضمّن الإصدار الثاني تحسينات من قبيل جعل البروتوكول عديم الفئة (Classless protocol)، وهو ما يعني أنه أصبح يدعم أقنعة شبكة بأحجام متغيّرة فغدت الإشعارات تتضمّن قناع الشبكة إضافة إلى عنوانها. يعني هذا أيضًا أن الإصدار الثاني من البروتوكول يمكنه تجميع المسارات. شملت التحسينات كذلك فاعليّة البروتوكول بحيث أصبحت الإشعارات تتمّ عن طريق بثّ بوِجهات محدَّدة (Multicast) بدلًا من بث إذاعي (Broadcast) شامل. أُعدَّ الإصدار الثاني باحتساب أمان تبادل المعلومات، فأُضيف دعم الاستيثاق من موجِّه إلى موجِّه (Router-to-router authentication)، ما يعني أنّ الموجِّهات يمكن ألّا تتبادل المعلومات إلّا إذا كانت تتشارك مفتاحًا سرّيًّا خاصًّا. رغم ذلك، يبقى RIP بروتكول متّجه مسافة يعاني من مشاكل التقارب الطويل، وتعيقه الإشعارات الدوريّة وعدد القفزات المحدود. ضبط توجيه رزم IP من الأمور الجيّدة بخصوص بروتوكولات التوجيه أنّ إعدادها متجانس على موجّهات Cisco عمومًا، ويتبع الخطوات نفسها. تحتاج أولًا إلى اختيار بروتوكول التوجيه وتفعيله في وضع الضبط العامّ، ثم تحديد الشبكات التي تريد من هذا البروتوكول أن يعلن عنها، ويستقبل من خلالها إشعارات الموجِّهات المجاورة. تؤدّي البروتوكولات عملها عبر إرسال إشعارات إلى بطاقات الشبكة المتّصلة، وتلقّي إشعارات بواسطتها، إلّا أنّ الإعداد يعتمد على عناوين الشبكات المضبوطة على بطاقات الشبكة في الموجِّه. يجب الانتباه إلى أنّ بعضًا من بروتوكولات التوجيه هي بروتوكولات ذات فئة (Classful) وبالتالي لن تفرّق بين الشبكات الفرعيّة. ضبط إعدادات البروتوكول RIP سنتعرّف من خلال هذه الفقرة على الأوامر الأساسيّة لضبط البروتوكول RIP على موجّهات Cisco. نبدأ بالأمر enable للدخول في وضع المستخدم ذي الامتيازات المرتفعة، ثم الأمر config t للدخول في وضع الإعداد العام. تبدأ عمليّة ضبط بروتوكول التوجيه بالأمر router متبوعًا بالبروتوكول الذي نريد ضبطه، أي RIP في هذه الحالة. RouterA>enable Password: RouterA# RouterA#conf t Enter configuration commands, one per line. End with CNTL/Z. RouterA(config)#router rip RouterA(config-router)#version 2 RouterA(config-router)#network 172.16.0.0 RouterA(config-router)# نضبُط في السطر التالي الإصدار الذي نريد استخدامه، وهو الإصدار 2، الأحدث وعديم الفئة والأكثر فاعليّة. يعرّف الأمر network الشبكات المتصلة مباشرة بالموجِّه المشاركة في عمل البروتوكول. على الرغم من أنّ الإصدار الثاني من بروتوكول RIP عديم الفئة، إلّا أنّ ضبطه يتبع آليات ضبط البروتوكولات ذات الفئة، وبالتالي فإنّ عنوان الشبكة الذي تحدّده هنا هو عنوان شامل، بدون أقنعة للشبكة. يأخذ RIP قناع الشبكة من إعداد البطاقة التي تتّصل بها الشبكة. مثال على ضبط RIP يتطلّب ضبط RIP النظر في بطاقات الشبكة على الموجِّه، وفهم معرِّفات الشبكات المتّصلة بتلك البطاقات أو الموكلة إليها، ثم تفعيل البروتوكول على الشبكات المذكورة. نأخذ المثال المُوضَّح في الصورة أدناه. يتّصل الموجِّه A في المثال بشبكتيْن عنوانيهما 10.0.0.0 و172.16.0.0، ولذا نفعِّل البروتوكول على الشبكتيْن بالأمر network. RouterA# RouterA#conf t RouterA(config)#router rip RouterA(config-router)#version 2 RouterA(config-router)#network 172.16.0.0 RouterA(config-router)#network 10.0.0.0 بالنسبة للموجِّه B فإنّ بطاقتيْ الشبكة اللتيْن يمتلكهما تتّصلان بشبكتيْن فرعيّتيْن تنتميان للشبكة الكبيرة 10.0.0.0، لذا لا نحتاج لتفعيل RIP إلّا إلى الأمر network 10.0.0.0 الذي يُفعِّل البروتوكول على جميع البطاقات التي تنتمي للشبكة 10.0.0.0، وهي في حالة الموجِّه B بطاقتا الشبكة التسلسليّتان s0/0 وs0/1. RouterB# RouterB#conf t RouterB(config)#router rip RouterB(config-router)#version 2 RouterB(config-router)#network 10.0.0.0 تشبه إعدادات الموجِّه C الموجِّه A: RouterC# RouterC#conf t RouterC(config)#router rip RouterC(config-router)#version 2 RouterC(config-router)#network 192.168.1.0 RouterC(config-router)#network 10.0.0.0 لو لم ننفّذ الأمر network 192.168.1.0 في الموجِّه C فلن يُفعَّل البروتوكول على البطاقة fa0/0 ولن يستخدم الموجِّه C بالتالي البروتوكول RIP لإشعار بقيّة الموجِّهات بمعرفته بمسار إلى الشبكة 192.168.1.0. نخلُص من هذا المثال إلى أنّ عمل الأمر network يتمثّل في تفعيل البروتوكول على بطاقات الشبكة التي توافق عنوان الشبكة العامّة المذكور في الأمر. التحقّق من إعدادات RIP توجدة أوامر عدّة للتحقّق من الإعدادات، فإضافة إلى الأمر show running يمكن عرض معلومات أكثر عن كيفيّة إعداد RIP باستخدام الأمر show ip protocols. يُظهر الأمر معلومات عامّة عن المؤقِّتات (Timers) التي يستخدمها RIP ومرشحات (Filters) التوجيه في حال وجودها. تظهر في فقرة توجيهات الشبكة (Routing for networks) الشبكاتُ التي أعددت بروتوكول التوجيه للعمل عليها. RouterA#show ip protocols Routing Protocol is "rip" Outgoing update filter list for all interfaces is not set Incoming update filter list for all interfaces is not set Sending updates every 30 seconds, next due in 15 seconds Invalid after 180 seconds, hold down 180, flushed after 240 Redistributing: rip Default version control: send version 2, receive version 2 Interface Send Recv Triggered RIP Key-chain FastEthernet0/0 2 2 Serial0/0 2 2 Automatic network summarization is in effect Maximum path: 4 Routing for Networks: 10.0.0.0 172.16.0.0 Routing Information Sources: Gateway Distance Last Update 10.1.1.2 120 00:00:24 Distance: (default is 120) تعني البيانات في نتيجة تطبيق الأمر show ip protocols أعلاه على الموجِّه A أنّنا استخدمنا أمريْ network، واحد للشبكة 10.0.0.0 والآخر للشبكة 172.16.0.0. يظهر تأثير الأمريْن في أنّ الموجِّه A يستقبل ويُعلن عن مسارات RIP. نرى في نتيجة الأمر أنّ البطاقتيْن Fa0/0 وS0/0 اللتيْن تنتميان على التوالي للشبكتين 10.0.0.0 و172.16.0.0 أرسلتا إشعاريْ RIP واستقبلتا إشعاريْن كذلك. عرض جدول التوجيه وتشخيص المشاكل تكمن المهمّة الأساسيّة لأي بروتوكول توجيه في إنشاء جدول التوجيه وتحديث المعلومات المُدرَجة فيه، لذا فإنّ عرض الجدول خطوة أوليّة في التحقّق وتشخيص المشاكل. نستخدم الأمر show ip route لعرض جدول التوجيه على الموجِّه A فنحصُل على النتائج أدناه. RouterA#show ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is not set 172.16.0.0/24 is subnetted, 1 subnets C 172.16.1.0 is directly connected, FastEthernet0/0 10.0.0.0/24 is subnetted, 2 subnets R 10.2.2.0 [120/1] via 10.1.1.2, 00:00:16, Serial0/0 C 10.1.1.0 is directly connected, Serial0/0 R 192.168.1.0/24 [120/2] via 10.1.1.2, 00:00:16, Serial0/0 تظهر في بداية مُخرجات الأمر الرموز المستخدَمة في جدول التوجيه، حيث يشير الحرف C (الحرف الأول من Connected) إلى الشبكات المتّصلة مباشرة ببطاقات الموجِّه، والحرف R إلى المسارات التي حصل عليها الموجِّه عن طريق البروتوكول RIP. يشير جدول التوجيه كذلك إلى المسافة الإداريّة وتكلفة الوصول إلى كلّ شبكة بين قوسيْن معقوفيْن حيث يعني السطر R 10.2.2.0 [120/1] via 10.1.1.2, 00:00:16, Serial0/0 أنّ المسافة الإداريّة للبروتوكول RIP (الحرف R) تساوي 120 (العدد الأول بين قوسيْن معقوفيْن) وأنّ تكلفة الوصول إلى الشبكة 10.1.1.2 عبر البطاقة Serial0/0 هي قفزة واحدة (العدد الثاني بين معكوفيْن). يقدِّم المؤقِّت 00:00:16 معلومات عن المدّة التي مرّت منذ آخر تحديث على المسار. يجب الانتباه إلى أنّ الموجِّه الذي يستخدم RIP يعلن دوريًّا (كل ثلاثين ثانيّة) عن المسارات التي بحوزته، وإنْ لم يحصُل دوريًّا على تحديث بخصوص المسارات التي تعرّف عليها عن طريق البروتوكول فإنّه سيعدّ الوجهة خارج مجال معرفته. يمكن رؤية إشعارات RIP مباشرة أثناء عملها باستخدام debug ip rip. يظهر في المثال أدناه أنّ الموجِّه A يرسل إشعارات على بطاقتيْ الشبكة عبر بثّ إذاعي، كما أنّه يستقبل إشعارات من الموجِّه B على البطاقة التسلسليّة عن الوِجهة 10.1.1.2. تظهر مُخرجات المسارات في حالتيْ الإرسال والاستقبال، إضافة إلى كلفة الوصول إلى الوِجهة. RouterA#deb ip rip RIP protocol debugging is on RouterA# 00:16:59.871: RIP: received v2 update from 10.1.1.2 on Serial0/0 00:16:59.875: 10.2.2.0/24 via 0.0.0.0 in 1 hops 00:16:59.875: 192.168.1.0/24 via 0.0.0.0 in 2 hops 00:17:00.747: RIP: sending v2 update to 224.0.0.9 via Serial0/0 (10.1.1.1) 00:17:00.747: RIP: build update entries 00:17:00.747: 172.16.0.0/16 via 0.0.0.0, metric 1, tag 0 00:17:22.779: RIP: sending v2 update to 224.0.0.9 via FastEthernet0/0 (172.16.1.1) 00:17:22.779: RIP: build update entries 00:17:22.779: 10.0.0.0/8 via 0.0.0.0, metric 1, tag 0 00:17:22.783: 192.168.1.0/24 via 0.0.0.0, metric 3, tag 0 00:17:28.907: RIP: received v2 update from 10.1.1.2 on Serial0/0 00:17:28.911: 10.2.2.0/24 via 0.0.0.0 in 1 hops 00:17:28.911: 192.168.1.0/24 via 0.0.0.0 in 2 hops RouterA#un all All possible debugging has been turned off RouterA# يعدّ الأمرdebug ip rip وسيلةً فعّالة للتحقّق ممّا إذا كانت الموجِّهات المجاورة تستخدم البروتوكول نفسه، وما إذا كانت تطبِّق مرشحات قد تتسبّب في حظر شبكات، كما أنّه يساعد في التحقّق من أخطاء إعداد بطاقات الشبكة. ترجمة – بتصرّف – للمقال Configuring RIP
  5. سنتعرّف من خلال هذا المقال على بروتوكولات التوجيه (Routing protocols) وبروتوكولات الإرسال (Routed protocols) والفرق بينها، مع أمثلة على كلّ منها. ثم نتطرّق بعد ذلك إلى تقسيم بروتوكولات التوجيه حسب موقعها من الشبكة، وحسب المعايير التي تستخدمها للحصول على المسارات. ما هي بروتوكولات التوجيه؟ تعرّف بروتوكولات التوجيه القواعدَ التي تحكُم تبادل المعلومات تلقائيًّا بين الموجِّهات ، بهدف التعرّف على المسارات وإدراجها آليًّا في جدول التوجيه. تستخدم بروتوكولات الإرسال المسارات التي يوفّرها لها جدول التوجيه في توصيل الرزم إلى وِجهتها عبر أفضل مسار. يمكن تشبيه بروتوكولات التوجيه بالتطبيقات التي تقدّم خرائط المدن للمستخدمين، وبروتوكولات الإرسال بالسيّارات التي تنقل المستخدمين إلى وجهاتهم وتنقلهم عبر المدينة بالاعتماد على تلك الخرائط. تكون الموازنة كاملة إذا كان التطبيق يُعدِّل الخريطة تلقائيًّا ليتوافق مع التغييرات الطارئة مثل شق شارع جديد، أو إغلاق طريق كان مفتوحًا. يعدّ بروتوكول الإنترنت IP بروتوكولَ الإرسال الوحيد في تجميعة TCP/IP، بينما توجد الكثير من بروتوكولات التوجيه مثل RIP وEIGRP. تتميّز بعضٌ من بروتوكولات التوجيه بدقّتها في صيانة المعلومات الخاصّة بمُخطَّط الشبكة وفي الحصول عليها، فيما تتميّز بروتوكولات أخرى بالسرعة في تأديّة تلك المهام. تُستخدَم ثلاثة عوامل أساسية لمقارنة بروتوكولات التوجيه: كيف يكتشف الموجِّه بقيّة الموجِّهات، ومتى وكيف يتبادل معها المعلومات؛ كيف تعرِف الموجِّهات مختلف المعلومات المتعلِّقة بالشبكة؛ كيف تتجاوب الموجِّهات مع التغييرات الحاصلة في الشبكة، وما مدى سرعتها في العودة للعمل وفي العثور على مسارات بديلة. بروتوكولات التوجيه الداخلي والخارجي في الأنظمة المستقلّة ينبغي معرفة السياق الذي تعمل فيه بروتوكولات التوجيه حتى نفهم آلية عملها على نحو جيّد. الطريقة الأولى في تصنيف بروتوكولات التوجيه هي تقسيمها حسب تموضعها في الأنظمة المستقلّة (Autonomous systems). عندما نتحدّث عن نظام مستقل في إطار الشبكات فالمقصود هو مجموعة من الشبكات تخضع لإدارة مشتركة وتتشارك سيّاسات التوجيه نفسها. نُطلِق على بروتوكولات التوجيه التي تهتمّ بتحديد المسارات داخل الأنظمة المستقلّة اسمَ بروتوكولات البوّابات الداخليّة IGP (اختصارًا إلى Interior gateway protocols)، في حين نسمّي تلك التي تربط بين الأنظمة المستقلّة ببروتوكولات البوّابات الخارجيّة EGP (اختصارًا إلى Exterior gateway protocols). من الشائع وجود مجموعة من بروتوكولات التوجيه مضبوطة على شبكات مؤسّسات، حتى ولو كانت المؤسّسة أو الشركة تنتشر على أماكن جغرافية متباعدة. يتعلّق مفهوم النظام المستقلّ بالناحية الإدارية أكثر من تعلّقه بالامتداد الجغرافي. إذا كانت لديك - مثلًا - شبكة واسعة النطاق (WAN) بين شبكتين يشرف عليهما الفريق نفسه، باستخدام سياسات توجيه متطابقة، وتمتلكهما المؤسّسة ذاتها، فإنّ بروتوكولات التوجيه في هذه الحالة داخليّة (IGP). table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } يرتبط مفهوم الأنظمة المستقلّة في الواقع العملي ارتباطًا وثيقًا بشبكة الإنترنت. لا تتجاوز الشبكات المتصلة بالإنترنت إحدى حالتيْن، فإمّا أن يكون لها نظام مستقلّ خاصّ بها، أو أن تنتمي لنظام مستقلّ يمتلكه مزوّد الخدمة. من هذا المُنطَلَق فإنّ BGP هو - عمليًّا - بروتوكول البوّابات الخارجيّة (EGP) الوحيد المعمول به على شبكة الإنترنت، في ما تعدّ البقية بروتوكولات بوّابات داخليّة (IGP) تعمل عادةً داخل نطاق الشبكات الخاصّة للشركات الكبيرة. أقسام بروتوكولات التوجيه يسمح مفهوما بروتوكولات البوّابات الداخلية (IGP) والخارجيّة (EGP) بأخذ فكرة عن كيفيّة عمل بروتوكولات التوجيه. تتميّز بروتوكولات EGP عادةً بقابليّة أكبر للتعامل مع مسارات شبكة الإنترنت، وبالتالي فهي مُصمَّمة لمعالجة بيانات كبيرة الحجم وملايين المسارات. في المقابل تتهيّأ بروتوكولات IGP لمعالجة عدد مسارات أقل لا يتجاوز الآلاف، وتركّز على مدّة التقارب (Convergence)، أي المدّة التي تحتاجها الموجِّهات لتكون لديها معلومات متطابقة عن حالة الشبكة، أكثر من تركيزها على القابليّة العاليّة للتوسّع. تنقسم بروتوكولات التوجيه الداخليّة إلى ثلاثة أقسام: بروتوكولات متّجه المسافة (Distance vector protocols): هذه البروتوكولات هي الأولى ظهورًا، والأقل فاعليّة في أخذ التغييرات الطارئة على الشبكة في الحسبان. من أمثلتها RIP و IGRP. تعتمد هذه البروتوكولات على المسافة الفاصلة عن الوِجهة النهائية، والمتجه الذي يحدّد القفزة الموالية في المسار، لذا فمعرفتها بالمسار عمومًا محدودة وليست كاملة. بروتوكولات حالة الرابط (Link state protocols): أكثر فاعليّة وثباتًا من بروتوكولات متّجه المسافة. تعمل هذه البروتكولات على تجميع المعلومات التي تصل إلى الموجِّهات من أجل الحصول على معرفة كاملة بمخطَّط الشبكة. صُمِّمت من أجل الحصول على مدة تقارب سريعة. من أمثلتها OSPF و ISIS. بروتوكولات التوجيه المختَلط (Hybrid routing): يتأسّس هذا النوع من التوجيه على المزج بين الصنفيْن السابقيْن، فيأخذ جوانب من بروتوكولات متّجه المسافة، وجوانب من بروتوكولات حالة الربط بهدف الحصول على خوارزميّات توجيه ثابتة وسريعة التقارب. ينتمي بروتوكول EIGRP إلى هذا الصنف. ترتيب المسارات باستخدام المسافة الإدارية قد تجد أثناء تصميم الشبكات حالات تُستخدَم فيها بروتوكولات مختلفة للحصول على معلومات عن الوجهات. من الأفضل ألّا يتداخل عمل بروتوكولات التوجيه للإعلان عن الوجهة ذاتها، إلّا أن ذلك قد يحدُث. تكون المسافة الإداريّة (Administrative distance) في هذه الحالة عاملَ فصل بين بروتوكولات التوجيه. تشير المسافة الإداريّة إلى أولويّة بروتوكول توجيه ودرجة موثوقيّة المعلومات المُتحصَّل عليها عن طريقه بالنسبة لبروتوكول توجيه آخر. تتناسب أفضليّة البروتوكول عكسًا مع قيمة المسافة الإداريّة. يحصُل الموجِّه A في المثال أدناه على معلومات الوصول إلى الوِجهة E عن طريق بروتوكوليْن مختلفيْن: EIGRP الذي يعلمه بمسار يمرّ على الموجِّه B، وRIP الذي يخبره بمسار يمرّ على الموجِّه C؛ وبما أنّ المسافة الإداريّة لبروتوكول التوجيه ‏EIGRP ‏(90) أصغر من المسافة الإداريّة لبروتوكول التوجيه RIP ‏(90) فإنّ الموجِّه A يفضّل المسار المارّ على الموجِّه B. يجب عدم الخلط بين المسافة الإداريّة والكلفة (Cost) أو القياس (Metric). تعدّ المسافة الإداريّة عامل ترتيب بين بروتوكولات التوجيه من ناحية وثوقيّتها بوصفها مصدرًا للمعلومات، في حين أنّ الكلفةَ عاملُ موازنة بين مسارات مختلفة إلى نفس الوجهة. يبدأ الموجِّه بالموازنة بين بروتوكولات التوجيه، وبالتالي فإنّ المسافة الإداريّة هي أول عامل تُحدَّد قيمته. بعد تحديد بروتوكول توجيه على أنه مصدر موثوق للمعلومة، ينظُر الموجِّه إذا كانت هناك طرق مختلفة تحصّل عليها باستخدام البروتكول المُختار للوصول إلى الوجهة. تُستخدَم الكلفة بعد ذلك لاختيار المسار الأفضل من بين المسارات المتاحة. يُلخّص الجدول التالي قيم المسافة الإداريّة لبعضٍ من أكثر بروتوكولات التوجيه الديناميكيّة انتشارا: بوتوكول التوجيه المسافة الإداريّة بطاقة شبكة متصلة مباشرة بالموجّه 0 مسار ثابت 1 EIGRP 90 OSPF 110 RIP 120 بروتوكولات التوجيه ذات الفئة يوجد تصنيف مهم آخر ينبئ بالكثير عن كيفيّة عمل بروتوكولات التوجيه، وهو تصنيفها إلى صنفين: بروتوكولات ذات فئة (Classful routing protocols) وبروتوكولات عديمة الفئة (Classless routing protocols). يكمن الفرق بين الاثنين في تعامل بروتوكولات التوجيه مع أقنعة الشبكة. لا تُضمِّن بروتوكولات التوجيه ذات الفئة قناع الشبكة عند نشرها لمعلومات عن المسارات التي تعرفها، وهو ما يعني أنّه لا يمكن استخدام أقنعة شبكات فرعية بطول متغيّر VLSM ‏(اختصارًا إلى Variable Length Subnet Masks). ينتُج عن استخدام بروتوكولات التوجيه ذات الفئة سلبيّات مؤثّرة؛ منها أنّه لا يمكن استخدام أقنعة بأحجام متعدّدة، وبالتالي يحدّ ذلك من مرونة توزيع عناوين IP. الإصدار الأول من بروتوكول RIP وبروتوكول IGRP مثالان على هذا النوع من بروتوكولات التوجيه. بروتوكولات التوجيه عديمة الفئة تُصنَّف بروتوكولات مثل الإصدار الثاني من RIP، وEIGRP، وOSPF، وIS-IS على أنّها بروتوكولات عديمة الفئة. يعني هذا أنّها ستعلن عن القناع إلى جانب عنوان الوجهة التي تريد نشر مسار إليها. أي أنه يمكن الحصول على بيئة بأقنعة شبكة متعدّدة. يصبح توزيع عناوين IP أسهل بكثير، فعلى سبيل المثال يمكنك استخدام قناع 30/ لوصلة طرف بطرف (Point-to-point) لأنّ هذا القناع سيتيح عنوانيْ IP فقط، ولن تخسر عناوين IP أخرى في شبكة صغيرة جدَّا كالاتصال بين طرفين. يمكن علاوةً على ذلك التحكّم يدويًّا في المسارات المُجمَّعة داخل الشبكة، وهو ما يسمح بتقليص حجم جدول التوجيه وثبات عمليّة التوجيه. نعني بتجميع المسارات العمليّة التي تتمثّل في الإشعار عن مسارات أقلّ ولكنّها تتضمّن تجميعات من عناوين الشبكات الفرعيّة. تتمّ هذه العمليّة بإرسال عناوين شبكات فرعيّة بأقنعة صغيرة. يمكن تشبيه الأمر بإرسال خريطة تخبر بالطريق أو المسار الذي يقود إلى مدينة دون ذكر الشوارع والمناطق الموجودة داخل المدينة الوِجهة، ممّا يجعل الخريطة أبسط وأقلّ عرضة للتغييرات لأنّها لن تتغيّر إذا مُنِع الوصول إلى شارع داخليّ بالمدينة. ترجمة – بتصرّف – للمقال Dynamic Routing and Routing Protocols
  6. سنخصّص هذا الدرس بالكامل لتوجيه رزم IP. سنوازن بين التوجيه الثابت والتوجيه الديناميكي ونبيّن الفروق بينهما، كما سنبرز إيجابيّات كل خيار وسلبيّاته. سيُتاح لك من خلال هذا الدرس إمكانيّة ضبط المسارات (Routes) الثابتة على موجّهات تعمل بنظام IOS باستخدام سطر الأوامر، كما ستتعرّف على حالات خاصّة مثل المسارات الافتراضية. العمليّات على الموجِّهات نعرف أن الموجِّهات تحتفظ بمعلومات عن تخطيط الشبكة، وترسل الرزم (Packets) إلى وِجهتها عبر اختيار الطريق الأفضل حسب مخطّط الشبكة. توجد طريقتان تُضبَط بهما الموجِّهات للحصول على معلومات عن الشبكة، الطريقة الأولى هي المسارات الثابتة (Static routes)، والثانية هي المسارات الديناميكية أو المتغيرة (Dynamic routes). يتعرّف الموجّه عند إعداد المسارات الديناميكية على الشبكات المتّصلة به، وهي شبكات يعلم الموجِّه بوجودها ويمكنه إدراجها ضمن جدول التوجيه (Routing table). إنْ قُطِع الاتصال بواحدة من هذه الشبكات فإن الموجِّه يعدِّل جدول التوجيه بحذف الوِجهة المعنية. تشمل المعلومات الديناميكية كذلك الوِجهات التي عرف الموجِّه المسار الذي يؤدّي إليها عن طريق بروتكولات التوجيه. بالنسبة للحالات التي تكون فيها الشبكات المتصلة بالموجِّه محدودة ومعروفة سلفًا، فإنّ المسارات الثابتة تعدّ خيارًا مناسبا. الاختيار بين المسارات الديناميكية والمسارات الثابتة لا تمثل المسارات الثابتة حِمْلا كبيرًا على الموجِّه، فهي لا تستخدم بروتكولات التوجيه المتقدّمة، ولا تُرسل الإشعارات حول التغيرات الطارئة، ولا المعلومات المرتبطة بمخطّط الشبكة. يسهُل ضبطُ المسارات الثابتة ما دام عددها محدودًا، إلّا أن الموجِّه لن يتفاعل مع تغيّرات الشبكة. بالنسبة للمسارات الديناميكية فإنّها تمثل حِملًا إضافيًّا على الموجِّه، بسبب استخدامها لبروتكولات التوجيه المتقدّمة من أجل الحصول على التغييرات الطارئة على الشبكة، والتعديل بما يتوافق مع تلك التغييرات، إلّا أنك ستحصُل في النهاية على جدول مسارات يعكس الحالة الدقيقة للشبكات التي يتصل بها الموجِّه. تختلف سرعة أخذ التغييرات في الحسبان من بروتوكول إلى آخر. المسارات الثابتة يناسب استخدام المسارات الثابتة الشبكات الجذعية (Stub network)، وهي شبكات ليست لديها معرفة بأي شبكة أخرى، وترتبط بالخارج عبر موجِه لديه اتصال واحد بالخارج، كما في الصورة أدناه. يُستخدَم مسار ثابت لتوجيه البيانات من الشبكات الجذعية إلى جميع الوجهات خارج الشبكة. يُعرَف هذا النوع من المسارات بالمسار الافتراضي (Default route). الاتصال بالإنترنت مثال جيّد لاستخدام المسارات الافتراضية، ففي الشبكات الجذعية لا تهتم بالوِجهة النهائية التي تريد الوصول إليها، وكلّ ما يهمك هو أن هذه الوجهات توجد خارج شبكتك المحليّة، ويمكن الوصول إليها عبر الاتصال الوحيد الذي يتوفر عليه موجّهك. لذا فإنّ الإعداد الذي يقول "أرسل جميع البيانات التي لا تعرف وِجهتها عبرهذا المسار" (إلى الموجِّه A في المثال أعلاه) سيكون كافيا. يجب الانتباه أثناء إعداد التوجيه الثابت إلى كون البيانات بطبيعتها ثنائية الوِجهات، فكما أننا نرسل بيانات إلى الخارج فسنتلقى بيانات منه. نستطيع في هذه الحالة إعداد مسارات ثابتة على الموجِّه A لتوجيه البيانات إلى الشبكة الجذعية. يمكن في بعض الحالات المزج بين التوجيه الثابت والتوجيه الديناميكي. مثلًا، نضبُط مسارًا مبدئيًّا على الموجِّه B بالنسبة للبيانات الخارجة من الشبكة المحليّة، وبالنسبة للبيانات الداخلة إلى الشبكة نضبُط B بحيث يرسل إشعارات بالمسارات داخل الشبكة التابعة له، وبالتالي يعرف الموجِّه A بوجودها، ويوجّهها إليه. إعداد المسارات الثابتة يُستخدَم الأمر التالي لإعداد المسارات الثابتة على موجهات Cisco : Router(config)#ip route [network/host] [mask] [address/interface] [distance] [permanent] يأخذ الأمر ip route وسيط يمثّل الشبكة الوِجهة، متبوعة بقناع الشبكة (Mask)، وبالتالي يمكن الإشارة إلى شبكات فرعيّة (sub networks) بأقنعة متعدّدة وذات أحجام مختلفة. القيمة الأكثر تخصيصًا هي 32/ التي تشير إلى أن الوجهة مضيف (Host) مخصوص وليست شبكة فرعية. ثم نحدد بعد ذلك القفزة (Hop) الموالية على المسار والتي قد تكون عنوان IP الخاص بالموجِّه الموالي على المسار إذا كانت بطاقة الشبكة من النوع ذي الوصول المتعدّد (Multi-access interface) كما هي الحال في شبكات Ethernet (أجهزة طرفية متعدّدة على نفس الوسيط يمكنها التخاطب بدون الحاجة لموجّه)، أو اسم البطاقة في حال الاتصال طرفًا بطرف (Point-to-point). قيمة المسافة الإدارية (Administrative distance) الافتراضية للمسارات الثابتة هي 1. يمكن تغيير هذه القيمة لإنشاء مسارات ثابتة من أجل الاتصال الاحتياطي. يجب أن تتذكر أن هذه القيمة تمثل الأولوية بالنسبة لبروتوكول التوجيه. تعني القيمة 1 أن المسارات الثابتة ستكون لها الأولوية على أغلب بروتكولات التوجيه الديناميكية. بعبارة أخرى، إذا أدرجت مسارًا ثابتًا إلى وجهة سبق للموجّه التعرّف عليها عبر مسارات ديناميكة، فإن الأفضلية ستكون للمسار الثابت نظرًا لأنّ لديه مسافة ثابتة بقيمة أصغر. مثال على مسار ثابت في ما يلي مثال على مسار ثابت مضبوط على الموجِّه A في الصورة أدناه. RouterX(config)# ip route 172.16.1.0 255.255.255.0 172.16.2.1 أو: RouterX(config)# ip route 172.16.1.0 255.255.255.0 s0/0/0 يشير المسار المضبوط بالأمر ip route أعلاه إلى الشبكة الجذعية (172.16.1.0/24). توجد طريقتان لإعداد هذا المسار. تستخدم الطريقة الأولى عنوان IP الخاصّ بالموجِّه B ‏(72.16.2.1)‎، بينما تستخدم الثانية اسم بطاقة الشبكة المحليّة على الموجِّه A ‏(s0/0/0). يجب الانتباه إلى أن المسار الذي أعددناه بالأمر السابق هو مسار ذو اتجاه واحد. إنْ أردت السماح بحركة البيانات من الشبكة الجذعيّة إلى خارجها فستحتاج لتعيين مسار ثابت أو مسارات ديناميكة على الموجِّه B. المسار الافتراضي المسار الافتراضي هو مسار ثابت يتميّز بأنه يرسل الرزم مجهولة الوجهة جميعها إلى العنوان المحدّد في الأمر ip route (أي الموجِّه A في الشكل أدناه)، كما في المثال التالي، حيث تشير الأصفار مكان عنوان IP والقناع إلى الوجهة المجهولة. RouterX(config)# ip route 0.0.0.0 0.0.0.0 172.16.2.2 يُستخدَم الأمرsh ip route لعرض المسارات الموجودة على الموجِّه، كما في المثال أدناه. يشير الحرف S أمام المسار إلى أنّه مسار ثابت مُعدّ بالأمر ip route، وتدلّ العلامة * مع الحرف S أنّ المسار مبدئي. تظهر في نتائج الأمر ip route البوابة الافتراضية (Default gateway) التي تُعرَف أيضًا باسم بوّابة الملجأ الأخير (Gateway of last resort). Router# sh ip route Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route Gateway of last resort is 192.168.1.1 to network 0.0.0.0 C 192.168.62.0/24 is directly connected, FastEthernet0/0 C 192.168.1.0/24 is directly connected, FastEthernet0/1 S* 0.0.0.0/0 [1/0] via 192.168.1.1 في نتائج الأمر أعلاه، يشير السطرGateway of last resort is 192.168.1.1 to network 0.0.0.0 إلى المسار الافتراضي، ويعني أن 192.168.1.1 هو البوابة الافتراضية لجميع الوجهات المجهولة (العنوان 0.0.0.0). ترجمة - بتصرّف - للمقال Enabling Static Routing.
  7. يهدف هذا الدليل إلى أن يكون مصدرًا ونقطة بداية لتشخيص واستكشاف مشاكل وإعدادات MySQL للتمهيد لحلها. سنتناول بعضًا من المشاكل التي يتعرّض لها كثيرون من مستخدمي MySQL ونوفّر إرشادات لكيفية تشخيصها وحلها. سيشتمل الدليل كذلك على روابط لمقالات من أكاديميّة حسوب ومن التوثيق الرسمي للاستفادة منها. كيف تعرض سجلّات الأخطاء وتشخّص الاستعلامات في MySQL كيف تسمح بالاتّصال عن بعد بقاعدة بيانات MySQL كيف تعالج انهيار خادوم MySQL كيف تصلح الجداول المعطوبة في MySQL كيف تشخّص أخطاء المقابس Sockets في MySQL يُدير خادوم MySQL الاتّصالات القادمة إلى قاعدة البيانات اعتمادًا على ملفّ مقبس Socket، وهو نوعٌ خاصّ من الملفّات يسهّل التواصل بين عمليّات Processes مختلفة. يحمل الملفّ المقبس الخاصّ بخادوم MySQL اسمَ mysqld.sock ويوجد عادةً - بالنسبة للخواديم العاملة بتوزيعة أوبنتو – في المجلّد ‎/var/run/mysqld/‎. تُنشئ خدمة MySQL هذا الملفّ تلقائيّا. تتسبّب التعديلات على نظام التشغيل أو على إعدادات MySQL في عدم تمكّن MySQL من قراءة الملفّ المقبس، ممّا يمنع الوصول إلى قواعد البيانات على الخادوم. يظهر خطأ المقبس الشائع على النحو التالي: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) توجد بضعة أمور تتسبّب في الخطأ أعلاه، وخيّارات محدودة لإصلاحه. أحد الأسباب الشائعة هي توقيف خدمة MySQL أو الإخفاق في تشغيلها؛ بمعنى أنّ الخدمة لم تستطع إنشاء الملفّ المقبس ابتداءً. حاول تشغيل الخدمة بالأداة systemctl لمعرفة ما إذا كان هذا هو سبب ظهور الخطأ: sudo systemctl start mysql ثم حاول الوصول إلى سطر أوامر MySQL من جديد. تأكّد - إن استمرّ الخطأ في الظهور – من المسار الذي يبحث فيه MySQL عن الملفّ المقبس. يمكن معرفة هذا المسار من خلال ملفّ الإعداد mysqld.cnf: sudo nano /etc/mysql/mysql.conf.d/mysql.cnf ابحث عن المُعامل socket ضمن المقطع [mysqld] من الملفّ. يبدو المقطع المذكور كالتالي: . . . [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 . . . أغلق الملفّ ثم تأكّد من وجود الملفّ mysqld.sock بتنفيذ الأمر ls على المسار الذي يتوقّع MySQL وجودَ الملفّ فيه: ls -a /var/run/mysqld/ إذا كان الملفّ المقبس موجودًا فسيظهر في مُخرجات الأمر: . .. mysqld.pid mysqld.sock mysqld.sock.lock إذا لم يكن الملفّ موجودًا فربما يكون السبب هو أنّ MySQL يحاول إنشاءه دون أن تكون لديه الصلاحيّات المناسبة لذلك. يمكن التأكّد صحّة الصلاحيّات بتغيير ملكيّة المجلّد إلى المستخدم والمجموعة mysql: sudo chown mysql:mysql /var/run/mysqld/ ثم تأكّد بعد ذلك من أنّ المستخدم mysql لديه الصلاحيّات المناسبة على المجلّد. تصلُح الصلاحيّات 755 لأغلب الحالات: sudo chmod -R 755 /var/run/mysqld/ أخيرًا؛ أعد تشغيل MySQL لترى ما إذا كان يستطيع إنشاء الملفّ المقبس من جديد: sudo systemctl restart mysql ثم حاول الوصول إلى سطر أوامر MySQL. إن استمرّ خطأ المقبس في الظهور، فقد يشير ذلك إلى وجود مشكلة أعمق في خادوم MySQL، وفي هذه الحالة تجب مراجعة سجلّات الأخطاء بحثًا عن ما يقود إلى معرفة سبب المشكلة. ترجمة – بتصرّف – للمقال How To Troubleshoot Socket Errors in MySQL لصاحبه Mark Drake. اقرأ أيضًا كيف تعرض سجلّات الأخطاء وتشخّص الاستعلامات في MySQL كيف تسمح بالاتّصال عن بعد بقاعدة بيانات MySQL كيف تعالج انهيار خادوم MySQL كيف تصلح الجداول المعطوبة في MySQL
  8. فلنفترض أنّ لديك مقطع فيديو طويلًا تريد قطع جزء من وسطه دون أن تكلّف نفسك عناء استيراد المقطع إلى محرّر فيديو، وقطع أجزاء منه، ثم تصديره من جديد. هذه الطريقة مملّة، وعلاوةص على ذلك تغيّر ترميز (Transcoding) الفيديو لغير حاجة. توجد طريقة سهلة لقصّ مقاطع الفيديو من سطر الأوامر باستخدام برنامج avconv عن طريق تنفيذ الأمر التالي في سطر الأوامر: avconv -i [input file] -ss [start time] -t [duration] -codec copy [output file] سنعطي مثالًا على كيفيّة تنفيذ الأمر أعلاه. فلنفترض أنّ لدينا مقطع فيديو يبدأ بـ 42 ثانية لا نرغب فيها. نحتاج لتعيين المعامل ‎-ss إلى القيمة 00:00:42. يقبل هذا المعطى رمزًا زمنيًّا بصيغة "ثوان:دقائق:ساعات". يخبر المعامل البرنامج أنّنا نريد الإبقاء على محتوى الفيديو الموجود بعد 42 ثانية. ماذا لو كانت لدينا 12 ثانيّة أخرى غير مرغوب بها في آخر الفيديو؟. في هذه الحالة يمكننا استخدام المعامل ‎-t لتحديد المدّة التي نريد الاحتفاظ بها من الفيديو. يوجد إشكال بسيط هنا، فقيمة المعامل ‎-t هي مدّة زمنيّة وليست نقطة زمنيّة محدّدة، وهذه المدّة هي الطول الإجمالي للمقطع الناتج. يعني هذا أنّ ما كان يوجد عند النقطة الزمنيّة 00:00:42 سيصبح عند 00:00:00 في الملفّ الناتج عن القصّ. وبالتالي إنْ أردنا قصّ 12 ثانيّة من آخر الفيديو فسنحتاج لعمليّة حسابيّة بسيطة. توجد طريقة سهلة تتمثّل في طرح قيمة المعامل ‎-ss من النقطة الزمنيّة التي تريد التوقّف عندها، واستخدام هذه القيمة في المعامل ‎-t. إذا كنّا نريد التوقّف عند النقطة 00:04:08 فإنّ قيمة ‎-t ستكون 00:03:26. نحصُل في النهاية على الأمر التالي: avconv -i input.mkv -ss 00:00:42 -t 00:03:26 -codec copy output.mkv لدينا الآن مقطع فيديو بطول 3 دقائق و26 ثانيّة. هذه هي طريقة قصّ الفيديو باستخدام avconv نظريّا. عمليًّا، قد تحتاج لتغيير بسيط. لسبب مّا لا يُنسَخ الصوت إلى الفيديو الناتج بطريقة جيّدة، لذا قد تحتاج لإعادة ترميز الصوت. إنْ واجهت هذه المشكلة فيمكنك التغلّب عليها بسهولة باستخدام الأمر التالي: avconv -i input.mkv -ss 00:00:42 -t 00:03:26 -c:v copy -c:a flac output.mkv يطلُب الأمرُ من البرنامج بنسخ ترميز الفيديو من المصدر، وفي نفس الأثناء إعادة ترميز الصوت إلى flac، الذي هو ترميز يضغط الصوت بدون فقد للمعلومات. ترجمة – بتصرّف – للمقال How to Trim Videos with the Command Line Using AVConv.
  9. يهدف هذا الدليل إلى أن يكون مصدرًا ونقطة بداية لتشخيص واستكشاف مشاكل وإعدادات MySQL للتمهيد لحلها. سنتناول بعضًا من المشاكل التي يتعرّض لها كثيرون من مستخدمي MySQL ونوفّر إرشادات لكيفية تشخيصها وحلها. سيشتمل الدليل كذلك على روابط لمقالات من أكاديميّة حسوب ومن التوثيق الرسمي للاستفادة منها. كيف تعرض سجلّات الأخطاء وتشخّص الاستعلامات في MySQL كيف تسمح بالاتّصال عن بعد بقاعدة بيانات MySQL كيف تعالج انهيار خادوم MySQL كيف تصلح الجداول المعطوبة في MySQL كيف تشخّص أخطاء المقابس Sockets في MySQL يحدُث أحيانًا أن تُصاب جداول MySQL بأعطاب سببها أخطاء أدّت إلى استحالة قراءة البيانات الموجودة بها. تؤدّي محاولة قراءة بيانات من جداول معطوبة – عادةً - إلى انهيّار الخادوم. في ما يلي بعضٌ من الأسباب الشائعة لعطب الجداول: توقّف خادوم MySQL أثناء عمليّة كتابة في جدول. التعديل، من طرف برنامج خارجي، على جدول يُعدِّل عليه الخادوم في نفس الوقت. إيقاف الخادوم دون سابق إنذار. إخفاق في عتاد الحاسوب. وجود علّة في برمجة MySQL. إذا كنت تظنّ أنّ أحد جداول قاعدة البيانات معطوب، فيجب أخذ نسخة احتيّاطيّة من مجلّد البيانات قبل تشخيص عطب الجدول أو محاولة إصلاحه.يُساعد هذا الإجراء في التقليل من خطر فقد البيانات. أول ما يجب عليك فعلُه هو إيقاف خدمة MySQL: sudo systemctl stop mysql ثم نقل جميع بيانات MySQL إلى مجلّد جديد. يوجد المجلّد المبدئي لبيانات MySQL بالنسبة للخواديم العاملة بتوزيعة أوبونتو في المسار ‎/var/lib/mysql/‎: cp -r /var/lib/mysql /var/lib/mysql_bkp تصبح جاهزًا – بعد إنشاء نسخة احتيّاطيّة – للبدء في التحقيق لمعرفة ما إذا كان الجدول معطوبًا أم لا. إذا كان الجدول يستخدم محرّك التخزين (MyISAM) فيمكن التحقّق من عطب الجدول باستخدام التعليمة CHECK TABLE من سطر أوامر MySQL: CHECK TABLE table_name; ستظهر رسالة في مُخرجات الأمر تخبرك ما إذا كان الجدول معطوبًا أم لا. إذا كان جدول MyISAM معطوبًا فيمكن عادةً إصلاحه بتنفيذ التعليمة REPAIR TABLE: REPAIR TABLE table_name; ستُظهرمخرجات التعليمة - بافتراض أنّ عمليّة الإصلاح ناجحة – رسالة تشبه التالي: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ أما إذا لم تنجح العمليّة وبقي الجدول معطوبًا فإنّ توثيق MySQL يقترح بضعة طرق بديلة من أجل إصلاح الجداول المعطوبة. بالنسبة للجداول التي تستخدم محرّك التخزين InnoDB، فعمليّة الإصلاح مختلفة. بدأت قواعد بيانات MySQL باستخدام محرّك InnoDB - الذي يتميّز بتوفّرعمليّات التحقّق التلقائي من الأعطال وإصلاحها - مبدئيًّا منذ الإصدر 5.5. يتحقّق InnoDB من وجود أعطال في الصفحات بحساب مجموع تحقّق (Checksum) لكلّ صفحة يقرأها؛ وفي حال وجود اختلاف بين مجموعات التحقّق فإنّه يوقف خادوم MySQL تلقائيّا. نادرًا مّا توجد حاجة لإصلاح الأعطاب في الجداول التي تستخدم InnoDB، إذ أنّ InnoDB لديه آليّة يمكنها حلّ أغلب الأعطاب عند إعادة تشغيل الخادوم. على الرغم من ذلك، ينصح توثيق MySQL باستخدام طريقة "الطرح وإعادة التحميل" Dump and reload. يعني هذا إعادة الوصول إلى الجدول المعطوب باستخدام الأداة mysqldump، لإنشاء نسخة احتيّاطيّة منطقيّة من الجدول يُحتَفظ فيها ببُنيته وبياناته؛ ثم إعادة تحميل الجدول إلى قاعدة البيانات. حاول إعادة تشغيل خدمة MySQL لترى إن كنت ستتمكّن من الوصول إلى الخادوم، مع استحضار آلية عمل طريقة "الطرح وإعادة التحميل: sudo systemctl restart mysql إنْ استمرّ انهيّار الخادوم أو استحال الوصول إليه لسبب آخر، فربّما يكون من المفيد تفعيل الخيّار force_recovery ضمن عدادات InnoDB. يمكن فعلُ ذلك بسهولة عبر تحرير الملفّ mysqld.cnf: sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf أضف السّطر التالي في المقطع [mysqld] من الملفّ: . . . [mysqld] . . . innodb_force_recovery=1 احفظ الملفّ ثم أغلقه، ثم جرّب إعادة تشغيل MySQL من جديد. إذا استطعت النجاح في الوصول إلى الجدول المعطوب فاستخدم الأداة mysqldump لطرح بيانات الجدول في ملفّ جديد. يمكنك تسميّة الملفّ بما يحلو لك. في ما يلي اخترنا الاسم out.sql: mysqldump database_name table_name > out.sql الخطوة المواليّة هي حذف الجدول من قاعدة البيانات. يمكنك استخدام الصيغة التاليّة لتفادي فتح سطرأوامر MySQL من جديد: mysql -u user -p --execute="DROP TABLE database_name.table_name" أخيرًا، استعد الجدول بالاعتماد على ملفّ الطرح الذي أنشاته للتو: mysql -u user -p < out.sql فليكن في علمك أن محرّك التخزين InnoDB – في العموم – أكثر مقاومةً للأخطاء من محركّ التخزين القديم MyISAM. لا يعني هذا أنّ جداول InnoDB غير معرَّضة للأخطاء، لكن وجود ميزات التغلّب على الأخطاء تلقائيّا يجعل احتمال عطب الجداول وما ينتج عنه من انهيّارات أقلّ بكثير. ترجمة - بتصرّف - للمقال How To Fix Corrupted Tables in MySQL لصاحبه Mark Drake. اقرأ أيضًا المقال التالي: كيف تشخّص أخطاء المقابس Sockets في MySQL
  10. يمكن أنْ يكون تطوير موقع ويب بدون الأدوات المناسبة مدعاة للكثير من الإحباط. ستجد أحيانًا أنّك تعمل على برنامج متقدّم جدًّا بالنسبة لمستواك، أو يمكن أن تكون بحاجة للانتقال إلى برنامج موجّه للمحترفين. يتعلّق الأمر بمستوى قدراتك بوصفك مصمّم مواقع، إلّا أنّ برامج التصميم للويب هي - مجملًا - نفسُها سواءٌ كنت مبتدئًا أو مستخدمًا متقدّمًا. الفرقُ الوحيد هو أنّك قد لا تستخدم جميع الميزات المتوفّرة في أداة معيّنة إنْ كنت مستخدمًا مبتدئًا أو بخبرة متوسّطة. تحتاج لاستكشاف ما يستخدمه المحترفون ومتابعة دورات وقراءة مقالات لمعرفة الطريقة التي تجعل تصميماتك أفضل ما يمكن أن تصل إليه. لذا، سنلخّص في هذا المقال تسعةً من برامج التصميم التي تحتاجها أكثر من غيرها، ونشرح مالذي يُستخدَم فيه كلّ واحد منها خلال عمليّة التطوير. ووردبريس ووردبريس هو نظام إدارة محتوى وتدوين بلغت شهرته ومرونته حدًّا جعل ثُلث مواقع الويب الموجودة تستخدمه. تمكن استضافة ووردبريس ذاتيًّا (وبالتالي يكون لديك التحكّم الكامل في موقعك). علاوة على ذلك، فإنّ المنحى التعلّمي لووردبريس سهلٌ مقارنة بمنصّات مثل Weebly وShopify. يتوفّر برنامج ووردبريس مجانًا، لكنْ ستحتاج للدفع مقابل أمور من قبيل اسم النطاق (Domain name)، الاستضافة (Hosting) والقوالب. بالمختصر، تهدف هذه المنصّة الرائعة لبناء مواقع الويب إلى العمل في الخلفيّة وإعطائك فرصة إنشاء صفحات، وتدوينات، وقوالب وغيرها بسهولة. فوتوشوب يشتهر فوتوشوب بتحرير الصوّر والتعديل عليها، إلّا أنّ هذا المحرّر الضخم يصلُح لأي نوع من مشاريع التصميم. يُستخدَم فوتوشوب لإنشاء شعارات لمواقع الويب أو لتصميم نماذج أوليّة لها. ليس غريبًا أن تجد من يستخدم فوتوشوب لإنشاء مخطّط تصميم كامل لموقع ويب، اعتمادًا على نظام الطبقات (Layers) والتصدير الذي يتوفّر عليه فوتوشوب ويوفّر الكثير من الميزات. Sketch يُنظَر إلى برنامج Sketch غالبًا على أساس أنّه إصدار مُبسَّط من فوتوشوب. يعود السبب في ذلك إلى أنّ Sketch يركّز كثيرًا على التصميم للويب، في حين يمكن استخدام فوتوشوب لأي مشروع تصميم. الميزة الأساسيّة لبرنامج Sketch هي آليّة عمله مع التصاميم المتجهيّة (Vectors)، ممّا يجعله رائعًا لتوسعة التصاميم أو تقليصها بدون فقد أي بيانات أثناء العمليّة. علاوةً على ذلك، يمكن اختبار التصميم على الأجهزة الجوّالة مباشرةً من البرنامج. GIMP توجد في GIMP تقريبًا نفس الميزات الموجودة في فوتوشوب. الفرق الأساسي هو أنّ GIMP مجانيّ تماما. يحاجج بعض المصمّمين بالقول إنّ GIMP معقّد الفهم قليلًا، إلّا أنّه منتَج مجانيّ رائع يوفّر ميزات ضروريّة للعمل على تصميم المواقع وتحرير الصوّر. Adobe Dreamweaver يعدّ Dreamweaver مصنعًا لتصميم المواقع، حيث يوجد محرّر شفرة برمجيّة على جانب الشاشة ومعاينة لموقع الويب على الجانب الآخر. يمكنك بهذه الطريقة التعديل على الشفرات البرمجيّة ورؤية النتيجة مباشرة. في حين يركّز فوتوشوب على إنشاء عناصر موقع الويب أو النماذج الأوليّة، فإنّ Dreamweaver ينشئ موقع ويب جاهزًا للعمل. يمكن بنهاية العمليّة تصدير ملفات موقع الويب ووضعها على الخادوم. WAMP الخطوة المواليّة لتصميم موقع باستخدام برنامج مثل ووردبريس أو Dreamweaver هي اختباره، ثم تعديله وفقًا لنتيجة الاختبارات. قد لا ترغب في الدفع مقابل خادوم، فقط لعرض موقع نصف مكتمل على الجمهور. توجد طريقة أفضل، وهي الحصول على خادوم محلّي مثل WAMP. بالمختصر، تشغّل الخادوم على حاسوبك الشخصيّ، وتنشئ أو تختبر موقع الويب كما لو كان موجودًا على الشبكة، وأخيرًا تنقل الملفات إلى الخادوم المتاح للعموم. يعمل برنامج WAMP على أنظمة التشغيل وندوز، ولكن يوجد بديل يعمل على حواسيب Mac وهو MAMP. عجلة الألوان (Color Wheel) من المهمّ جدًّا أن تكون لديك أداة ألوان أثناء تصميم موقع ويب. عجلة الألوان أداة مجانيّة توفّر طريقة لبناء مخطّطات ألوان ذات مظهر متناسق لاستخدامها ضمن موقع الويب. قد تكون لديك فكرة باستخدام لون معيّن في جزء من الموقع، إلّا أنّ المشكلة هي أنّ ألوانًا كثيرة لن تظهر متناسقة مع اللون الرئيسي لموقعك. تأتي عجلة الألوان للتغلّب على هذه المشكلة، إضافة إلى أنّها تساعد في تحديد الرمز الدقيق للون مّا، بدلًا من تخمينه. Adobe Spark أو Canva ظهر برنامج Canva قبل Adobe Spark، لكنّ الاثنين يعملان جيّدًا لتصميم البصريّات الاحترافيّة بأنواعها للاستخدام في شبكات التواصل الاجتماعي، أو منصّات التدوين، أو البطاقات المهنيّة، وغيرها. تختصر الأداتان العمليّة الطويلة لإنشاء موادّ بصريّة من الصفر على فوتوشوب. كما توفّر قوالب احترافيّة كثيرة للاختيّار بينها. بالمختصر، تمكّن غير المصمّمين من إنشاء موادّ بصريّة جميلة للاستخدام على شبكات التواصل الاجتماعي أو على مواقع الويب دون اللجوء إلى فوتوشوب. ترجمة – بتصرّف – للمقال ‎9 Must-Have Web Design Tools and Alternatives لصاحبه Brenda Stokes Barron.
  11. يشرح هذا المقال كيفيّة إنشاء صور متحرّكة بصيغة GIF انطلاقًا من مجموعة صور بصيغة PNG عبر سطر الأوامر على لينكس (توزيعة أوبونتو). أدناه مثال على تجميع صور لإنشاء صورة متحرّكة تُستخدم لشدّ الانتباه. نبدأ أوّلًا بتثبيت الأداة ImageMagick التي سنستعملها خلال هذا الدرس: sudo apt install imagemagick الخطوة التاليّة لتثبيت الأداة هي الانتقال إلى المجلّد الذي يحوي مجموعة الصوّر التي نريد استخدامها لإنشاء الصورة المتحرّكة. بالنسبة لهذا المثال فمسار المجلّد هوDesktop/shebang : cd Desktop/shebang من السهل جدًّا استخدام ImageMagick وفهمُ آليّة عمله. يوفّر ImageMagick برنامجًا يُسمّى convert، هو الذي سنستخدمه لتحويل الصور. يمكن عبر الأمر التالي إظهار صفحة التوثيق الخاصّة بالبرنامج، والتي تشرح آليّة عمله: man convert تُظهر صفحة التوثيق السطر التالي، والذي يوضح طريقة استخدام البرنامج: convert [input-option] input-file [output-option] output-file نمرّر للبرنامج convert خيّارًا للإدخال، وملفًّا مُدخلًا، ونحدّد خيّارات عمليّة التحويل وأخيرًا اسم الملفّ الناتج عن عمليّة التحويل. نفّذ الأمر التالي في سطر الأوامر: convert -delay 2 -loop 0 *.png -scale 480x270 shebang.gif فلنمرّ على الأمر أعلاه خطوة خطوة. الخيّار الأوّل هو ‎-delay. يعيّن هذا الخيّار مدّة التوقّف بين إطارات الصورة المتحرّكة، بالأجزاء المئويّة من الثانيّة. أعطيناه هنا القيمة 2 (أي جزئيْن مئويّين من ثانيّة). نحدّد بعد ذلك عدد مرات تكرار التحريك عبر الخيّار ‎-loop. نريد ألّا يتوقّف التحريك، لذا نعطي القيمة 0 للخيّار. إنْ أردنا تحريك الصورة لمرّة واحدة فقط، فستكون القيمة 1، وإنْ أردنا تحريكها مرتين فالقيمة المناسبة هي 2. نريد أن يكون مُدخَل البرنامج مجموعةً من الصوّر، لذا نستخدم حرف البدل * لإخبار برنامج convert أنّنا نريد استخدام جميع الصوّر الموجودة في مجلّد العمل التي تنتهي بـpng. لدينا صوّرPNG مُصدَّرة من برنامج Blender، وتبلغ أبعادها ‎1920 x 1080، وهو قيّاس كبير جدًّا ولا يناسب صوّر GIF المتحرّكة، فنحدّد أبعاد الملفّ الناتج عن التحويل عبر الخيّار ‎-scale لتكون الأبعاد ‎.480×270 أخيرًا، ندخل اسم الملفّ الناتج وصيغته (shebang.gif). ترجمة – بتصرّف – للمقال How To Create Animated GIFs from a PNG Sequence with ImageMagick and the Command Line.
  12. ربّما تكون شاشات اللّمس أحد الأسباب التي جعلت الأجهزة الجوّالة ذات شعبيّة كبيرة جدّا. تحذف شاشات اللمس المسافة بين الشخص والجهاز التفاعليّ، ونتيجةً لذلك، يحسّ الأشخاص بأنّ شاشات اللمس بديهيّة وسهلة الاستخدام. لهذا السبب، يمكن إدماج المنزلقات (Sliders) بسهولة في الأجهزة الجوّالة. تشجّع المنزلقات المستخدمين على استكشاف محتوى موقع بسهولة عن طريق إجراء حركات أفقيّة على الشاشة. رغم ذلك، فإنّ المنزلقات خيار قليل الاستخدام للتصفّح على الجوّال. تقدّم المنزلقات خيّار تصفّح رائعًا للمواقع والتطبيقات التي لديها عناصر قليلة لاستكشافها. تبدو المنزلقات طبيعيّة للمستخدمين، وتوفّر طريقة مرحة لتعديل الإعدادات أو استكشاف الميزات. يسهُل على الزوّار التعرّف على المنزلقات، ممّا يجعلها سهلة الاستخدام؛ وبالتالي، خيّارًا عمليًّا جدًّا ليستغلّه المصمّمون. ما لذي تصلُح له المنزلقات المنزلقات سهلة الفهم والاستكشاف، وهو ما يجعلها بديهيّة. تمثّل المنزلقات - نظرًا لكونها لا تأخذ مساحة كبيرة - خيّارًا جيّدًا في الأجهزة التي تستخدم شاشات لمس، التي هي شاشات صغيرة. كما أنّ المنزلقات مناسبة لما تمثّله من إضافة لتصميم واجهات المستخدم. تساعد المنزلقات المستخدمين في التحرّك جيئة وذهابًا، أو زيّادة السرعة أو الصوت، وتمنح حسَّا نسبيًّا للأنشطة (جعل مستوى الصوت أرفع ممّا هو عليه الآن). مصاعب عند استخدام المنزلقات النظر إلى التصميم من زاويّة المستخدم أمر مهمّ في سبيل التأكد من قابليّة الاستخدام (Usability). مستخدمو الجوّال – في الغالب – مستعجِلون أو مشتّتو الانتباه عند استخدام أجهزتهم. يمكن أنْ يستخدموا أجهزتهم وهم يتجوّلون في مركز تسوّق، أو يتناولون الطعام، أو يتنزهون في الحديقة. عندما يمرّ المستخدمون على منزلق، فهم يفعلون ذلك في الغالب مشتّتي الانتباه أو مستعجِلين. يعني هذا غالبًا دفع المنزلق كثيرًا إلى أحد الجانبيْن أثناء محاولة إبعاد أصابعهم عن الشاشة. يمكن أن تكون المنزلقات كذلك صعبة الاستخدام بالنسبة للأشخاص الذين لديهم صعوبات حركيّة. قد يكون من الصعب جعل المنزلق يعمل بالطريقة التي تفضّل أن يعمل بها إذا تلقّى ضغطًا زائدًا قليلًا على الشاشة. قد تكون المنزلقات كذلك صعبة الاستخدام بالنسبة للمستخدمين المتقدّمين في السنّ الذين ترتعش أيديهم؛ وهو ما يجعل ضمان نتيجة محدّدة صعبًا أثناء استخدام المنزلق. ربّما يفقد المستخدمون في مثل هذه الحالات الأمل في إمكانيّة تصفّح الموقع. ضع الجمهور المستهدَف من الموقع بالحسبان. إنْ كنت تستهدف زوّارًا متقدّمين في السن، أو أشخاصًا لديهم صعوبات حركيّة أو صحيّة، فلن يكون المنزلق خيّارك الأمثل. فكّر في مشاكل قابليّة الاستخدام بعد التأكّد من ملاءمة استخدام المنزلقات لجمهورك المستهدَف، يأتي الوقت للتفكير في قابليّة استخدام التصميم. يعتمد مستخدمو شاشات اللمس – غالبًا – الأصابع عند العمل على أجهزتهم. بما أنّك تريد أن يكون تصميمك قابلًا للاستخدام، فمن المهمّ استكشاف أماكن شاشة اللمس التي سيشغلها الأصبع أو اليد عند استخدام الجهاز الجوّال. سيساعد ذلك في وضع المنزلق بحيث يمكن استخدامه والتعامل معه. يختلف التصميم لسطح المكتب، حيث تُستخدَم الفأرة لتحريك المنزلق، عن الأجهزة بشاشات لمس. يجب أن تسعى في حالة شاشة لمس إلى التقليل من إمكانيّة الخطأ، أو الضغط على روابط أخرى، أو تغطيّة التعليمات أثناء وضع المستخدمين أصابعهم على الشاشة. يجب أن تظهر جميع اللافتات (Labels) والقيّم التي تفسّر المنزلق بجانب أصابع المستخدم وزرّ التمرير، أو فوقهما. استخدم المنزلقات لترك انطباع بصريّ واضح يفيد غالبًا استخدام المنزلق لتقديم متتاليّة من الصوّر البصريّة للمستخدمين إذا كان لديك محتوى مهمّ لعرضه، ولكنّ به معلومات كثيرة جدًّا، يصعُب استكشافها أو استيعابها على زوّار الموقع. على سبيل المثال، إنْ رغبت في عرض سلسلة من الأحداث التي يمكن للمستخدم متابعتها بهدف شراء منتَج من موقع تجارة إلكترونيّة، فإنّ مجموعةَ صوّر واضحة تقود المستخدم عبر خطوات متتاليّة يمكن أن تكون مفيدة ولا تتطلّب الكثير من العمل. تقتصد الطريقة السابقة أعلاه من وقت الزائر وتجعل الموقع سهل التصفّح. يمكن استخدام هذه العمليّة في حالات كثرة لمساعدة المستخدم في تصفّح موقع أو تطبيق للجوّال. أنواع المنزلقات التي يمكنك استخدامها توجد أنواع عدّة يمكن استخدامها عند تصميم موقع أو تطبيق: المنزلقات المنفردة (Single sliders): مناسبة للعمل مع قيمة وحيدة في كلّ مرة. المنزلقات المزدوجة (Double sliders): مناسبة للعمل مع مجال من القيم (مثلًا، منزلق للقيمة الدنيا وآخر للقيمة القُصوى). المنزلقات المتواصلة (Continuous sliders): تسمح المنزلقات المتواصلة بتحديد موقع نسبي على مجال مُحدَّد بقيمتين دنيا وقُصوى. المنزلقات المتقطّعة (Discrete sliders): تتميّز بنقاط توقّف يمكن للمستخدم استعمالها لإعطاء قيمة دقيقة. الدقة أم التخمين؟ قد يكون صعبًا أو معقّدًا بالنسبة للزائر استخدامُ منزلق بصورة دقيقة. يتأكّد هذا الأمر على شاشات اللمس. من الصعب جدًّا الحصول على الدقّة في التحديد إذا كنت أمام مؤشّر تمرير صغير على شاشة لمس. يكون استخدام المنزلقات – غالبًا – أسهل عندما لا تكون دقّة القيمة المُختارة مهمّة. إنْ كان المستخدم يستطيع استخدام المنزلق لمشاركة قيمة تقريبيّة، فسيكون ذلك – غالبا – كافيّا. مالعمل إنْ احتجت لقيمة دقيقة؟ يمكن إنشاء منزلق بقيم عدديّة قابلة للتعديل إذا كان من اللازم على المستخدم إدخال قيمة مضبوطة. يعني هذا أنّه سيكون باستطاعة المستخدم لمس المنزلق ثم إدخال عدد في صندوق نصّيّ. يمكن أن يُصبح الصندوق قابلًا للتعديل كلّ ما لمس الأصبعُ المنزلق. رغم ذلك، إنْ كانت واجهة المستخدم تتطلّب قيمة دقيقة من أجل قابليّة الاستخدام، فسيكون من الأفضل عدم استخدام المنزلقات. عرض مجال قِيم تسخدم بعض المنزلقات قيمًا عدديّة بحيث يمكن للزائر تحديد اختيّارات. يمكن لتطبيق تجارة إلكترونيّة أن يوفّر مجموعة من المنتجات تبدأ أسعارها من دولار واحد، لكنّها تصل إلى 999 دولار. يكون من المفيد في هذه الحالة – غالبًا – عرضُ مجال القيّم المتوفّرة على المتجر بدقّة. تمنح هذه الطريقة المستخدم إمكانيّة إنشاء مجال مخصَّص للعناصر التي يريدون استكشافها. تتجنّب بتخصيص مجال من القيّم حصول الزائر على إجابة بمجموعة عناصر فارغة. ستوفّر مجموعة قليلة من قيّم البحث نتيجة بعناصر أقلّ، في حين يوفّر مجال بحث أوسع عناصر أكثر. على الرغم من ذلك، لن يحدّد المستخدمون مجموعةً من القيّم إلّا لسبب، ولن يزعجهم غياب مجموعة من الخيّارات لا يمكنهم دفع ثمنها. أعط للمستخدمين القدرة على استكشاف التطبيق، حتى ولو لم يكونوا يفهمون مغزى المنزلق والمجالات التي يتيحها للمستخدم. وفّر تغذيّة راجعة بصريّة للمستخدمين أضف تغذيّة راجعة بصريّة لتفاعلات المستخدمين مع المنزلق، فتلك هي طريقة العمل التي يتوقّعها المستخدم. وفّر إجابة بصريّة فوريّة للمستخدم عند استخدامه لمنزلق أو عندما يُدخل معلومات في صندوق إدخال. يمكن استخدام التحريكات (Animations)، حالات الحومان (Hover)، والتأشير فوق العناصر (Rollover) للتواصل مع المستخدم. تجذب هذه الميزات انتباه المستخدم وتخلُق بالتالي قناة اتّصال معه. مواقع الويب التفاعليّة جذّابة دائما. عندما تمدّ المستخدم بتغذيّة راجعة بصريّة فإنّه يشعُر بالتقدير، ممّا ينتُج عنه إحساس بالثقة في قدرته على تصفّح الموقع. خاتمة تبدو المنزلقات بديهيّة وسهلة الاستخدام في تطبيقات الويب؛ كما أنّها خيّار جمالي، إلّا أنّها ليست دائمًا الأداة الأفضل للاستخدام. إنْ كنت تبحث عن قيم نسبيّة، وتعلم أنّ الجمهور المستهدَف لديه قدرة حركيّة جيّدة، فإنّ المنزلقات قد تكون خيّارًا جيّدا. أمّا إذا كنت تبحث عن قيّم دقيقة، فسيكون من المفيد توفير خيّارات لإدخال تلك القيّم. اعمل، بوصفك مصمِّمًا، على إنشاء شرائط تمرير يمكن للمستخدم من خلالها اختيار مجال من القيّم يمكن استغلاله على الموقع. يساعد هذا الأمر المستخدمين الذين قد يجدون صعوبة في تحديد قيم دقيقة عند استخدام المنزلق. ترجمة – بتصرّف – للمقال How to Create a Good UI Slider in Mobile Design لصاحبه Bogdan Sandu.
  13. يهدف هذا الدليل إلى أن يكون مصدرًا ونقطة بداية لتشخيص واستكشاف مشاكل وإعدادات MySQL للتمهيد لحلها. سنتناول بعضًا من المشاكل التي يتعرّض لها كثيرون من مستخدمي MySQL ونوفّر إرشادات لكيفية تشخيصها وحلها. سيشتمل الدليل كذلك على روابط لمقالات من أكاديميّة حسوب ومن التوثيق الرسمي للاستفادة منها. كيف تعرض سجلّات الأخطاء وتشخّص الاستعلامات في MySQL كيف تسمح بالاتّصال عن بعد بقاعدة بيانات MySQL كيف تعالج انهيار خادوم MySQL كيف تصلح الجداول المعطوبة في MySQL كيف تشخّص أخطاء المقابس Sockets في MySQL يعدّ التوقّف عن العمل، أو الإخفاق في تشغيل الخدمة بسبب نقص حجم الذاكرة، أكثرَ أسباب الانهيّارات التي تواجهها MySQL شيوعا. ستحتاج – من أجل التحقّق من الأمر – إلى مراجعة سجل أخطاء MySQL بعد الانهيار. أوّلًا، ابدأ بمحاولة تشغيل خادوم MySQL بكتابة الأمر: sudo systemctl start mysql ثم راجع سجلّات الأخطاء لمعرفة سبب انهيّار MySQL. يمكن استخدام الأمر less لمراجعة السجلّات صفحةً صفحة: sudo less /var/log/mysql/error.log رسالتا الخطأ Out of memory و mmap can’t allocate من الرسائل الشائعة التي تنمّ عن نقص في الذاكرة. في ما يلي بعضٌ من الحلول المحتملة لنقص حجم الذاكرة: تحسين إعدادات MySQL. الأداة مفتوحة المصدر MySQLtuner رائعة لهذا الغرض. يؤدّي تنفيذ سكربت MySQLtuner إلى إظهار مجموعة من التعديلات الموصى بإجرائها على ملف إعدادات MySQL‏ (mysqld.cnf). يُرجى الانتباه إلى أنّه كل ما طالت مدّة تشغيل خادوم MySQL قبل استخدام MySQLTuner كانت اقتراحات السكريبت أحسن. استخدم حاسبة MySQL هذه لتقدير حجم الذاكرة المطلوب بالنسبة لكلّ من إعداداتك الحاليّة وتلك التي يقترحها MySQLtuner. التقليل من اعتماد تطبيق الويب على MySQL في تنزيل الصفحات. إضافة نظام تخزين مؤقّت (Cache) إلى التطبيق هو الوسيلة المعتادة لهذا الأمر. من أمثلة استخدام هذه الطريقة نظامُ Joomla الذي يتضمّن وظيفة تخبئة مُضمَّنة يمكن تفعيلها، والإضافة WP Super Cache التي تضيف خاصيّة التخبئة إلى ووردبريس. الترقيّة إلى خادوم افتراضي ذي قدرات أكبر. يُنصَح بخادوم لا تقلّ ذاكرة الوصول العشوائي فيه عن 1GB مهما كانت نوعيّة استخدام قاعدة البيانات MySQL، إلّا أنّ حجم البيانات ونوعيّتها يمكن أن يؤثر كثيرًا على متطلّبات الذاكرة. يُرجى الانتباه إلى أنّ ترقيّة الخادوم، رغم أنّها من المرجّح أن تحلّ المشكلة، إلّا أنه حلّ لا يُنصَح به إلّا بعد التحقّق من الخيّارات الأخرى ومعرفة احتمالات نجاحها. تكلّف إضافة قدرات أكبر إلى الخادوم سعرًا أعلى ويجدر بك اعتماد هذا الخيّار إلّا إذا كان الحلّ الأمثل في نهاية المطاف. انتبه أيضًا إلى أنّ توثيق MySQL يتضمّن اقتراحات أخرى لتشخيص الانهيّارات ومنع حدوثها. ترجمة – بتصرّف – للمقال How To Address Crashes in MySQL لصاحبه Mark Drake. اقرأ أيضًا المقال التالي: كيف تصلح الجداول المعطوبة في MySQL
  14. ليس لدينا وقتٌ كثير. حتى وأنت تستقطع وقتًا لقراءة هذا المقال، فإنّ إشعارات سطح المكتب بدأت فعلًا في التراكم؛ فترى رسائل سلاك (Slack) تزداد، وتسمع الهاتف يهتزّ؛ ممّا يعني التزاماتٍ أكثر ومهامّ أخرى تحتاج لإضافتها إلى قائمة المهامّ التي لا تنتهي. يتسبّب هذا الكمّ المتزايد من الضّغط في جعل مهامّ مثل تقويم تجربة المستخدم (User eXperience) على موقعك تبدو استغلالًا تافهًا للوقت. بينما الواقع أنّ كلّ ما قمت به من تصميم رسومات، وإنشاء محتوى، وتطوير ويب، وتحسين لمحرّكات البحث، وتسويق عبر شبكات التواصل الاجتماعي، وإعلانات مموَّلة يمكن أن يذهب أدراج الرياح إنْ لم تحسّن تجربة المستخدم. تقع الكثير من الشركات في فخّ التركيز المبالغ فيه على المبيعات وحركة البيانات، دون تدعيم الموقع الذي ترسل إليه الزوّار. السقوط في شَرَك لعبة الأرقام طريقة مؤكَّدة لتحطيم سمعتك الإلكترونيّة، والإضرار بتماسك الهويّة التجاريّة (Brand). ستجد أنّ النجاح في مشهد رقميّ تُخصِّص فيه الكثير من الشركات موارد مهمّة لإرضاء الزوّار أمرٌ صعبٌ جدًّا، إنْ لم تكن تدرك قيمة زوّار موقعك (زبنائك). تدرك – إذن – أهميّة تجربة المستخدم. تدرك كذلك ألّا وقت كثيرًا لديك. كيف يمكنك الرفع لأقصى حد من مستوى الاستفادة من تحليل تجربة المستخدم، في وقت قصير؟ إنْ كنت تعرف هويّتك التجاريّة جيّدًا وتفهم مالذي تبحث عنه، فيمكنك إكمال تقويم تجربة المستخدم في ما لا يتجاوز خمس دقائق. سواءٌ أخذت خمس دقائق مرّةً في الشهر، أو مرّةً في الأسبوع، فتستطيع إجراء تحسينات كبيرة في معدّل الارتداد (Bounce rate)، ومعدّلات التحويل (Conversion rates)، و – عمومًا - العائد على الاستثمار (Return on investment, ROI) من حملاتك التسويقيّة. الجانب البصري (دقيقتان) تشبه ردّةُ فعل شخصٍ يزور موقع ويب لأوّل مرة ردّةَ فعله عند أوّل لقاء بشخص لا يعرفه، إذْ ستنبني ردّة الفعل هذه على الجانب البصريّ. تضع الطبيعة البشريّة وزنًا كبيرًا للانطباع الأوّل، فالبشر يرغبون في الشعور بأنّهم محقّون في حكمهم، حتى وإنْ لم يجدوا الفرصة لإلقاء نظرة أخرى. مهما قيل، فلن يكون ذلك كافيًّا لوصف أهميّة الانطباعات الأولى لزوّار موقع ويب، في ظلّ وجود هذا العدد المَهول من الشركات على الشبكة للاختيّار بينها. يكفي زرّ خارج عن موقعه، أو فقرة بمحاذاة خاطئة، أو خطأ مطبعي، لكي يرتدّ الزوّار إلى موقع منافس. حتى إنّ موقعًا خاليًّا من الأخطاء يمكن أن يتسبّب في انطباع سيّئ إنْ لم يتمسّك بما فيه الكفاية بالهويّة التجاريّة، والهدف العام للرسائل التي يريد تمريرها. خصّص دقيقتيْن لمراجعة الجانب البصري للموقع من وجهة نظر الزائر، وتأكّد من تسجيل أي اختلالات، أو محتوى خارج الإطار المخصّص له، أو ترتيب غير مناسب لمخطّطات الصفحة. ركّز – خصوصًا – على العناصر البصريّة التاليّة عند إجراء تحليل تجربة المستخدم في خمس دقائق: الألوان: هل هي متوافقة مع الهويّة التجاريّة؟ هل اختير الرمز السداسي العشري بما يتوافق مع هدف الفقرة أو الصفحة؟ هل الألوان ناعمة جدًّا أم خشنة جدّا؟ سهولة القراءة: هل الموقع سهلُ القراءة على كلّ من الأجهزة الجوّالة وأجهزة سطح المكتب؟ هل يُميَّز المحتوى المناسب على كلّ صفحة؟ الخطأ في المحاذاة: حتى الاختلالات البسيطة يمكنها إبداءُ الكثير عن عمل شركتك وأخلاقيّاتها. إنْ لم يكن بمقدورك إتقانُ موقعك الخاصّ فكيف ستتمكّن من توفير خدمات أو منتجات جيّدة لزبنائك المحتملين؟ التأثير العامّ: ما مدلول الموقع، أو صفحة منه، من وجهة نظر بصريّة؟ هل يتماشى موقعك ومحتواه مع الشخصيّة التي تعكسها هويّتك التجاريّة؟ التفاعل (دقيقتان) اطمأننتَ على أنّ الانطباع الأوّل للزوّار جيّد. يأتي الدّور الآن على الأمور الأكثر جدّيّة. هل أنت جاهز لإكمال العمل؟ هل أنت جادّ؟ تحتاج لأن تجعل تجربة المستخدم متناسقةً تمامًا من وجهة نظر بصريّة وتفاعليّة، حتى يقتنع الزوّار فعليًّا بما تقدّمه. وفّر لزوّارك العمق الذي ينتظرونه من موقع بميزات بصريّة فريدة. بدون الوظائف المناسبة لتكملة التعديلات البصريّة على الموقع، لن يبقى الزوّار طويلًا، ولن يستمرّوا بالتصفّح إنْ لم يجدوا الإجابات التي يحتاجونها على نحو أسهل أو أسرع من المواقع المنافسة. إنْ كان الجانب الوظيفي من الموقع يحتوي على أخطاء، أو بطيئًا، أو مخادعًا فقد يتسبّب ذلك في إبعاد المستخدِم عن التجربة الغامرة التي تحاول إنشاءها عبر التصميم البصري والمحتوى. خذ الوقت لتقويم العناصر التقنيّة التاليّة بهدف الرفع من مستوى تجربة المستخدم: الأيقونات: هل تلبّي الأيقونات حاجات هويّتك التجاريّة أو المجال الذي تعمل فيه؟ هل الرسومات واضحة ومناسبة للمعايير التي حدّدتها؟ هل يمكن للمستخدمين النقر على الأيقونات للحصول على معلومات أكثر إنْ كانوا يريدون ذلك؟ الأزرار: تأكّد من حصول المستخدمين على نفس القابليّة للتفاعل عبر الموقع، سواءٌ تعلّق الأمر بنصوص الدعوات إلى إجراء (Call-to-action)، أو ألوان الأزرار وأحجامها. الروابط: هل تعمل الروابط جميعًا على النحو المرجو؟ هل تُميَّز الروابط التشعبيّة بنفس اللون، وهل تسهُل رؤيتها؟ النوافذ المنبثقة (Pop-ups) والقوائم المنسدلة (Drop-downs): هل تعمل العناصر البصريّة المُجمَّعة، سواءٌ كانت عناصر قائمة بذاتها أم جزءًا من قائمة، بطريقة مناسبة؟ وهل تندمج في مساحة معيَّنة دون أن تتجاوزها أو تحجُب محتوى مهمًّا آخر؟ المؤشّر: كيف يتغيّر مؤشّر الفأرة عند التفاعل مع الموقع؟ تأكّد أنّ كلّ تغيير متناسق ومتناسب مع الهدف المُراد منه. الزيارة (دقيقة واحدة) تحتاج للقيّام بإجراءات الدقيقة الأخيرة، والانتباه إلى كلّ تفصيل للتأكّد من أن تكون إجابة المستخدم على السؤال هل أنت راضٍ هي "نعم". من المحتمل جدًّا أن يتحوّل الزوّار إلى زبناء، إنْ خصّصت وقتًا لتقويم تجربة المستخدم من الجانب البصري والوظيفي. رغم ذلك، تبقى خطوة أخيرة تتمثّل في تقمّص شخصيّة زوّارك للتأكّد من فاعليّة تجربة المستخدم وجاهزيّتها للرّفع من مداخيلك. يجب أن تسجّل - أثناء النظر في العناصر البصريّة والوظيفيّة - ملاحظات بالتعديلات التي يمكن إجراؤها. إنْ كانت لديك دقيقة إضافيّة فتصفّح موقعك، كما لو كنت زائرًا، منذ لحظة دخولك الموقع وإلى الخروج منه. هل يستطيع زائر جديد تصفّح الموقع بسهولة من أجل العثور على معلومات يحتاجها، أو البحث عن خدمات تقدّمها، أو تقرير شراء منتج؟ فكّر أثناء تحليل زيّارة مستخدم لموقعك، أنّ الموقع عبارة عن جسر وكلّ صفحة عبارة عن مركبة تنقل المستخدمين من جهة (شخص في حاجة لشيء مّا) إلى أخرى (زبون راض). إنْ لم تكن المركبات موجودة، أو كانت غير صالحة، فسيكون احتمال الانتقال من طرف إلى آخر ضئيلًا جدّا. اجعل تصفّح الموقع سلِسًا للمستخدم كلّ ما تعلّق الأمر بعمليّة شراء. الهدف من تجربة المستخدم هو نقل المستخدمين من النقطة "أ" إلى النقطة "ب" بدون المرور عبر حواجز، أو طرق مسدودة، أو حتى تشقّقات. قوّم تجربة المستخدم على موقعك، حتى ولو لم تكن لديك سوى خمس دقائق، من أجل الحصول على تدفّق مستمرّ من الزوّار المهتمين، والزبناء الراضين. ترجمة – بتصرّف – للمقال How to Evaluate Your UX in Under 5 Minutes لصاحبه Kayla Naab.
  15. الحوسبة خفيّة الخوادم (Serverless computing) في طريقها لإحداث ثورة في طرق تطوير البرمجيّات المتعارف عليها. ستساعدك المنصّات المفتوحة المصدر التي نقدّمها هنا في التعرّف على هذا المجال. كثُر الحديث في الآونة الأخيرة عن خفاء الخوادم (Serverless)، فلنوضّح المعنى المقصود بهذا المصطلح، والمصطلحات المرتبطة به، مثل الحوسبة خفيّة الخوادم (Serverless computing) والمنصّات خفيّة الخوادم (Serverless platform). يُستخدَم مصطلح خفاء الخوادم عادةً على أنّه مرادف لتقديم الوظائف بصيغة خدمات (Functions-as-a-Service, FaaS)؛ إلّا أنّ المصطلح لا يعني غيّاب الخادم، عكس ما قد يوحي به الاسم. في الواقع، توجد خوادم عدّة لأنّ مزوّدي الخدمات السحابيّة للعموم يوفّرون خوادم تنشُر، وتشغّل ، وتدير تطبيقك. تعدّ الحوسبة خفيّة الخوادم قسمًا جديدًا يمثّل تحوّلًا في الطريقة التي يبني بها المطوّرون ويوزّعون الأنظمة البرمجية. يمكن أن يؤدّي عزلُ البنية التحتيّة للتطبيقات عن الشفرة البرمجيّة إلى تسهيل عمليّة التطوير مع الحصول على فوائد أخرى من حيث التكلفة والفاعليّة. يرى عدد من المتخصّصين أنّ الحوسبة خفيّة الخوادم وFaaS ستلعبان دورًا أساسيًّا في تحديد أبعاد الحقبة القادمة من تقنيّة المعلومات في المؤسسّات، جنبًا لجنب مع خدمات السحابة الأصيلة Cloud-native والخدمات السحابيّة الهجينة (Hybrid cloud). توفّر المنصّات خفيّة الاسم واجهات تطبيقات برمجيّة (API) تتيح للمستخدمين تشغيل دوالّ برمجيّة (تُسمّى أيضًا إجراءات (Actions)) وتُرجِع نتيجة تشغيل كلّ دالة. توفّر المنصّات خفيّة الخادم كذلك نهايات HTTPS لتمكين المطوّر من الحصول على نتائج الدالّة. يمكن استخدام هذه النهايات (Endpoints) لتكون مُدخلًا Input لدوالّ أخرى؛ وبالتالي توفير متتاليّة (أو سلسلة) من الدوالّ المترابطة. تعمل أغلب المنصّات خفيّة الاسم بحيث ينشُر المستخدم (أو يُنشئ) الدوالّ قبل تنفيذها. يتوفّر لدى المنصّة بعد ذلك كلّ ما يلزم لتنفيذ الشفرة البرمجيّة حالما يُطلب منها ذلك. يُمكن طلب تنفيذ الدالّة خفيّة الخادم يدويًّا بتنفيذ أمر، أو يمكن التسبّب في تنفيذها عبر حدث مرجعي مُعدّ لتنشيط الدالّة للإجابة على أحداث مثل إشعار Cron، وتحميل ملفّ، وأحداث أخرى كثيرة. سبع منصّات مفتوحة المصدر للتعرّف على الحوسبة خفيّة الخوادم Apache OpenWhisk: منصّة مفتوحة المصدر تمكّنك من تنفيذ شفرة برمجيّة استجابةً للأحداث مهما كان عددها. كُتبت المنصّة بلغة Scala، ويمكنها معالجة مُدخلات انطلاقًا من طلبات HTTP ثم تشغيل شفرات برمجيّة مكتوبة بلغة جافاسكريبت أو سويفت Swift. Fission: إطار عمل للحوسبة خفيّة الخوادم يمكّن المطوّرين من إنشاء دوالّ باستخدام Kubernetes. يتيح إطار العمل هذا للمبرمجين كتابة دوالّ تدوم لمدّة قصيرة بأيّة لغة برمجة، وربطها بأي حدث مثل طلبات HTTP. IronFunctions: إطار عمل للحوسبة خفيّة الخوادم يوفّر منصّة للخدمات الصغيرة (Microservices) المترابطة، عن طريق دمج الخدمات الموجودة والاستفادة من Docker. يكتُب المطوّرون الدوالّ بلغة Go. FnProject: منصّة خفيّة الخوادم مُوجَّهة أساسًا للحاويّات يمكن تشغيلها في أي مكان على السحابة أو في البنية التحتيّة الداخليّة. استخدام المنصّة سهل، كما أنّها عاليّة الأداء، و تدعم لغات البرمجة جميعًا، ويمكن توسعتها. OpenLambda: مشروع حوسبة خفيّة الخوادم مُرخص برخصة Apache، ومكتوب بلغة Go، ويعتمد على حاويّات لينكس. يهدف OpenLambda في المقام الأول إلى التمكين من استغلال المقاربات الجديدة للحوسبة خفيّة الخوادم. Kubeless: إطار عمل يعتمد على Kubernetes ويسمح للمطوّر بنشر شفرات برمجيّة قصيرة دون التفكير في البنية التحتيّة المستخدمة. يعتمد Kubeless على موارد Kubernetes لتوفير قابليّة التوسّع الذاتيّة، وتوجيه واجهات التطبيقات البرمجية، والمراقبة، والتشخيص وغيرها. OpenFaas: إطار عمل لبناء دوالّ خفيّة الخوادم باستخدام Docker وKubernates؛ يوفّر دعمًا مدمجًا للقيّاسات والإحصاءات. يُمكن تحزيم أي عمليّة Process على هيئة دالّة، ممّا يسمح باستغلال مجموعة من أحداث الويب دون الحاجة لكتابة شفرات مُكرَّرة. يعدّ Kubernates المنصّة الأكثر انتشارًا لإدارة أحمال العمل في المنصّات خفيّة الخوادم، وحاويّات التطبيقات ذات الخدمات الصغيرة. يستخدم Kubernates نموذج نشر معدًّا بدقّة لمعالجة أحمال العمل بسرعة أكبر وسهولة أكثر. يمكّن Knative Serving من بناء خدمات وتطبيقات خفيّة الخوادم ونشرها على Kubernates، مع استخدام Istio للتوسّع ودعم سيناريوهات عمل متقدّمة، مثل: النشر السريع لحاويات خفيّة الخوادم التوسع والتقلّص التلقائيّيْن (Scaling up and down) التوجيه وبرمجة الشبكات بالنسبة لعانصر Istio أخذ لقطات (Snapshots) من الشفرة المنشورة والإعدادات في نقاط زمنيّة محدّدة. يركّز Knative على المهامّ الاعتيّاديّة من بناءٍ للتطبيقات وتشغيلها على منصّات السحابة الأصليّة (Cloud-native)؛ بهدف تنسيق عمليّات البناء من الشفرة البرمجيّة إلى الحاويّة، وربط الخدمات بأحداث النظام، وتوجيه حركة البيانات وإدارتها أثناء النشر، والتوسّع التلقائي حسب حمل العمل. أمّا Istio، فهو منصّة مفتوحة للاتّصال بالخدمات الصغيرة وتأمينها (وهو في الواقع مستوى تحكّم بنسيج الخدمة Service mesh في الوسيط Envoy) صُمِّم ليتناسب مع تفاعل أشخاص مختلفين مع إطار العمل بما في ذلك المطوّرون، عمّال الصيّانة ومزوّدو الخدمات. يمكن – على سبيل المثال – نشر جافاسكريبت خفيّة الخادم باستخدام Knative Serving على منصّة Minishift محليّة باتّباع الشفرة التاليّة: ## Dockerfile FROM bucharestgold/centos7-s2i-nodejs:10.x WORKDIR /opt/app-root/src COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 3000 CMD ["npm", "start"] ## package.json { "name": "greeter", "version": "0.0.1", "private": true, "scripts": { "start": "node app.js" }, "dependencies": { "express": "~4.16.0" } } ## app.js var express = require("express"); var app = express(); var msg = (process.env.MESSAGE_PREFIX || "") + "NodeJs::Knative on OpenShift"; app.get("/", function(req, res, next) { res.status(200).send(msg); }); app.listen(8080, function() { console.log("App started in port 8080"); }); ## service.yaml apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: name: greeter spec: configuration: revisionTemplate: spec: container: image: dev.local/greeter:0.0.1-SNAPSHOT أنشئ تطبيق Node.js وانشره على منصّة Kubernates المحليّة. ستحتاج لتثبيت متطلّبات المنصّة (Knative، و Istio، و Knative Serving على Kubernetes (أو Minishift)). اربط المنصّة بخدمة Docker بالأمر التالي: (minishift docker-env) && eval(minishift oc-env) أنشئ نسخة من حاوية خفيّة الخادم باستخدام Jib عبر الأمر التالي: ./mvnw -DskipTests clean compile jib:dockerBuild انشر خدمة خفيّة الاسم مثل Minishift على عنقود Kubernates بالأمر التالي: kubectl apply -f service.yaml خاتمة يوضّح المثال أعلاه أين وكيف يمكن البدء في تطوير تطبيقات خفيّة الخادم باستخدام منصّات سحابة أصليّة مثل Kubernates، و Knative Serving وIstio. ترجمة - بتصرّف - للمقال 7 open source platforms to get started with serverless computing لصاحبه Daniel Oh.