تطوير واجهات خلفية بلا خوادم (serverless) على AWS

واجهات خلفية تعمل دون خوادم تحتاج إلى إدارة، على Lambda وSQS وS3 وSecrets Manager، والبنية التحتية مكتوبة ككود في قالب AWS SAM.

نبني واجهات خلفية بلا خوادم باستخدام AWS Lambda وAPI Gateway وSQS وS3، ونعرّف البنية التحتية ككود عبر AWS SAM. هكذا يعمل Rigel وLydiaVault.

آخر تحديث:

ما بنيناه بهذه التقنية

جميعها منشورة؛ صفحات المتاجر والتفاصيل في صفحة المنتجات.

Rigel

تطبيق فيديو بالذكاء الاصطناعي

دوال Lambda خلف API Gateway؛ إرسال الإشعارات والرسائل البريدية عبر SQS مع طوابير للرسائل الفاشلة، والملفات في S3، ومفتاح OpenAI في Secrets Manager، والتنبيهات في CloudWatch. وكل ذلك في قالب SAM واحد.

اعرض المنتج

LydiaVault

مدرب ميزانية بالذكاء الاصطناعي

API Gateway وLambda؛ تُحفظ إيصالات المصروفات في S3 وتُفتح عبر روابط موقّعة محدودة المدة، وتُرسل رسائل إعادة تعيين كلمة المرور عبر SES، وتصل webhooks ربط الحسابات البنكية إلى دالة مستقلة.

اعرض المنتج

متى تكون الواجهة الخلفية بلا خوادم الخيار الصحيح

لا يوجد في الواجهة الخلفية بلا خوادم (serverless) خادم يعمل طوال الوقت. يعيش الكود كدوال على AWS Lambda ولا يعمل إلا عند وصول طلب أو رسالة في طابور أو حلول موعد مهمة مجدولة. ومع ازدياد الطلبات يشغّل AWS نسخاً جديدة من الدالة نفسها؛ أما نظام التشغيل والسعة وتوزيع الحمل فمسؤولية AWS. ويبقى عملنا أن نُعدّ الدوال والطوابير بينها والصلاحيات والمراقبة إعداداً صحيحاً.

حيث يناسب AWS serverless

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

حيث نقترح طريقاً آخر

  • يعتمد التطبيق على اتصالات تبقى مفتوحة: تعمل مراسلة Hippotenus المبنية على Socket.IO على خادم يعمل باستمرار
  • الحمل مرتفع ومنتظم طوال اليوم: قد يكون خادم بسعر ثابت مع Docker وCoolify أكثر قابلية للتوقع
  • يجب أن تبقى البيانات على خادم محدد تختاره أنت: يعمل Hippotenus وLogaritim على خادمنا الخاص مع Docker وCoolify
  • يلزم إجراء حساب طويل داخل طلب واحد: مدة تشغيل استدعاء Lambda الواحد محدودة
AWS Lambda (مع SAM)خادمك الخاص (مع Docker وCoolify)
عند غياب الحركةلا تعمل الدوال؛ ويُحتسب سعر Lambda بعدد الطلبات ومدة التشغيلالخادم يعمل دائماً وسعره لا يتغير
الذروات المفاجئةيشغّل AWS نسخاً جديدة؛ ويحدد السقفَ حصةُ التشغيل المتزامن في الحساب وقاعدةُ البياناتمحدود بقدرة الخادم؛ وتوسيعه يحتاج إلى تخطيط مسبق
المهام الطويلة والاتصالات المفتوحةيُقسَّم العمل إلى طابور أو دالة منفصلةتحمله عملية تعمل باستمرار مباشرة
الصيانةنظام التشغيل على AWS؛ ونحن نرفع إصدار Node.js في القالبتحديثات نظام التشغيل والأقراص والنسخ الاحتياطي مسؤوليتك أو مسؤولية فريق الصيانة
مثالناRigel وLydiaVaultHippotenus وLogaritim وpepechura.com

ما الذي تقوم به كل خدمة من AWS في Rigel وLydiaVault

تعمل الواجهتان الخلفيتان للتطبيقين اللذين طوّرناهما لـ Kata Technology على AWS بلا خوادم. وقاعدة البيانات في كليهما MongoDB، أما بقية الأجزاء فخدمات من AWS:

Lambda

نقاط نهاية API وwebhooks وعمّال الطوابير والمهام المجدولة. وفي Rigel تعمل المهام الثقيلة مثل دمج الفيديو في دوال منفصلة مزوّدة بطبقة ffmpeg وذاكرة أكبر.

API Gateway

بوابة REST API. تتحقق دالة تفويض (Lambda authorizer) من JWT الخاص بالمستخدم قبل أن يصل الطلب إلى الدالة. في Rigel وLydiaVault، وتُقدَّم واجهة Rigel البرمجية من نطاقها الخاص.

SQS

