استخدام Firebase Serverless - أصبحت تطبيقات الجوال والويب سهلة

نشرت: 2022-03-11

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

يتم ترميز التطبيقات في مجموعة من اللغات. تطبيق iOS مكتوب بلغة Swift أو Objective-C. تتم كتابة تطبيقات Android بلغة Java أو Kotlin. تتم كتابة تطبيقات الويب بلغة HTML و CSS و JavaScript ، وغالبًا ما تكون أطر عمل معقدة مثل Angular أو React. يحتاج مطورو الواجهة الأمامية إلى معرفة اللغات ذات الصلة وأدوات التطوير المرتبطة بها.

تتم كتابة الخوادم الخلفية بمجموعة من اللغات بما في ذلك Go و Java و PHP و Python. كل من هذه اللغات لديها مجموعتها الخاصة من المكتبات لتسهيل كتابة التطبيقات المعقدة.

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

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

ما هو Firebase؟

بدأ Firebase كبنية مراسلة للجوال حصلت عليها Google. وقد تطورت منذ ذلك الحين لتصبح مجموعة من أكثر من 25 مكونًا تتفاعل مع Google Cloud Platform.

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

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

تطور Firebase ليصبح نظامًا أساسيًا يتيح لمطوري الواجهة الأمامية للجوّال والويب تطوير تطبيقات كاملة دون الحاجة إلى خوادم خلفية. لقد سهلت التحسينات الأخيرة بشكل كبير الحلول التي لا تحتاج إلى خادم والتي توفر بديلاً قابلاً للتطبيق وقابل للتطوير وفعال من حيث التكلفة لحلول خادم Cloud Virtual Machine.

خطط تسعير وفواتير Firebase

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

يمكن استضافة موقع ويب به محتوى يصل إلى 1 جيجا بايت وتحويلات أقل من 10 جيجا بايت / شهر بموجب خطة Spark. يسمح Firestore بسعة تصل إلى 1 جيجابايت من البيانات وحركة مرور الشبكة تصل إلى 10 جيجابايت / شهر. تصل حدود التخزين السحابي إلى 5 جيجابايت من البيانات وتنزيلات تصل إلى 1 جيجابايت في اليوم.

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

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

كيفية إعداد Firebase

مطلوب حساب بريد إلكتروني للمصادقة. يفضل حساب بريد جوجل. يمكن إنشاؤها على https://mail.google.com.

مطلوب أيضًا حساب Google Cloud Platform (GCP). نسخة تجريبية مجانية متاحة هنا. يمنحك هذا رصيدًا بقيمة 300 دولار ، وهو متاح لمدة عام. مطلوب بطاقة ائتمان كدليل على الهوية. قد تتقاضى Google دولارًا واحدًا ثم تقوم بردها. سيتم الخصم من بطاقة الائتمان شهريًا إذا تم تمكين الفوترة واستخدام الموارد القابلة للفوترة. هناك أيضًا شركات مزوّدة لـ Google تعمل كوسائط للفوترة. أنت تدفع للمزود مقابل استخدام السحابة ، وهم يدفعون لـ Google. لديهم خطط الفوترة الخاصة بهم وقد يقدمون نسخة تجريبية مجانية.

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

مشاريع Firebase هي أيضًا مشاريع GCP. يمكنك إنشاء مشروع GCP واستيراده إلى Firebase ، أو إنشاء مشروع Firebase ، والذي سينشئ أيضًا مشروع GCP. وحدة تحكم Firebase هنا.

مطلوب إعداد مختلف لأنواع مختلفة من التطبيقات. أهمها تطبيقات Android و iOS والويب. يمكن العثور على إرشادات الإعداد في أدلة Firebase الرسمية.

أدوات واجهة سطر أوامر Firebase (CLI) مطلوبة لبعض العمليات. يتطلب ذلك تثبيت Node.js وأداة npm . إذا كان يعمل على نظام macOS أو Linux ، فسيحتاج الأمر npm إلى التشغيل باستخدام sudo .

sudo npm install -g firebase-tools

المصادقة والتخويل

