وظائف Firebase Cloud: العظيم ، والمه ، والقبيح

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

تم الإعلان عن وظائف Firebase Cloud Functions بعد بضعة أشهر. لا تزال الخدمة في مرحلة تجريبية ، لكني كنت أستخدمها بسعادة لمدة شهرين في الإنتاج.

دعونا نرى كيف تسير الأمور.

ما هي وظائف Firebase Cloud؟

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

في كثير من الحالات ، يمكن لهذا النموذج الجديد تبسيط كتابة التعليمات البرمجية الخلفية وصيانتها وتشغيلها.

تشبه وظائف Firebase Cloud على وجه الخصوص كتل Lego التي يمكنك توصيلها بأي خدمة Firebase. على سبيل المثال ، يمكن تشغيل إحدى الوظائف عند تحميل صورة إلى Firebase Storage لإنشاء صورة مصغرة ، أو ربما تنظيف بعض بيانات المستخدم عند حذف عقدة في Realtime Database. يمكن لأي شيء مثير للاهتمام يحدث في Firebase تشغيل وظيفة.

إذا لم يكن ذلك كافيًا ، فيمكنك أيضًا استخدام HTTP لتشغيل الوظائف باستخدام GET و POST وما إلى ذلك. شاهد هذا الفيديو الرائع حول كيفية الجمع بين Firebase Hosting و Cloud Functions لإنشاء تطبيق Express كامل:

العظيم

البنية التحتية لا تصبح أسهل من هذا

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

التسعير

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

سهل الاستخدام

كالعادة مع Firebase و Google ، تعد المستندات رائعة ولن تقوم بألعاب بهلوانية عقلية للحصول عليها . هناك أيضًا أطنان من العينات على Github لتبدأ. تتم معالجة مصادقة النشر بواسطة Firebase CLI ، لذا فإن إنشاء عالم الترحيب وتشغيله هو حرفياً:

firebase init functionsfirebase deploy

أعتقد أن بساطة استخدام Firebase و Google Cloud بشكل عام رائعة للغاية ، خاصة بالمقارنة مع المنافسة.

مرنة

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

فيما يلي بعض المشكلات التي حللناها باستخدام وظائف Firebase Cloud:

  • إنشاء ملفات PDF لخدمة الفواتير عبر الإنترنت باستخدام Phantom.js ، وتوقيع هذه الفواتير مع بعض الخدمات الحكومية
  • قم بتوصيل خدمة Go مع مزود SOAP من جهة خارجية (ugh)
  • إرسال رسائل البريد الإلكتروني عبر HTTP من أي مكان في مجموعتنا

مه

بدايات باردة

قابلية التوسع أمر رائع ، لكن وقت التشغيل يمكن أن يتقلب بشكل كبير. يمكن أن تستغرق وظيفة hello world البسيطة 3 مللي ثانية لأداء وظيفتها ، أو 100 مللي ثانية.

functions.https.onRequest((request, response) => { response.send(“Hello from Firebase!”);});

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

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

لسوء الحظ ، تعد البدايات الباردة جانبًا لا مفر منه للتعامل مع وظائف السحابة (من أي مزود). سيتعين عليك أخذ ذلك في الاعتبار عند اتخاذ قرار باستخدام وظيفة السحابة لحل شيء ما.

لا يوجد برنامج جدولة (كرون)

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

يوصي فريق Firebase بإنشاء مشروع App Engine لتنظيم هذه المشغلات. تطلب الخدمة حقًا شيء مثل Heroku Scheduler.

جافا سكريبت فقط

حسنًا ، أنا موافق على JavaScript ، لكن كل من Azure و AWS يدعمان العديد من اللغات الأخرى. من المفارقات أن Google لا تدعم Go في خدمة وظائفها السحابية ، لكن AWS تدعمها.

العقدة 6

مرة أخرى ، المنافسة تعمل بشكل أفضل. تعمل كل من AWS Lambda و Azure Functions بالفعل على Node 8. أكبر عيب هنا هو العودة إلى الوعود دون عدم التزامن / الانتظار أو الاضطرار إلى تكوين Babel في مشروعك.

القبيح

سير عمل التطوير

باستثناء وظائف HTTP المشغلة ، لا يمكنك تشغيل وظائفك محليًا. يجب نشر الوظائف التي يتم تشغيلها بواسطة خدمة Firebase على السحابة.

هذا له العديد من الآثار القبيحة:

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

البيئات

علاوة على النقاط السابقة ، فإن إدارة البيئات ... معقدة.

يمكنك إضافة متغيرات البيئة إلى مشاريع الوظائف الخاصة بك باستخدام Firebase CLI ولكن ، مثل الجوانب الأخرى لـ Firebase ، يعد هذا نهجًا ساذجًا لا يتسع بشكل جيد.

ستحتاج إلى بيانات اعتماد للوصول إلى أي شيء إلى حد كبير خارج Firebase sandbox. بالنسبة لخدمات Google Cloud الأخرى ، تأتي بيانات الاعتماد هذه في شكل .jsonملفات. ضاعف ذلك في كل بيئة (مطور ، إنتاج ، مرحلة) وستنتهي بفوضى ملكية.

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

أرغب في رؤية علامة تبويب البيئة في Firebase Console حيث يمكنني بسهولة إدارة هذه الإعدادات لمشروع Firebase بأكمله. يجب أن يكون التبديل بين البيئات بنفس السهولة firebase use production.

استنتاج

بخلاف بعض الاحتكاك أثناء مرحلة التطوير ، كانت تجربتي مع Firebase Cloud Functions إيجابية. بمجرد نشرها ، تكون هذه الأشياء موثوقة ولا تتطلب أي صيانة كما هو موعود. لذا نعم ، أصبح Firebase أخيرًا بدون خادم. يا هلا!

إذا كنت تستخدم Firebase بالفعل ، فهو حقًا لا يحتاج إلى تفكير. تعتبر وظائف Firebase Cloud Functions تكملة رائعة لمشروعك ، حتى إذا كانت الخدمة لا تزال في مرحلة تجريبية.

من ناحية أخرى ، من العدل أن نقول إن المنافسة لديها منتج أكثر نضجًا. إذا لم تكن مستثمرًا في Firebase أو Google Cloud ، وكنت تفكر في استخدام وظائف السحابة في مجموعتك ، فمن المحتمل أن تبحث في ما تقدمه AWS أو Azure أيضًا.

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

هذا كل شيء.

ملاحظة: في إصدار سابق من هذه المقالة ، زعمت أنه لم يكن من الممكن كتابة اختبارات لوظائف بخلاف HTTP. هذا خطأ ، وهنا المستندات حول كيفية القيام بذلك.