طوابير إرسال الإشعارات والرسائل البريدية في Rigel؛ وخلف كل طابور طابور للرسائل الفاشلة (DLQ) يجمع الرسائل التي تعذّرت معالجتها.

S3

الصور المرفوعة والفيديوهات المُنتَجة في Rigel، وإيصالات المصروفات في LydiaVault. تُفتح الصور والإيصالات عبر روابط موقّعة محدودة المدة، وتُقدَّم فيديوهات Rigel عبر CloudFront.

Secrets Manager

يقرأ Rigel منه مفتاح OpenAI ومفتاح توقيع JWT وحساب خدمة Firebase، وتبقى القيمة في الذاكرة ما دامت نسخة الدالة تعمل.

SES

رموز التحقق عند التسجيل ورسائل الحملات في Rigel، ورسائل إعادة تعيين كلمة المرور في LydiaVault.

CloudWatch وX-Ray

السجلات، ومقاييس مستخرجة من السجلات، والتنبيهات، ولوحات المتابعة. ويتتبع X-Ray استدعاءات الدوال في التطبيقين.

DynamoDB

ذاكرة تخزين مؤقت لصفحة الاستكشاف في Rigel؛ ويحذف DynamoDB السجلات تلقائياً عند انتهاء صلاحيتها.

في Lambda تفتح كل نسخة من الدالة اتصالها الخاص بقاعدة البيانات. لذلك نحتفظ باتصال MongoDB خارج الطلب، على مستوى الوحدة: تعيد الطلبات اللاحقة التي تصل إلى النسخة نفسها استخدام الاتصال القائم، ونُبقي مجمّع الاتصالات صغيراً عن قصد. وفي Rigel يُفحص الاتصال قبل استخدامه، فإذا كان قد انقطع يُغلق ويُفتح اتصال جديد.

أعمال لا تجعل المستخدم ينتظر: الطوابير وإعادة المحاولة وطوابير الرسائل الفاشلة

لا تُرسل حملات الإشعارات والبريد التي تُعدّ في لوحة إدارة Rigel داخل طلب اللوحة نفسه، بل يتوزع الإرسال على دوال تفصل بينها طوابير SQS:

01
تُجدول الحملة من اللوحة
02
تكتب دالة مجدولة عمليات الإرسال المستحقة في SQS
03
تعالج دالة عاملة الرسائل واحدة تلو الأخرى
04
تعود الرسالة الفاشلة إلى الطابور وتُعاد محاولتها
05
تنتظر الرسالة التي استنفدت محاولاتها المراجعة في طابور الرسائل الفاشلة
مسار إرسال الإشعارات والرسائل البريدية في Rigel
  • تُحفظ حالة الإرسال لكل مستلم في قاعدة البيانات، ولا تأخذ الدالة العاملة إلا المستلمين الذين ما زالوا في الانتظار؛ فالرسالة المعادة تتخطى من سُجّل أنه استلم.
  • يُتخطى المستخدم الذي ألغى اشتراكه في رسائل الحملات، ويقود رابط إلغاء الاشتراك إلى نقطة نهاية عامة.
  • لا تنتظر أي دالة إنتاج الفيديو بالذكاء الاصطناعي: يرسل Rigel المهمة إلى المزوّد، ويستدعي المزوّد webhook الخاص بـ Rigel عند انتهائها. وتصل أحداث الاشتراك القادمة من RevenueCat بدورها إلى دالة webhook خاصة بها.
  • المهام الطويلة مثل تصدير البيانات في لوحة الإدارة تسلّمها الدالة التي تستقبل الطلب إلى دالة أخرى عبر استدعاء غير متزامن؛ فتحصل اللوحة فوراً على رقم للمهمة وتسأل عن النتيجة لاحقاً.

البنية التحتية ككود: AWS SAM والمراقبة

دوال Rigel وواجهته البرمجية وطوابيره وطوابير الرسائل الفاشلة ومهامه المجدولة وجدول DynamoDB والتنبيهات ولوحات المتابعة والنطاق المخصص كلها معرّفة في قالب AWS SAM واحد. وفي LydiaVault أيضاً تُعرَّف الدوال والواجهة البرمجية ودالة التفويض في القالب بالطريقة نفسها. ويعيش القالب في المستودع نفسه مع الكود، فيُظهر سجل الـ commits متى ولماذا أُضيف طابور أو تنبيه.

الموضوعكيف يعمل في Rigelما الذي يضيفه
البيئاتstacks منفصلة لـ staging وproduction من القالب نفسه، وإعدادات كل بيئة في ملف samconfigتُبنى البيئتان من تعريف واحد، وتُفعَّل التنبيهات ولوحات المتابعة بشروط في production فقط
التحزيميحزم sam build كل دالة على حدة وبصيغة مصغّرة عبر esbuildتحمل كل دالة كودها فقط
النشريعرض sam deploy مجموعة تغييرات CloudFormation ويطلب الموافقة قبل تطبيقهايُرى مسبقاً ما الذي سيُضاف أو يتغير أو يُحذف
التطوير المحلييمكن تشغيل الواجهة البرمجية على حاسوب المطوّر عبر sam localيمكن تجربة التغيير قبل أن يصل إلى AWS
الفحوصمع كل push وpull request إلى فرعي main وdevelop يشغّل GitHub Actions فحص lint وفحص الأنواع واختبارات الوحداتيظهر مبكراً الكود الذي لا يُترجَم أو يكسر اختباراً

