استخدام Elixir Phoenix في مشروع SaaS تجاري
Linkly مكتوبة في Elixir.
كنت أرغب دائماً في التعرض لنظام Erlang البيئي، و Elixir هي طريقة سهلة.
لن أغطي فوائد BEAM أو Erlang بشكل مباشر هنا، حيث تمت كتابة ذلك في مكان آخر. بدلاً من ذلك، سأركز على الجوانب العملية لاستخدام Elixir Phoenix لمشروع حقيقي.
سأفترض أنك تعرف ما هو Ruby on Rails، حيث أن Phoenix، إطار العمل الويب الخاص بـ Elixir، مستوحى بشكل كبير من Rails.
البرمجة الفعلية في Elixir Phoenix
الكتابة في Elixir تجربة ممتعة.
إنها تتبع نماذج مشابهة لـ Rails، بما في ذلك MVC، وحتى تبدو متشابهة.
على عكس Rails، يتم ترجمة الكود قبل تنفيذه. هذه خطوة مفيدة لأنها تتيح لك اكتشاف الأخطاء التي قد لا تواجهها بطريقة أخرى.
يتم تجميع النماذج في Phoenix في "السياقات". هذا مستوى إضافي من التجريد، يهدف إلى إنشاء فصل واضح بين أجزاء التطبيقات، على سبيل المثال المستخدمون والمنتجات. يمكن لكل سياق أن يحتوي على أي عدد من النماذج.
الأداء
تم التركيز على الأداء في مدونات أخرى، لذا سأغطي الجانب العملي هنا.
بالنسبة لإطار عمل ويب متكامل، فإن الأداء أسرع بوضوح من Rails، وتتطلب أجهزة أقل بشكل كبير للتشغيل.
الوقت "للتمهيد" لتشغيل mix phx.server مقابل rails server أسرع. حتى عند التطوير على جهاز محمول، تحميل الصفحات بشكل ملحوظ أسرع مع Phoenix.
توفر الحزم لـ Elixir Phoenix مقابل Rails
ظاهرياً، يبدو أن هناك فرقاً هنا. يحتوي Rails على آلاف المجوهرات مقابل مستودع Hex الخاص بـ Elixir.
في الواقع، تقريباً كل شيء ستستخدمه فعلاً متاح في نظام حزم Elixir Hex - محللي JSON، عملاء HTTP، أدوات لتنسيق وتحليل Markdown - كل شيء موجود هناك، وجودة الوحدة استثنائية.
في Rails، هناك حزم أكثر بكثير، لكنك لن تقوم بتضمينها في مشروع حقيقي، بسبب حالة عدم صيانتها أو المخاطر المرتبطة ببناء عدد كبير جداً من التبعيات الخارجية في تطبيقك.
تحتفظ الأنصات مثل Stripe و Recurly بـ gems Rails خاصة بهم للتفاعل مع واجهات برمجة التطبيقات الخاصة بهم. قد يكون هذا مفيداً، وعموماً ينقصهم الدعم لـ Elixir.
اكتشفت، مع ذلك، أنه من السهل جداً استخدام حزمة Tesla الخاصة بـ Elixir للتفاعل مع نقاط نهاية HTTP للخدمات، وانتهى الأمر بفضل هذه الطريقة، مقابل استخدام gems معبأة مسبقاً، لأنها أخف وزناً، وتسمح لك بفهم ما يحدث.
تجريد قاعدة البيانات - Ecto و ActiveRecord
Ecto ليس متطوراً مثل ActiveRecord.
لا يُقصد به أن يكون.
Ecto هي محاكاة قاعدة بيانات بسيطة تحتوي على استعلامات قاعدة البيانات إلى كائنات Elixir.
في البداية، وجدت أنه من المحبط أنه لم يعمل تماماً مثل ActiveRecord.
ومع ذلك، يتيح لك Ecto التفاعل مع قاعدة البيانات بطريقة مباشرة جداً، وفي الواقع يجعل برمجة تطبيقات الويب أسهل بكثير.
مع ActiveRecord، بمجرد أن تبدأ في بناء استعلامات معقدة، يستغرق الأمر وقتاً أطول لمعرفة ActiveRecord بدلاً من مجرد كتابة استعلام كـ SQL.
بعد استخدام الاثنين، خلصت إلى أن استخدام محاكاة قاعدة بيانات خفيفة الوزن مثل Ecto أسهل من استخدام تجريد ثقيل الوزن مثل ActiveRecord.
يعطيك سلامة استخدام محاكاة قاعدة بيانات، بدون الصداع والوزن لتجريد "ذكي جداً".
كلاهما يحتوي على وظائف الهجرة والتراجع.
قاعدة البيانات الافتراضية لمشاريع Phoenix هي Postgres.
بالنسبة لأولئك الذين يستخدمون قواعس بيانات NoSQL، يعمل Ecto مع Mongo.
الأفضل من ذلك، Ecto يعمل مع ميزات NoSQL الخاصة بـ Postgres، مما يسمح لك بحفظ والاستعلام عن JSON دون الحاجة إلى Mongo.
مصادقة المستخدم
هذا هو المكان الذي يفتقر فيه Elixir Phoenix.
يحتوي Rails على وحدة Devise. Phoenix لديها Coherence، لكنها حالياً غير محفوظة.
إذا كنت تريد استخدام تسجيل دخول أساسي باسم المستخدم وكلمة المرور، فستضطر إلى بناء كل خطوة من ذلك. يتضمن ذلك تجزئة كلمات المرور وحساب إعادة تعيين كلمة المرور، وإعدادات "تذكرني" وما إلى ذلك.
هذا يسير طويل ويحمل مخاطر أمنية كبيرة.
اخترت استخدام Auth0، والذي عمل مع Phoenix بشكل جيد تماماً. ربما هذا حل أفضل على أي حال، لكن كان سيكون لطيفاً أن يكون لديك خيار.
النشر والاستضافة
المضيف الرئيسي لتطبيقات Phoenix هو Gigalixir، شركة أمريكية صغيرة يديرها متحمسون Elixir.
Gigalixir مستضاف على Google Cloud، لذا فإن البنية التحتية الأساسية سليمة.
يجعل buildpack الخاص بـ Gigalixir النشر سهلاً، ويدعم جميع استراتيجيات النشر الذكية الخاصة بـ Elixir (distillery، mix).
إنه أغلى من "البناء بنفسك"، لكن معظم التكلفة مغلفة في استضافة قاعدة بيانات Postgres.
Elixir Phoenix خفيفة جداً بحيث يمكن تشغيلها على حاويات docker صغيرة وتتعامل مع عدد كبير جداً من الطلبات.
رغم العلامة، فإنه بالتأكيد يستحق التخلص من الصداع.
سأضيف فقط أن دعم العملاء الخاص بهم استثنائي.
توفر المبرمجين
هناك مبرمجو Elixir أقل بكثير هناك.
Elixir هي "لغة المبرمج" - لغة يأتي الناس إليها، بعد تعلم شيء آخر.
وبعد قول ذلك، فإن أولئك الذين يستخدمون Elixir عادة ما يكونون مبرمجين أفضل. ربما يكون الأمر يتعلق باختيار واعي لالتقاط لغة أفضل.
يذكرني بالأيام الأولى لـ Rails، حيث بدا الأمر وكأن فقط "نجوم الروك" سيستخدمونها (مقابل PHP).
أي مبرمج Rails جيد لن تواجهه مشكلة في التقاط Elixir Phoenix، وسيكون في وضع يعمل في غضون بضعة أيام.
هل سأستخدم Elixir Phoenix مرة أخرى؟
بالتأكيد.
عملت مع الكثير من اللغات، و Elixir هي الأسهل والأقوى التي عملت معها.
أتطلع إلى كتابة Elixir.
احصل على 100 رابط مختصر وتتبع 500 نقرة شهريًا مجانًا.