---
title: "فهم تطبيقات OTP في Elixir، الجزء 5: بناء أنظمة عالية التوفر"
description: "سلسلة قصيرة عن المبادئ الأساسية للغتي Erlang وElixir. يناقش هذا الجزء كيف تتيح لنا ميزات Elixir مجتمعةً بناء أنظمة عالية التوفر"
canonical: https://oozou.com/ar/blog/understanding-elixir-otp-applications-part-5-building-high-availability-systems-152
locale: ar
date: 2021-01-04
author: "OOZOU Team"
---

# فهم تطبيقات OTP في Elixir، الجزء 5: بناء أنظمة عالية التوفر

> أستعرض في هذه السلسلة القصيرة المبادئ الأساسية للغتي Erlang وElixir واحدًا تلو الآخر. وفي هذا المقال أناقش كيف تتيح لنا ميزات Elixir مجتمعةً بناء أنظمة عالية التوفر

Published: 2021-01-04 · Author: OOZOU Team (Engineering) · 4 min read

ألقينا في هذه السلسلة نظرة على كيف [تتواصل Elixir عبر الرسائل](https://oozou.com/blog/understanding-elixir-otp-applications-part-1-distribution-79) لتقديم أنظمة موزعة، وكيف [تراقب أشجار الإشراف العمليات](https://oozou.com/blog/understanding-elixir-otp-applications-part-2-fault-tolerance-138) لتقديم أنظمة متحمّلة للأعطال، وكيف [تقدم بنية العمليات أنظمة تعمل في الوقت الفعلي المرن](https://oozou.com/blog/understanding-elixir-otp-applications-part-3-soft-real-time-150)، وأخيرًا، كيف [تدير آلة BEAM الافتراضية الاستبدال أثناء التشغيل](https://oozou.com/blog/understanding-elixir-otp-applications-part-4-hot-swapping-modules-151).
أدرك الفريق الذي أنشأ Erlang أن بناء تطبيقات مثالية أمر غير واقعي. كلنا نخطئ. وعبقرية Erlang أن ذلك لا يهم. فاللغة تحميكم من أنفسكم. إذا أنشأتم وحدة فيها أخطاء برمجية، فلن تمنع أي عمليات أخرى من أداء مهامها. وتأتي Erlang أيضًا مع كثير من أدوات تصحيح الأخطاء (debugging) المفيدة جدًا، التي تتيح معرفة مصدر المشكلات. وهذا مهم جدًا في Erlang، لأن الوحدات المعطوبة لا تعطّل العمليات الأخرى، فقد يبدو من الخارج أن كل شيء على ما يرام.

# مراقبة عملياتنا

تأتي Erlang مع أداة تُسمى [Observer](http://erlang.org/doc/apps/observer/observer_ug.html). يمكننا تشغيلها من iEX للحصول على نظرة عامة على نظامنا. ولفتحها يكفي أن تشغّلوا:

```elixir
:observer.start
```

يفتح تشغيل هذا الأمر واجهة رسومية (GUI) فيها معلومات كثيرة عن العمليات الحيّة حاليًا في الآلة الافتراضية الحالية.
من تبويب _Load Charts_ يمكنكم عرض معلومات عن استهلاك الذاكرة وIO واستخدام المجدولات عبر الزمن.
ومن تبويب _Applications_ يمكنكم رؤية جميع العمليات الحيّة تحت Kernel. والنقر على إحدى هذه العُقد يكشف مزيدًا من المعلومات الخاصة بتلك العملية. ومن هنا يمكنكم رؤية معلومات مفيدة مثل _Reductions_ التي تعطي تقديرًا تقريبيًا لمدة بقاء العملية حيّة. إذا واجهتم استهلاكًا مرتفعًا غير متوقع للمعالج، فهذا مكان جيد للبحث.

يمكننا أيضًا تشغيل Observer على عقدة بعيدة (remote node) بفتح iEX shell بعيد بين جهازكم المحلي والعقدة التي تريدون مراقبتها. ولفعل ذلك تحتاجون إلى عنوان IP للجهاز وإلى الـ cookie الذي يوجد عادةً في ~/.erlang.cookie

```elixir
iex --name "joe@joes_mbp" --cookie my_apps_cookie --remsh "my_app@172.217. 22.14"
```

من هنا يمكنكم تشغيل Observer وعرض المعلومات المتعلقة بالعقدة.

بالأدوات التي ناقشناها حتى الآن، يمكننا بناء نظام يتحمّل الأعطال، ويشغّل أعدادًا هائلة من العمليات بكفاءة عالية جدًا، ويمنحنا أدوات لتتبّع الأخطاء البرمجية وإصلاحها. وفي عالم البرمجيات، يأتي عادةً يوم تحتاجون فيه إلى التوسّع. وهذه الآليات تجعل توسيع تطبيقات Erlang وElixir أمرًا سهلًا جدًا. Erlang مجهّزة للتوسّع إلى درجة أن WhatsApp توسّع، في قصة مشهورة، ليخدم 900 مليون مستخدم بفريق من 50 شخصًا.

# التوسّع الرأسي

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

# التوسّع الأفقي

فإذا بلغنا حدود التوسّع الرأسي، هل يمكننا التوسّع أفقيًا؟ نعم. في الواقع، أنظمة المراسلة نفسها المستخدمة للتواصل مع العمليات على الجهاز الحالي مصمّمة أيضًا للتخاطب مع أجهزة أخرى ضمن العنقود (cluster) نفسه. ويمكن استخدام مكتبات مثل [libcluster](https://hexdocs.pm/libcluster/readme.html) لتكوين عُقد تكتشف بعضها تلقائيًا.

# التوفر العالي

نهج Erlang في قابلية التوسّع ليس فكرة لاحقة، بل هو مبني فيها من الأساس. وباستخدام جميع الميزات التي ناقشناها في هذه السلسلة، يمكننا بناء تطبيقات عالية التوفر بثقة. وتناسب Erlang وElixir برمجيات الويب تمامًا بفضل قدرتهما الفائقة على التزامن.
في عام 2018، أعلنت Cisco أن 90% من حركة الإنترنت تمر عبر عُقد تتحكم فيها Erlang. وفي عام 2015، أثبت إطار Phoenix أنه قادر على خدمة 2 مليون اتصال web-socket متزامن من جهاز واحد بـ 40 نواة وذاكرة 128Gb. هناك قصص نجاح كثيرة مذهلة، وأنظمة تعمل بكفاءة استثنائية باستخدام Erlang أو Elixir. وهناك أيضًا كثير من المطورين الموهوبين جدًا الذين يساهمون في المجتمع.
شخصيًا، أكثر ما يحمّسني في Erlang هو ما تحلّه اللغة من مشكلات مباشرةً ومن دون أي إعداد. نحن المطورين نقضي جزءًا كبيرًا من وقتنا في التأكد من أن الكود يتجاوز المشكلات. ومع Erlang لا نحتاج إلى ذلك كثيرًا. أنا متحمّس جدًا لمستقبل Elixir. أحب العمل مع Phoenix، وأحب البرمجة الوظيفية (functional programming) أيضًا. وبعد سنوات قضيتها مع ruby، يسعدني القول إنني وجدت لغة جديدة أحبها حبًا حقيقيًا.

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/ar/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