والمراقبة جزء من القالب أيضاً. يكتب Rigel سجلاته بصيغة JSON منظّمة، وتحوّل مرشحات المقاييس في CloudWatch أسطراً معينة من السجلات، مثل حالات فشل إنتاج الفيديو وأخطاء الدفع في RevenueCat، إلى مقاييس. وعندما يتجاوز مقياس حدّه يُطلق تنبيهاً يمر عبر SNS إلى دالة Lambda ومنها إلى Slack. كما تُرسل أسطر السجلات ذات مستوى الخطأ من الدوال الحرجة إلى Slack كذلك. وفي Rigel يضم X-Ray إلى التتبع أيضاً استدعاءات HTTP الصادرة إلى الخدمات الخارجية.

كيف يسير مشروع AWS serverless

  1. 01

    مكالمة تعريفية مجانية

    30 دقيقة

    نتحدث عن الأعمال التي يجب أن تتم فوراً وتلك التي يمكن أن تجري في الخلفية، وعن الوضع الحالي لحساب AWS لديك.

  2. 02

    نطاق مكتوب وعرض سعر

    نكتب الدوال والطوابير والمهام المجدولة وتخزين البيانات والملفات والمراقبة، مع معايير القبول.

  3. 03

    إصدارات أسبوعية

    كل أسبوع تصدر نسخة عاملة إلى بيئة staging، ويمكنك تجربة نقاط النهاية من التطبيق نفسه أو من عميل API.

  4. 04

    الاختبار والإطلاق

    يختبر مهندس ضمان جودة أول النسخة على staging قبل انتقالها إلى production، وعند الانتقال تُراجَع مجموعة التغييرات ويُوافَق عليها.

  5. 05

    الثلاثون يوماً بعد الإطلاق

    30 يوماً

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

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

أسئلة شائعة عن AWS serverless

هل سأبقى مرتبطاً بـ AWS؟

جزئياً، ونقول ذلك بوضوح منذ البداية. قواعد العمل موجودة في كود TypeScript عادي، وقاعدة البيانات MongoDB، ولا يرتبط أي منهما بـ AWS. أما SQS وSES وSecrets Manager وقالب SAM فخاصة بـ AWS، والانتقال إلى بيئة أخرى يعني إعداد بدائلها. في المقابل، واجهة S3 معيار شائع: يحفظ Hippotenus ملفاته في خدمة تخزين أخرى متوافقة مع S3 باستخدام AWS SDK نفسه.

هل يشكّل التشغيل البارد (cold start) مشكلة؟

يحدث تأخير قصير عند تشغيل نسخة الدالة لأول مرة. ولتقليصه نحزم كل دالة على حدة وبصيغة مصغّرة عبر esbuild، ونُبقي اتصال قاعدة البيانات، وفي Rigel القيم المقروءة من Secrets Manager، في الذاكرة ما دامت النسخة تعمل. وهكذا لا يتحمل هذه الكلفة إلا أول طلب يصل إلى النسخة. وإذا كان كل طلب في عملك شديد الحساسية للتأخير، نتناول ذلك على حدة في المكالمة التعريفية.

هل تستخدمون Kubernetes أو ECS أو RDS؟

ليس في Rigel ولا LydiaVault: كلاهما يعمل على Lambda دون إدارة خوادم أو حاويات، وقاعدتا بياناتهما MongoDB. وفي المشاريع التي تحتاج إلى حاوية تعمل باستمرار، كما في Hippotenus وLogaritim، نستخدم خادمنا الخاص مع Docker وCoolify.

هل يمكنكم العمل داخل حساب AWS الخاص بنا؟

نعم. لأن البنية التحتية معرّفة في القالب، يمكن نشر القالب نفسه في حسابك، ونُعدّ staging وproduction كـ stacks منفصلة. أما الموارد التي تُنشأ خارج القالب، مثل S3 bucket وشهادة النطاق، فتُمرَّر إليه كمعاملات، فيبقى واضحاً مصدر كل مورد.

ماذا يبقى لديّ في نهاية المشروع؟

ترخيص دائم لاستخدام البرنامج، ووثائقه. وإذا أردت نقل الكود المصدري إليك مع قالب SAM فذلك مقابل رسوم إضافية تُكتب بشكل منفصل في العرض.

خدمات ذات صلة

تطوير تطبيقات الجوالتطوير برمجيات مخصصةأتمتة الذكاء الاصطناعيتطوير MVP
تواصل معنا

هل تفكر في واجهة خلفية بلا خوادم على AWS؟

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