ربما تكون مصادقة Firebase هي أكثر مكونات Firebase استخدامًا. يمكن للمستخدمين تحديد واحد أو أكثر من آليات المصادقة. هذه هي عناوين البريد الإلكتروني وكلمة المرور وأرقام الهواتف وموفري الهوية الفيدراليين Google و Facebook و Twitter و GitHub. يمكن تمكين أي عدد من آليات المصادقة.

تطالب واجهة مستخدم Firebase المستخدم بآلية استخدام:

مصادقة Firebase

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

تسمح واجهات برمجة التطبيقات (API) لمستخدمي الإدارة بإدارة المستخدمين برمجيًا. تشمل العمليات:

  • إنشاء وتحديث وحذف المستخدمين
  • ابحث عن المستخدمين بمعايير البحث مثل عنوان البريد الإلكتروني أو رقم الهاتف
  • الوصول إلى المعلومات مثل تاريخ إنشاء الحساب وآخر تاريخ ووقت تسجيل الدخول
  • تحقق من صحة عناوين البريد الإلكتروني وأرقام الهواتف دون الحاجة إلى استخدام مهام سير العمل الموجودة

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

استضافة Firebase

تسمح استضافة Firebase باستضافة محتوى الويب الثابت ، والذي يتضمن JavaScript ، في السحابة دون الحاجة إلى خادم ويب. يتم تخزين المحتوى مؤقتًا عند أطراف شبكة توصيل المحتوى العالمية (CDN). يتيح ذلك الوصول السريع إلى المحتوى من أي مكان في العالم.

