أضف واجهة برمجة تطبيقات JSON سريعة جدًا لتطبيقنا.

جميع خدماتنا المصغرة ، بصرف النظر عن كيفية تواصلها مع بعضها البعض ، توفر نوعًا من واجهة نبضات القلب بحيث يتمكن نظام المراقبة في أي وقت من معرفة ماهية ذلك ؛ مثل الحالة العامة للصحة وبعض الخصائص المحددة ، على سبيل المثال ، اختباري البيانات الداخلية التي تتعامل معها. الأمر لا يتعلق بالنقل الرئيسي: هنا RabbitMQ و RabbitMQ بخير.


وأحيانًا يكون من المنطقي توفير واجهة أبسط ( HTTP ) لتصدير البيانات ذات الصلة. بالتفكير في هذا الاتجاه أيضًا ، على المدى الطويل ، أريد التخلص بالكامل من Redis لصالح حل داخلي لتخزين أزواج القيمة الرئيسية ، كما فعلنا بنجاح قبل عامين مع PubSub .


لذلك ، بدلاً من إعادة اختراع الدراجات باستخدام كل خدمة microservice جديدة ، قررت إنشاء مكتبة المكونات الإضافية التي يمكن أن تحل هذه المشكلة غير المعقدة المتمثلة في توفير بيانات عشوائية من أي تطبيق برمز صفري (باستثناء ثلاثة أسطر في config.exs ). سواء كان ذلك نبضات بسيطة ( HTTP 200 OK ) ، أو قائمة طويلة من أسعار الصرف الحالية.


يعتمد الحل على هذه التغريدة بواسطة ديف توماس .


خادم JSON API في وزن القلم


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


العلاقات كامارو


لم تكن المكتبة مصممة بأي حال من الأحوال لتصبح بديلاً عن الحلول الكاملة مثل Phoenix. لا مفر ، لا. هذا هو مجرد مثل هذه القائمة ، عندما تحتاج microservice فقط إلى الكشف عن اثنين من واجهات برمجة تطبيقات HTTP API. قد تكون Camarero ، في بعض الحالات ، مرشحًا جيدًا لتحل محل Redis ، أو أي متجر آخر للقيم الأساسية (أيضًا في مجموعة الوزن الخاصة بها). الفرق الرئيسي من هذا النوع من حلول الويب هو أن هذه المكتبة سريعة حقًا .


فيما يلي أوقات استجابة HTTP لإرجاع قيمة مفتاح من جدول تجزئة به مليون مفتاح.


1M بحث تخزين القيمة الرئيسية: 10μs ±


نعم ، لا يوجد الصيد. وقت استجابة HTTP لطلب عبر kv-storage مع قيم مليون هو عدة عشرات من مايكروثانية في أسوأ الحالات.


تفاصيل التنفيذ


من المفترض أن Camarero يتصل تطبيق قيد التشغيل ببساطة عن طريق تشغيل المكتبة وثلاثة أسطر في ملف التكوين. يقوم بمعالجة المسارات التي تم تكوينها ، وتفويض التنفيذ إلى وحدات معالج المعينة. أبسط التكوين قد يبدو مثل هذا:


 config :camarero, carta: [Camarero.Carta.Heartbeat], root: "api/v1" 

هذا كل ما في الأمر ، ومن المحتمل أن يكون الأمر واضحًا: /api/v1 هو جذر خادم الويب ، مسار heartbeat واحد (تم تكوينه من داخل الوحدة النمطية ، الاسم افتراضيًا بدون بادئة) - باستخدام معالج Camarero.Carta.Heartbeat . يمكن أيضًا إضافة معالجات ديناميكية في وقت التشغيل باستخدام مكالمات إلى Camarero.Catering.route! .


معالجات


المعالج هو وحدة نمطية تنفذ سلوك Camarero.Plato . وهي تتألف من طرق معالجة مستودع CRUD القياسية. للاستخدام كمعالج لطلبات HTTP الواردة ، تكون أي وحدة نمطية تنفذ هذا السلوك مناسبة.


هناك قرص أكثر دقة: سلوك Camarero.Tapas ، الذي يدير CRUD داخل كل حاوية Camarero.Plato ، لزوج مفتاح / قيمة. عادة لا تحتاج إلى حفر ذلك عميقًا عند استخدام المكتبة.


يستخدم التطبيق الافتراضي %{} map كحاوية ، ويبدو مضغوطًا إلى حد ما:


 defmodule Camarero.Carta.Heartbeat do use Camarero.Plato end 

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


ضبط غرامة


بدون استثناء ، يمكن بسهولة إعادة تعريف جميع الطرق من كل من التطبيقات الافتراضية ( Camarero.Tapas و Camarero.Plato ). على سبيل المثال ، لاستخدام مسار مخصص لوحدة نمطية ، وكذلك حاوية مخصصة ، يمكنك القيام بما يلي:


 defmodule Camarero.Carta.Heartbeat do use Camarero.Plato, container: %MyStructWithAccessBehaviour{} @impl true def plato_route(), do: "internal/heartbeat" end 

تكوين خادم الويب


يحتاج Camarero إلى خادم Cowboy2 و CowboyPlug للعمل . فيما يلي إعداد Cowboy2 نموذجي في config.exs :


 config :camarero, cowboy: [port: 4043, scheme: :https, options: []] 

ما Camarero لا يدعي


لا تدعي هذه المكتبة بأي حال من الأحوال التنافس مع حلول معقدة. إنه ليس موجودًا ، وبالتأكيد ، لن يكون هناك أي ترخيص أو مصادقة ، أي أننا نستخدمه فقط للخدمات داخل السحابة الخاصة.


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


لكنه أسرع من أي نظير في جميع المعايير .


مصدر


هل لديك رد سريع جيد!

Source: https://habr.com/ru/post/ar485120/


All Articles