اللبنات الأساسية للتطبيقات الموزعة. التقريب الصفري

اللبنات الأساسية للتطبيقات الموزعة. التقريب الصفري

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

مقدمة

اعتمادًا على حجم النظام المصمم والمتطلبات الخاصة به، نختار نحن المطورين طريقة تبادل المعلومات في النظام. في معظم الحالات، لتنظيم تفاعل الخدمات، قد يكون خيار العمل مخططًا مع وسيط، على سبيل المثال، بناءً على RabbitMQ أو kafka. لكن في بعض الأحيان يكون تدفق الأحداث واتفاقية مستوى الخدمة ومستوى التحكم في النظام أمرًا يجعل الرسائل الجاهزة غير مناسبة لنا. بالطبع، يمكنك تعقيد النظام قليلاً من خلال تحمل مسؤولية طبقة النقل وتكوين الكتلة، على سبيل المثال باستخدام ZeroMQ أو nanomsg. ولكن إذا كان النظام يحتوي على إنتاجية وقدرات كافية لمجموعة Erlang القياسية، فإن مسألة إدخال كيان إضافي تتطلب دراسة مفصلة ومبررات اقتصادية.

موضوع التطبيقات الموزعة التفاعلية واسع جدًا. للالتزام بتنسيق المقالة، سيكون موضوع مناقشة اليوم هو البيئات المتجانسة المبنية على Erlang/Elixir فقط. يتيح لك النظام البيئي Erlang/OTP تنفيذ بنية تفاعلية بأقل قدر من الجهد. لكن على أية حال، سنحتاج إلى طبقة رسائل.

اساس نظرى

يبدأ التصميم بتحديد الأهداف والقيود. الهدف الأساسي ليس في مجال التنمية من أجل التنمية. نحتاج إلى الحصول على أداة آمنة وقابلة للتطوير يمكننا على أساسها إنشاء تطبيقات حديثة على مختلف المستويات، والأهم من ذلك، تطويرها: بدءًا من تطبيقات الخادم الواحد التي تخدم جمهورًا صغيرًا، والتي يمكن أن تتطور لاحقًا إلى مجموعات تصل إلى 50 شخصًا -60 عقدة، تنتهي باتحادات الكتلة. وبالتالي، فإن الهدف الرئيسي هو تعظيم الأرباح عن طريق تقليل تكلفة التطوير وملكية النظام النهائي.

دعونا نسلط الضوء على 4 متطلبات رئيسية للنظام النهائي:

  • Сالموجهة نحو الحدث.
    النظام جاهز دائمًا لتمرير تدفق الأحداث وتنفيذ الإجراءات اللازمة؛
  • Мقابلية التوسع.
    يمكن تحجيم الكتل الفردية عموديًا وأفقيًا. يجب أن يكون النظام بأكمله قادرًا على النمو الأفقي اللانهائي؛
  • Оالتسامح مع الخطأ.
    يجب أن تكون جميع المستويات وجميع الخدمات قادرة على التعافي تلقائيًا من حالات الفشل؛
  • Гوقت الاستجابة مضمونة.
    الوقت ثمين ويجب على المستخدمين ألا ينتظروا طويلاً.

هل تتذكر الحكاية الخيالية القديمة حول "المحرك الصغير القادر على ذلك"؟ لكي يخرج النظام المصمم بنجاح من مرحلة النموذج الأولي ويكون تقدميًا، يجب أن يلبي أساسه الحد الأدنى من المتطلبات ضباب ودخان.

تتم إضافة نقطة أخرى إلى المراسلة كأداة للبنية التحتية وأساس لجميع الخدمات: سهولة الاستخدام للمبرمجين.

الموجهة نحو الحدث

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

التدرجية

قابلية التوسع وكفاءة النظام بجانب بعضها البعض. يجب أن تكون مكونات التطبيق قادرة على الاستفادة من جميع الموارد المتاحة. كلما تمكنا من الاستفادة من القدرات بشكل أكثر كفاءة وكلما كانت طرق المعالجة لدينا أكثر مثالية، كلما قلت الأموال التي ننفقها على المعدات.

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

وعلى مستوى الكتلة، توجد مشكلة التخلص أيضًا. من المهم أن يتم تحميل جميع الأجهزة الموجودة في المجموعة بالتساوي وألا يتم تحميل الشبكة بشكل زائد. لنتخيل موقفًا: تصل حركة مرور المستخدم إلى الموازنات الواردة (haproxy، nginx، إلخ)، حيث يقومون بتوزيع طلبات المعالجة بالتساوي قدر الإمكان بين مجموعة الواجهات الخلفية المتاحة. ضمن البنية التحتية للتطبيق، تكون الخدمة التي تنفذ الواجهة المطلوبة هي الميل الأخير فقط وستحتاج إلى طلب عدد من الخدمات الأخرى للرد على الطلب الأولي. تتطلب الطلبات الداخلية أيضًا التوجيه والموازنة.
لإدارة تدفقات البيانات بشكل فعال، يجب أن توفر المراسلة للمطورين واجهة لإدارة التوجيه وموازنة التحميل. بفضل هذا، سيتمكن المطورون، باستخدام أنماط الخدمات الصغيرة (المجمع، الوكيل، السلسلة، الفرع، إلخ)، من حل المشكلات القياسية وتلك التي نادرًا ما تنشأ.

من وجهة نظر الأعمال، تعد قابلية التوسع إحدى أدوات إدارة المخاطر. الشيء الرئيسي هو تلبية طلبات العملاء من خلال الاستخدام الأمثل للمعدات:

  • عندما تزداد قوة المعدات نتيجة التقدم. لن يكون خاملاً بسبب البرامج غير الكاملة. يتوسع Erlang رأسيًا بشكل جيد وسيكون قادرًا دائمًا على استخدام جميع مراكز وحدة المعالجة المركزية والذاكرة المتوفرة؛
  • في البيئات السحابية، يمكننا إدارة كمية المعدات اعتمادًا على الحمل الحالي أو المتوقع وضمان اتفاقية مستوى الخدمة.

التسامح مع الخطأ

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

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

إستجابة

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

نتيجة أولية

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

نهاية الجزء الأول.

صور @لوكابرافو.

المصدر: www.habr.com

إضافة تعليق