يمكن استضافة موقع ويب واحد أو أكثر عن طريق إضافتها إلى قسم الاستضافة في مشروع Firebase في Firebase Console. يتم تسليم المحتوى عبر طبقة المقابس الآمنة ويتم منحه عنواني URL من النموذج ، [https://site-name.web.app] و https://site-name.firebaseapp.com ، حيث يكون site-name إما اسم المشروع أو اسم الموقع المحدد من قبل المستخدم.

من السهل جدًا استضافة الموقع من اسم المجال الخاص بك بشرط أن تتمكن من تغيير سجلات DNS للمجال. تقوم بإضافة اسم المجال الخاص بك إلى موقع على Firebase Console. ستحصل بعد ذلك على سجل TXT لنظام أسماء النطاقات ، والذي يتعين عليك إضافته إلى DNS الخاص بنطاقك لتثبت لـ Google أنك تملك النطاق. بمجرد ظهور سجل TXT ، يمكنك الحصول على سجلات DNS A للموقع. يتم توفير شهادة SSL للموقع تلقائيًا. بمجرد توفير الشهادة ، يصبح الموقع متاحًا عالميًا. يمكن أن يستغرق الأمر ، من حيث المبدأ ، عدة ساعات لتحديثات DNS وتوفير الشهادة. من الناحية العملية ، يمكن إكمال العملية في 20 دقيقة.

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

 firebase login firebase init

سيُطلب منك تحديد مشروع وأي خدمات العميل مطلوبة. يمكن دائمًا إضافة الخدمات لاحقًا ولا يلزم تحديدها في هذه المرحلة.

قم بإنشاء ملف يسمى firebase.json ، والذي يحدد الدليل الجذر لموقع الويب والملفات المطلوب استبعادها. ستحتاج أيضًا إلى ملف .gitignore لاستبعاد الملفات من التحكم في الإصدار.

 { "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } }

ثم انسخ المحتوى الثابت إلى الدليل العام. أخيرًا ، انشر الموقع في السحابة.

 firebase deploy

لتغيير محتوى الويب ، ما عليك سوى تغيير ملفات المحتوى وإصدار أمر النشر. تظهر كل عملية نشر كإصدار على Firebase Console. يمكنك العودة إلى نسخة سابقة بنقرة واحدة.

يمكن لـ Firebase Hosting أيضًا إعادة كتابة URIs إلى الملفات ووظائف السحابة والتشغيل السحابي. هذا يبسط الأمور إلى حد كبير لأنه ليس من الضروري تعيين مجال لهذه الخدمات. يتم تعريف عمليات إعادة الكتابة عن طريق إضافة قسم إعادة الكتابة إلى قسم الاستضافة في firebase.json. سيفشل نشر الاستضافة إذا لم تكن الخدمة موجودة.

 { "hosting": { "public": "public", "rewrites": [ { "source": "/xxx", "destination": "/profile.html" }, { "source": "/yyy", "function": "profile" }, { "source": "/api{,/**}", "run": { "serviceId": "cloud-api", "region": "europe-west1" } } ] } }

مخزن البيانات

يوفر Firebase واجهات برمجة تطبيقات للعميل للوصول إلى تخزين البيانات المستندة إلى مجموعة النظراء. هناك ثلاثة أنواع من التخزين:

  • قاعدة بيانات الوقت الحقيقي
  • سحابة Firestore
  • سحابة التخزين

يتيح ذلك لعملاء الجوّال والويب تخزين البيانات واستردادها دون الحاجة إلى خادم.

قاعدة بيانات الوقت الحقيقي

Realtime Database هي قاعدة بيانات NoSQL مستضافة على السحابة. تتم مزامنة البيانات الموجودة في Realtime Database تلقائيًا في الوقت الفعلي مع جميع الأجهزة المتصلة. إنه يعمل عبر النظام الأساسي لنظام Android و iOS والويب. يتم تخزين البيانات كهيكل شجرة JSON. يمكن تعيين قواعد الأمان للتحكم في الوصول للقراءة والكتابة إلى البيانات.

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

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

لا تسمح قواعد الأمان افتراضيًا بالوصول إلى البيانات. يمكن إضافة القواعد بشكل عام أو إلى العقد الفردية لكائن JSON. تتحكم قواعد الأمان في الوصول إلى البيانات للقراءة والكتابة ويمكنها إجراء التحقق من الصحة.

تعد قاعدة بيانات Realtime أكثر ملاءمة لأجزاء صغيرة من البيانات التي لا تتطلب بنية بيانات متداخلة بعمق. الحد المجاني هو 1 جيجا بايت من البيانات.

سحابة Firestore

يُنظر إلى Cloud Firestore على أنه بديل لقاعدة بيانات Realtime. إنه يوسع وظائف Realtime Database. البيانات ليست في شجرة JSON ولكنها مجموعة هرمية من المستندات. تتكون كل وثيقة من مجموعة من أزواج المفتاح والقيمة والوثائق الفرعية الاختيارية. تسمح الاستعلامات بالتصفية والفرز الأكثر تعقيدًا وإرجاع المستندات الكاملة فقط. لا تُرجع الاستعلامات المستندات الفرعية.

سيحل Cloud Firestore قريبًا محل Cloud Datastore. يمكن تشغيله في وضع Datastore أو في الوضع الأصلي. سيتم ترحيل جميع تطبيقات Datastore تلقائيًا إلى Cloud Firestore.

إن Cloud Firestore هو الأنسب لأجزاء صغيرة نسبيًا من البيانات. يمكن أن يكون لها بنية بيانات متداخلة بشدة. الحد المجاني هو 1 جيجا بايت من البيانات.

سحابة التخزين

التخزين السحابي مخصص لتخزين الملفات مثل الصور ومقاطع الفيديو. يمكن لعملاء الجوّال والويب استخدام Firebase لتحميل الملفات وتنزيلها مباشرةً من السحابة وإليها دون الحاجة إلى خادم خلفية. الحد المجاني هو 5 جيجابايت من البيانات.

وظائف السحابة

تعد وظائف السحابة تقنية مهمة لإنشاء تطبيقات بدون خادم. يمكن كتابة وظيفة السحابة في JavaScript أو TypeScript أو Python أو Go ، والتي يتم نشرها مباشرة في سحابة Google. يتم تشغيل الوظيفة عن طريق طلب HTTP أو حدث في السحابة مثل الكتابة إلى Cloud Storage.

يمكن لوظيفة السحابة التعامل مع طلب واحد فقط في كل مرة ، ولكن السحابة تقوم تلقائيًا بتوسيع نطاق الوظيفة عن طريق تكرارها. تستخدم وظيفة السحابة المكتوبة بلغة Python مكتبة Flask للتعامل مع طلبات HTTP. تأخذ الوظيفة كائن الطلب كمعامل وتعيد نص الاستجابة.

تتطلب وظيفة Python Cloud البسيطة دليل عمل ، وتنتقل نقطة الدخول إلى الملف main.py

 def simple_cloud_function(request): return "It worked"

تتم إدارة التبعيات عن طريق النقطة والدخول في ملف يسمى requirements.txt .

 Flask==1.0.2

يتم نشر وظيفة باستخدام أداة سطر أوامر gcloud . تحدد اسم الوظيفة واللغة والمشغل.

 gcloud functions deploy simple_cloud_function --runtime python37 \ --trigger-http

يتم عرض عنوان URL الخاص بالوظيفة عند النشر ويمكن العثور عليه عن طريق تشغيل الأمر description.

 gcloud functions describe simple_cloud_function Url: https://europe-west1-project-id.cloudfunctions.net/simplecloud_function

يمكن للوظائف السحابية الاتصال بواجهة برمجة تطبيقات Google Cloud و Firebase لتوفير وظائف خلفية. أنها توفر معلومات تسجيل حول بدء التنفيذ ووقت التنفيذ. يمكن إضافة تسجيل إضافي بسهولة. يمكن عرض السجلات في Stackdriver Logging UI وعبر أداة سطر أوامر gcloud .

 gcloud functions logs read simple_cloud_function

يمكن عرض الوظائف وحذفها في Google Cloud Console.

Google Cloud Console: الوظائف

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

تشغيل السحابة

تم إضافة وظائف Cloud Run مؤخرًا والتي تسهل بشكل كبير التطبيقات بدون خادم. إنه يتيح تشغيل حاويات Docker في السحابة دون الحاجة إلى القيام بإعداد بنية تحتية معقدة. يمكن تشغيله في الوضع المُدار ، والذي يستخدم وقت تشغيل Knative ، المبني على Kubernetes. يمكن أيضًا تشغيله على Anthos ، والذي تم إنشاؤه أيضًا على Kubernetes ولكنه يسمح بتشغيل الحاويات عبر السحب وحتى في مركز البيانات الخاص بك. ليست هناك حاجة لإعداد وإدارة مجموعة Kubernetes حيث يتم كل ذلك تلقائيًا.

يمكن إدارة أي تطبيق يمكن دمجه في صور Docker بواسطة Cloud Run. يقوم تلقائيًا بقياس عدد الحاويات بناءً على الطلب. كما تنخفض أيضًا إلى الصفر في حالة عدم استخدام الخدمة. الخدمات غير المستخدمة لا تحمل أي رسوم.

تحتاج حاويات Docker إلى تشغيل خادم ويب إذا كانت ستستجيب لطلبات HTTP. ستستخدم خدمة Python Flask. ستكون نقطة الدخول في app.py

 from flask import Flask, request app = Flask(__name__) @app.route('/api/profile') def profile(): page = ''' Page content ''' return page

يحتاج التطبيق إلى Dockerfile لإنشاء الصورة.

 FROM python ENV APP_HOME /app WORKDIR $APP_HOME COPY . . ENV PORT 8080 RUN pip install Flask gunicorn firebase-admin CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app

يتم نشر حاويات Cloud Run مباشرة في السحابة.

 gcloud run deploy --image=image_name --platform=managed \ --region=europe-west1 --allow-unauthenticated

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

 gcloud run services list SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT cloud-api europe-west1 https://cloud-api-h42ifbxkyq-ew.a.run.app [email protected] 2020-02-05T10:53:30.006Z

يحتوي عنوان URL على رقم عشوائي يصعب إدارته. هذا هو المكان الذي تصبح فيه قواعد إعادة كتابة Firebase Hosting مفيدة للغاية.

يمكن عرض الخدمات وحذفها في Google Cloud Console.

Google Cloud Console: الخدمات

يعد Cloud Run مناسبًا بشكل مثالي لاستضافة REST API. الحدود المجانية الشهرية هي 180.000 ثانية من وحدة المعالجة المركزية ، و 360.000 غيغابايت ثانية من الذاكرة ، و 2 مليون طلب ، وخروج شبكة 1 غيغابايت. لا يتم تطبيق حد الخروج المجاني للشبكة إلا إذا تم نشر الخدمة في منطقة بأمريكا الشمالية.

المصادقة

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

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

 gcloud auth print-identity-token

رأس التفويض مطلوب.

 Authorization: Bearer id-token

ملخص

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

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