🎯 Building Serverless Architectures — بناء البنى السحابية بدون خوادم
تُعد هذه الوحدة دليلك الشامل إلى عالم البنى السحابية بدون خوادم Serverless Architectures والخدمات المصغرة Microservices على منصة Amazon Web Services (AWS). ستتعرف من خلالها على كيفية تصميم وبناء تطبيقات لا تتطلب إدارة الخوادم باستخدام AWS Lambda وAmazon API Gateway وAWS Step Functions وخدمات الحاويات. تمنحك هذه الوحدة المهارات اللازمة لبناء تطبيقات قابلة للتوسع ومرنة وفعالة من حيث التكلفة باستخدام أحدث الأنماط المعمارية السحابية.
1️⃣ What Is Serverless — ما هي البنية بدون خوادم
البنية بدون خوادم هي نمط معماري يمكنك من نشر التطبيقات دون الحاجة إلى التفكير في الخوادم أو حجمها. تدير AWS بيئة التشغيل بالكامل وحجم الخدمة نيابة عنك. يمكنك التركيز على منتجك الأساسي وجعل نشر التطبيقات أصغر وأسرع. فمثلاً يمكن نشر دوال AWS Lambda بنقرة واحدة في وحدة التحكم وتكون جاهزة خلال ثوانٍ. نموذج التسعير يعتمد على الاستخدام الفعلي حيث تدفع فقط مقابل ما تستخدمه، مما يلغي الحاجة للدفع مقابل خدمات لا تعمل.
- لا توجد إدارة للخوادم (No server management) — AWS تدير كل شيء من نظام التشغيل إلى التصحيح الأمني.
- خدمات تدفع مقابل القيمة (Pay-for-value services) — تسعير يعتمد على حجم الاستخدام والتخزين.
- توسع مستمر (Continuous scaling) — الموارد تتوسع وتتقلص تلقائياً بناءً على حركة المرور.
- توفر عالٍ مدمج (Built-in high availability) — مخازن البيانات تعمل عبر 3 مناطق توفر.
- مناسبة للبنى المعتمدة على الأحداث (Event-driven architectures) والخدمات المصغرة.
تستخدم AWS Lambda للحوسبة وAmazon API Gateway للواجهة وAmazon DynamoDB كقاعدة بيانات.
لا تحتاج لإدارة أي خوادم وتدفع فقط عند استخدام التطبيق، مما يبقي التكاليف شبه معدومة في المراحل الأولى.
2️⃣ Three-Tier Design Comparison — مقارنة التصميم ثلاثي الطبقات
في التصميم التقليدي داخل VPC تستخدم Application Load Balancer يشير إلى طبقة ويب تعمل على عدة Amazon EC2 عبر منطقتي توفر مع Auto Scaling. أما طبقة البيانات فتعتمد على Amazon RDS Multi-AZ المُدار. في التصميم بدون خوادم تستبدل الطبقات بخدمات مدارة بالكامل: Amazon CloudFront لتوزيع المحتوى الثابت من Amazon S3 وAmazon Cognito للمصادقة وAPI Gateway مع Lambda لمنطق الأعمال وDynamoDB لقاعدة البيانات. هذا يقلل الأعباء التشغيلية بشكل كبير لأن AWS تتولى مسؤولية إدارة الخوادم وتطبيق التصحيحات الأمنية والتوسع التلقائي.
- تكوين خادم: مطلوب في VPC ← غير مطلوب في البنى بدون خوادم.
- تحديث نظام التشغيل: مطلوب في VPC ← غير مطلوب في البنى بدون خوادم.
- تثبيت منصة التطبيق: مطلوب في VPC ← غير مطلوب في البنى بدون خوادم.
- بناء ونشر التطبيقات: مطلوب في كلا النموذجين.
- تكوين التوسع التلقائي وموازنة الأحمال: مطلوب في VPC ← غير مطلوب في البنى بدون خوادم.
- مراقبة التطبيقات وصيانتها: مطلوب في كلا النموذجين.
في البنية التقليدية يحتاج لتكوين EC2 وLoad Balancer وAuto Scaling وتطبيق تحديثات أمنية أسبوعياً.
في البنية بدون خوادم يكتب كود Lambda فقط ويربطه بـ API Gateway وDynamoDB وكل شيء آخر تديره AWS.
3️⃣ AWS Serverless Services — خدمات AWS بدون خوادم
طورت AWS خدمات بدون خوادم للطبقات الثلاث لتطبيقك: الحوسبة والتكامل التطبيقي ومخازن البيانات. وهناك خدمات متخصصة للمجالات مثل التحليلات. في الحوسبة لديك AWS Lambda للدوال التي تعتمد على الأحداث وAWS Fargate للحاويات بدون خوادم مع Amazon ECS أو Amazon EKS. في التكامل التطبيقي لديك Amazon API Gateway لنشر REST وHTTP APIs وAWS AppSync لـ GraphQL APIs وAmazon SQS للرسائل وAmazon SNS للإشعارات وAWS Step Functions لتنسيق سير العمل وAmazon EventBridge للحافلات الحدثية.
- الحوسبة: AWS Lambda وLambda@Edge وAWS Fargate.
- التكامل التطبيقي: Amazon API Gateway وAWS AppSync وAmazon SQS وAmazon SNS وAmazon EventBridge وAWS Step Functions.
- مخازن البيانات: Amazon S3 وAmazon EFS وAmazon DynamoDB وAmazon Aurora Serverless وAmazon Redshift Serverless وAmazon OpenSearch Serverless وAmazon Neptune Serverless.
- المصادقة: Amazon Cognito.
- استضافة الويب: AWS Amplify.
- توصيل المحتوى: Amazon CloudFront.
يستخدم Amplify لاستضافة الواجهة الأمامية وCognito للمصادقة وAPI Gateway مع Lambda لمنطق الأعمال وDynamoDB للتخزين وStep Functions لتنظيم سير عمل الطلبات وSNS للإشعارات.
كل هذه الخدمات مدارة بالكامل ولا تحتاج لأي إدارة خوادم.
وكما تدفع إيجار الشقة فقط عند سكنك فيها تدفع مقابل خدمات serverless فقط عند استخدامك لها.
لا تهتم بتصليح السباكة أو تغيير اللمبات — AWS تهتم بكل تفاصيل البنية التحتية.
- البنية بدون خوادم تلغي الحاجة لإدارة الخوادم ونظام التشغيل والتصحيحات الأمنية.
- نموذج الدفع حسب الاستخدام يخفض التكاليف خاصة للشركات الناشئة والتطبيقات ذات الحركة المتغيرة.
- الخدمات بدون خوادم تتوسع تلقائياً وتتمتع بتوفر عالٍ مدمج.
- توفر AWS خدمات بدون خوادم للحوسبة والتكامل التطبيقي ومخازن البيانات والمصادقة.
- مناسبة بشكل خاص للتطبيقات المعتمدة على الأحداث (event-driven) والخدمات المصغرة (microservices).
- في التصميم بدون خوادم، مهام التشغيل الوحيدة عليك هي البناء والنشر والمراقبة.
📖 جدول المصطلحات
| المصطلح (English) | الترجمة | المفهوم |
|---|---|---|
| Serverless Architecture | بنية بدون خوادم | نمط معماري لا يتطلب إدارة الخوادم حيث تدير AWS بيئة التشغيل بالكامل. |
| Event-driven architecture (EDA) | بنية تعتمد على الأحداث | نمط حديث من خدمات صغيرة منفصلة تنشر وتستهلك الأحداث للتواصل. |
| AWS Fargate | Fargate | محرك حاويات بدون خوادم يعمل مع Amazon ECS وAmazon EKS. |
| Lambda@Edge | Lambda عند الحافة | امتداد لـ Lambda يتيح تشغيل الدوال في مواقع CloudFront الطرفية. |
| Amazon DynamoDB | DynamoDB | قاعدة بيانات NoSQL مدارة بالكامل بزمن استجابة بالميلي ثانية. |
| Amazon EventBridge | حافلة الأحداث | خدمة حافلة أحداث لتوجيه الأحداث إلى الوجهات المكونة. |
| Pay-for-value | ادفع مقابل القيمة | نموذج تسعير يعتمد على الاستخدام الفعلي وليس على الحجز المسبق. |
| AWS AppSync | AppSync | خدمة لنشر وإدارة واجهات GraphQL API بشكل بدون خوادم. |
1️⃣ Microservice Characteristics — خصائص الخدمات المصغرة
الخدمات المصغرة هي نمط معماري يبني التطبيق كمكونات مستقلة كل منها يدير عملية معينة كخدمة منفصلة. تتواصل هذه الخدمات من خلال واجهات محددة باستخدام واجهات برمجة خفيفة APIs. كل خدمة مبنية لقدرة عمل محددة وتؤدي وظيفة واحدة فقط. ونظراً لأنها تعمل بشكل مستقل يمكن تحديث كل خدمة ونشرها وتوسيع نطاقها بشكل منفصل. تتميز الخدمات المصغرة بخاصيتين رئيسيتين: الاستقلالية (autonomous) والتخصص (specialized).
- استقلالية (Autonomous): يمكن تطويرها ونشرها دون التأثير على الخدمات الأخرى وتتوسع بشكل مستقل ولا تشارك الكود مع خدمات أخرى.
- تخصص (Specialized): تؤدي وظيفة عمل واحدة وتحل مشكلة محددة ويمتلكها فريق تطوير صغير يختار أدواته بنفسه.
- عديمة الحالة (Stateless): لضمان سرعة التهيئة والتوسع. يُفضل تخزين الحالة مؤقتاً (caching state) للتعافي السريع من الأعطال.
- مخزن بيانات خاص: تملك كل خدمة قاعدة بيانات خاصة بها لتسهيل المعاملات الذرية والمتسقة والمعزولة والمتينة (ACID).
عند ازدياد الطلب على خاصية الرسائل يجب توسيع نطاق التطبيق بالكامل.
بعد التحويل إلى خدمات مصغرة تصبح كل من خدمة المستخدمين وخدمة المواضيع وخدمة الرسائل منفصلة تتوسع كل منها حسب احتياجها الخاص.
2️⃣ Benefits of Microservices — فوائد الخدمات المصغرة
توفر الخدمات المصغرة ست فوائد رئيسية تحسن سرعة الفريق ومرونة التطبيق. تسمح بتنظيم فرق صغيرة مستقلة تمتلك خدماتها مما يقصر دورات التطوير بشكل كبير. كما تتيح إعادة استخدام الخدمات لبناء ميزات جديدة دون كتابة كود من الصفر، وتوسيع النطاق المرن لكل خدمة حسب الطلب على الميزة التي تدعمها.
- سرعة الفريق (Team agility): فرق صغيرة مستقلة تعمل بشكل أسرع ضمن سياق مفهوم جيداً.
- إعادة استخدام الكود (Reusable code): يمكن استخدام الخدمة كلبنة بناء لميزات أخرى دون كتابة كود جديد.
- توسع مرن (Flexible scaling): كل خدمة تتوسع بشكل مستقل مما يسمح بقياس دقيق للتكلفة.
- حرية تقنية (Technological freedom): كل فريق يختار أفضل أداة لحل مشكلته المحددة.
- مرونة (Resilience): فشل خدمة لا يؤدي لانهيار التطبيق بالكامل بل لتدهور وظيفة محددة.
- نشر مبسط (Simplified deployment): استخدام CI/CD pipelines يسرع تجربة الأفكار الجديدة والتراجع عند الحاجة.
عند موسم العروض يرتفع الطلب على خدمة المنتجات فقط فتتوسع منفردة دون بقية الخدمات.
إذا توقفت خدمة الدفع مؤقتاً يظل بإمكان العملاء تصفح المنتجات وإضافتها للسلة لحين عودة الخدمة.
3️⃣ Microservice Serverless Patterns — أنماط الخدمات المصغرة بدون خوادم
هناك ثلاثة أنماط رئيسية للحوسبة في الخدمات المصغرة بدون خوادم: واجهات RESTful APIs والحاويات (Containers) والتاريخ (Streaming). نمط RESTful APIs يستخدم Amazon API Gateway مع AWS Lambda وهو الأنسب للدوال عديمة الحالة التي لا تتجاوز 15 دقيقة. نمط الحاويات يستخدم AWS Fargate خلف Application Load Balancer وهو مناسب للخدمات التي تحتاج أكثر من 15 دقيقة لإكمال عملها. نمط التاريخ يستخدم AWS Lambda مع Amazon Kinesis لمعالجة البيانات المتدفقة بشكل مستمر.
يستخدم REST API مع Lambda للمعاملات السريعة (الاستعلام عن الرصيد).
يستخدم Fargate مع API Gateway للمعاملات الطويلة (تحويل مبلغ كبير بموافقات متعددة).
ويستخدم Lambda مع Kinesis لتحليل تدفق المعاملات واكتشاف الاحتيال فورياً.
وكما لو توقف أحد الطهاة عن العمل يستمر المطعم بتقديم باقي الأطباق — هكذا فشل خدمة مصغرة لا ينهي التطبيق بأكمله.
- الخدمات المصغرة هي تطبيقات مكونة من خدمات مستقلة ومتخصصة تتواصل عبر واجهات API خفيفة.
- الاستقلالية تعني القدرة على التطوير والنشر دون التأثير على الخدمات الأخرى.
- التخصص يعني أن كل خدمة تؤدي وظيفة عمل واحدة يملكها فريق صغير.
- فوائد الخدمات المصغرة تشمل سرعة الفريق وإعادة استخدام الكود والتوسع المرن والحرية التقنية.
- الأنماط المتاحة بدون خوادم: RESTful APIs والحاويات والتاريخ.
- الخدمات المصغرة تشكل جزءاً من البنية ثلاثية الطبقات في طبقة التطبيق والبيانات.
📖 جدول المصطلحات
| المصطلح (English) | الترجمة | المفهوم |
|---|---|---|
| Microservices | الخدمات المصغرة | نمط معماري يبني التطبيق كمكونات مستقلة تتواصل عبر APIs خفيفة. |
| Monolithic application | تطبيق متجانس | تطبيق تجمع كل عملياته في خدمة واحدة مترابطة بإحكام. |
| Autonomous | استقلالي | خاصية تمكن الخدمة من العمل والتوسع دون التأثير على الخدمات الأخرى. |
| Stateless | عديم الحالة | لا يحتفظ بحالة بين الطلبات لضمان سرعة التهيئة والتوسع. |
| ACID transactions | معاملات ACID | مجموعة خصائص لضمان موثوقية معاملات قواعد البيانات. |
| CI/CD pipeline | خط أنابيب التكامل والنشر المستمر | أتمتة بناء واختبار ونشر التطبيقات لضمان السرعة والجودة. |
| RESTful API | واجهة REST | نمط معماري لواجهات البرمجة يعتمد على موارد عديمة الحالة. |
1️⃣ AWS Lambda Overview — نظرة عامة على AWS Lambda
AWS Lambda هي خدمة حوسبة تتيح لك تشغيل دوال برمجية دون توفير أو إدارة الخوادم. تقوم Lambda بتشغيل الكود على بنية تحتية عالية التوفر وتؤدي كل مهام إدارة موارد الحوسبة. يمكنك تكوين الدالة بلغة التشغيل المفضلة وحجم الذاكرة (من 128 ميجابايت إلى 10,240 ميجابايت) ومدة المهلة القصوى (حتى 15 دقيقة كحد أقصى صارم). تدعم Lambda نوعين من حزم النشر: صور الحاويات (container images) وأرشيفات .zip. تدفع فقط مقابل وقت الحوسبة الذي تستهلكه ولا توجد رسوم عندما لا يعمل الكود.
- تشغيل الدوال دون توفير أو إدارة الخوادم — AWS تدير كل شيء.
- تكوين مرن: لغة تشغيل وحجم ذاكرة ومدة مهلة.
- الحد الأقصى لمدة التشغيل: 15 دقيقة (حد صارم من AWS).
- نشر الدوال كصور حاويات أو أرشيفات .zip.
- توسع تلقائي: تشغل Lambda نسخاً متعددة من الدالة بالتوازي.
- تسعير حسب الاستخدام: تدفع فقط لوقت الحوسبة الذي تستهلكه.
تستخدم Lambda التي تُشغل تلقائياً عند رفع ملف فيديو إلى Amazon S3.
تستدعي الدالة خدمة تحويل وسائط ثم تخزن النتيجة في مجلد آخر في S3 — كل هذا دون أي خادم يُدار.
2️⃣ Lambda Function Location — مواقع تشغيل دوال Lambda
يمكن تشغيل دالة Lambda داخل VPC المملوكة لخدمة Lambda أو في ذاكرة تخزين مؤقت طرفية لـ Amazon CloudFront عبر Lambda@Edge. عند إنشاء دالة Lambda تنشرها في منطقة AWS حيث تريد تشغيلها. عند استدعاء الدالة يقوم Lambda بتهيئة جهاز افتراضي Firecracker microVM على خادم EC2 في VPC الخدمة. Lambda@Edge يسمح بتشغيل دوال Node.js أو Python في مواقع CloudFront الطرفية الأقرب للمستخدم لتقليل زمن الاستجابة.
يستخدم Lambda@Edge دالة Python في موقع CloudFront طرفي تقرأ cookie اللون المفضل.
تعدل الدالة الطلب قبل أن يصل لخادم المنشأ ليعيد صورة المنتج باللون الصحيح — مما يقلل زمن التحميل بشكل كبير.
3️⃣ Lambda Function Handler — معالج دالة Lambda
معالج الدالة (function handler) هو نقطة الدخول في كود الدالة الذي يعالج الأحداث. عند استدعاء الدالة يقوم Lambda بتشغيل معالج الدالة. يستقبل المعالج وسيطين: كائن الحدث (event object) وهو مستند JSON يحتوي بيانات الإدخال ومعلومات الخدمة المستدعية، وكائن السياق (context object) الذي يوفر خصائص ومعلومات عن بيئة التشغيل. من أفضل الممارسات الحفاظ على معالج الدالة صغيراً ووضع منطق الأعمال في دوال منفصلة لتقليل زمن التحميل.
المعالج يستخرج الطول والعرض من كائن الحدث ثم يستدعي دالة calculate_area المنفصلة.
يعيد النتيجة كمستند JSON — هذا الفصل بين المعالج ومنطق الأعمال يجعل الكود أنظف وأسرع تحميلاً.
4️⃣ Lambda Layers — طبقات Lambda
طبقة Lambda هي أرشيف .zip يحتوي كوداً تكميلياً مثل مكتبات التبعيات أو بيئة تشغيل مخصصة أو ملفات إعدادات. يمكن تطبيق الطبقة على أي عدد من الدوال في حسابك. تقليل حجم حزمة النشر: بدلاً من تضمين كل التبعيات مع كود الدالة تضعها في طبقة منفصلة مما يبقي الحزم صغيرة ومنظمة. فصل منطق الدالة الأساسي عن التبعيات: يسمح بتحديث التبعيات بشكل مستقل عن كود الدالة والعكس. ومشاركة التبعيات عبر دوال متعددة دون تكرارها في كل حزمة نشر.
- تقليل حجم حزم النشر بإخراج التبعيات إلى طبقة منفصلة.
- فصل منطق الدالة الأساسي عن التبعيات لتحديث كل منهما بشكل مستقل.
- مشاركة التبعيات عبر دوال متعددة في الحساب دون تكرار.
- تمكين استخدام محرر كود Lambda عندما يكون حجم الحزمة صغيراً بما يكفي.
بدلاً من تضمين Pandas في كل دالة على حدة تنشئ طبقة واحدة تحتوي المكتبة وتطبقها على جميع الدوال.
عند تحديث المكتبة تغير الطبقة مرة واحدة وتصبح جميع الدوال محدثة تلقائياً.
5️⃣ Lambda Invocation Modes — أنماط استدعاء Lambda
تدعم Lambda ثلاثة أنماط رئيسية للاستدعاء: المتزامن (synchronous) وغير المتزامن (asynchronous) والتاريخ (streaming). الاستدعاء المتزامن: يقدم الطالب طلباً وينتظر رداً خلال فترة زمنية محددة. مثال شائع هو تطبيقات الويب عبر API Gateway أو عناوين Lambda Function URL. الاستدعاء غير المتزامن: يقدم الطالب طلباً ولا ينتظر رداً. تضع Lambda الحدث في طابور وتعيد استجابة نجاح بدون معلومات إضافية. استدعاء التاريخ: يتم عبر تعيين مصدر حدث (event source mapping) حيث تقرأ Lambda من تيار بيانات مثل DynamoDB Streams أو Kinesis أو SQS.
استدعاء متزامن عبر API Gateway عند إضافة منتج إلى سلة التسوق.
استدعاء غير متزامن عند معالجة الدفع حيث توضع رسالة في SQS وتعالجها Lambda لاحقاً.
استدعاء تاريخ عبر DynamoDB Streams لتسجيل كل تغيير في حالة الطلب لإرسال إشعارات للعميل.
| النمط | الوصف | متى يُستخدم |
|---|---|---|
| متزامن (Synchronous) | يطلب ويستجيب فوراً | تطبيقات الويب والخدمات المصغرة واستدلالات ML |
| غير متزامن (Asynchronous) | يضع في طابور ويعيد استجابة نجاح | أحداث مجدولة ومعالجة الصور وتحويل الملفات |
| تيار (Streaming) | يقرأ من تيار بيانات ويُعالج دفعات | تطبيقات التدفق وتحليلات البيانات في الوقت الفعلي |
- AWS Lambda هي خدمة حوسبة بدون خوادم تدير AWS كل جوانب البنية التحتية لها.
- يمكن تشغيل الدوال داخل VPC الخدمة أو عند الحافة عبر Lambda@Edge.
- يمكن ربط الدالة بشبكة VPC خاصة بك للوصول لخدمات داخل الشبكة.
- تدعم ثلاثة أنماط استدعاء: متزامن وغير متزامن والتاريخ عبر تعيين مصادر الأحداث.
- استخدم طبقات Lambda لحزم التبعيات وبيئات التشغيل المخصصة لإعادة استخدامها عبر الدوال.
- أفضل ممارسة: إبقاء معالج الدالة صغيراً وفصل منطق الأعمال في دوال منفصلة.
📖 جدول المصطلحات
| المصطلح (English) | الترجمة | المفهوم |
|---|---|---|
| AWS Lambda | Lambda | خدمة حوسبة بدون خوادم لتشغيل الدوال دون إدارة الخوادم. |
| Lambda Layer | طبقة Lambda | أرشيف .zip يحتوي تبعيات أو بيئات تشغيل مخصصة لإعادة الاستخدام. |
| Event Source Mapping | تعيين مصدر الحدث | مورد Lambda يقرأ من مصدر أحداث ويستدعي دالة Lambda. |
| Firecracker microVM | الجهاز الافتراضي الدقيق | تقنية من AWS لإنشاء أجهزة افتراضية دقيقة في أقل من ثانية. |
| Lambda Function URL | رابط دالة Lambda | نقطة نهاية HTTPS مخصصة ومولدة تلقائياً لدالة Lambda. |
| Context Object | كائن السياق | كائن يمرر لمعالج الدالة يوفر معلومات عن بيئة التشغيل والاستدعاء. |
| Hyperplane ENI | واجهة الشبكة Hyperplane | واجهة شبكة مُدارة تربط دالة Lambda بشبكة VPC خاصة. |
1️⃣ Containers in AWS — الحاويات في AWS
الحاوية هي طريقة لتغليف التطبيق وتبعياته (المكتبات وملفات الإعدادات ونظام التشغيل) معاً لتشغيله بشكل متسق عبر أي بيئة. الحاويات أخف وزناً من الأجهزة الافتراضية التقليدية. تقدم AWS خيارات حاويات مُدارة بالكامل: Amazon Elastic Container Service (ECS) وهو خدمة حاويات أصلية من AWS وAmazon Elastic Kubernetes Service (EKS) وهو Kubernetes مُدار. AWS Fargate هو محرك حاويات بدون خوادم يتيح تشغيل الحاويات دون إدارة الخوادم أو مجموعات الحاويات. يمكنك استخدامه مع كل من ECS وEKS.
- Amazon ECS: خدمة حاويات أصلية عالية الأداء ومدارة بالكامل من AWS.
- Amazon EKS: Kubernetes مُدار يتيح تشغيل أحمال العمل الحاوية مع التوافق مع معايير CNCF.
- AWS Fargate: محرك حاويات بدون خوادم يلغي الحاجة لإدارة البنية التحتية للحاويات.
- Amazon ECR: مستودع صور حاويات آمن ومُدار لتخزين واسترجاع صور الحاويات.
يستخدم Docker لتغليف كل خدمة مصغرة في حاوية منفصلة ثم ينشرها على Amazon ECS مع Fargate.
كل حاوية تعمل بشكل معزول مع مواردها الخاصة وتتوسع حسب الطلب دون إدارة أي خوادم.
2️⃣ Image vs Container — الفرق بين الصورة والحاوية
صورة الحاوية هي قالب ثابت قابل للتنفيذ يحتوي تعليمات لإنشاء حاوية. تتضمن نظام تشغيل وتطبيقاً وكوداً وتبعيات ومكتبات وملفات إعدادات ومتغيرات بيئة. الحاوية هي نسخة قابلة للتشغيل من الصورة يتم إنشاؤها في وقت التشغيل. يمكن أن يكون لديك عدة حاويات تعمل من نفس الصورة في آن واحد. يمكن تخزين الصور في Amazon Elastic Container Registry (ECR) أو مستودعات خارجية مثل Docker Hub.
ينشئ Dockerfile يحدد صورة القاعدة (مثل node:18) وينسخ الكود ويحدد أمر التشغيل.
يبني الصورة ويرفعها إلى Amazon ECR ثم ينشر حاويات متعددة من نفس الصورة على ECS — كل حاوية تتعامل مع مجموعة مختلفة من الطلبات.
3️⃣ Container Orchestration — تنسيق الحاويات
عندما يكون لديك عدة خدمات مصغرة تعمل في حاويات متعددة تحتاج أداة تنسيق (orchestrator) لإدارة نشر هذه الحاويات وتوسيعها ومراقبتها. Amazon ECS هو المُنسّق الأصلي من AWS ويدير دورة حياة الحاويات عبر task definitions وservices. يمكنك تعريف مهمة (task) تحدد صورة الحاوية والذاكرة ووحدة المعالجة وعدد النسخ. Amazon EKS هو Kubernetes مُدار يتيح استخدام بيئة Kubernetes القياسية مع التكامل مع خدمات AWS مثل ALB وIAM وVPC.
تستخدم Amazon ECS مع Fargate لتعريف كل خدمة كمهمة منفصلة بصورتها الخاصة.
عند ازدياد الطلب على خدمة المستخدمين يتوسع ECS تلقائياً بعدد نسخ أكبر من حاويات تلك الخدمة فقط.
وكما يمكن لمطعم تحضير 100 وجبة من نفس الوصفة يمكن تشغيل مئات الحاويات من نفس الصورة في آن واحد.
- الحاويات تغلف التطبيق وتبعياته في وحدة واحدة متسقة عبر أي بيئة تشغيل.
- Amazon ECS وAmazon EKS هما خيارا تنسيق الحاويات المُدارة في AWS.
- AWS Fargate يوفر حاويات بدون خوادم تلغي الحاجة لإدارة البنية التحتية.
- صورة الحاوية هي قالب ثابت والحاوية هي نسخة قابلة للتشغيل من الصورة.
- Amazon ECR هو مستودع صور آمن ومُدار لتخزين الصور.
- اختر ECS للبساطة أو EKS لتوافق Kubernetes القياسي.
📖 جدول المصطلحات
| المصطلح (English) | الترجمة | المفهوم |
|---|---|---|
| Container | حاوية | وحدة برمجية تغلف التطبيق وتبعياته لتشغيله بشكل متسق عبر البيئات. |
| Amazon ECS | ECS | خدمة حاويات مُدارة أصلية من AWS عالية الأداء. |
| Amazon EKS | EKS | خدمة Kubernetes مُدارة من AWS. |
| AWS Fargate | Fargate | محرك حاويات بدون خوادم يعمل مع ECS وEKS. |
| Amazon ECR | ECR | مستودع صور حاويات آمن ومُدار بالكامل. |
| Task Definition | تعريف المهمة | ملف JSON يحدد صورة الحاوية والموارد وإعدادات المهمة في ECS. |
| Container Image | صورة الحاوية | قالب ثابت قابل للتنفيذ يحتوي تعليمات إنشاء الحاوية. |
1️⃣ AWS Step Functions Overview — نظرة عامة على AWS Step Functions
AWS Step Functions هي خدمة تنسيق بدون خوادم (serverless orchestration service) تسمح بدمج خدمات AWS المتعددة في سير عمل (workflow) يسمى آلة الحالة (state machine). تستخدم آلات الحالة في Step Functions كلما احتجت سير عمل. تشمل حالات الاستخدام: تنسيق الخدمات المصغرة ومعالجة البيانات والتعلم الآلي وأتمتة الأمن. توفر Step Functions قابلية التوسع والموثوقية والتوفر اللازمة لإدارة سير عمل معالجة البيانات. يمكن إدارة ملايين التنفيذات المتزامنة لأنها تتوسع أفقياً وتوفر سير عمل متسامح مع الأعطال.
- سير العمل القياسي (Standard Workflows): للمهام طويلة الأمد. يُحسب بناءً على عدد انتقالات الحالة.
- سير العمل السريع التزامني (Synchronous Express Workflows): للمهام قصيرة الأمد عالية الحجم التي تتطلب استجابة فورية. مناسب لتطبيقات الويب والجوال.
- سير العمل السريع غير التزامني (Asynchronous Express Workflows): للمهام قصيرة الأمد التي لا تحتاج استجابة فورية.
يستخدم Step Functions Standard Workflow لتنسيق Lambda للتحقق من المخزون وSQS للطلب وSNS للإشعارات.
عند نجاح الدفع ينتقل السير عمل تلقائياً إلى مرحلة التوصيل وعند الفشل يرسل إشعار إلغاء.
2️⃣ State Machine State Types — أنواع حالات آلة الحالة
تصنف حالات آلة الحالة إلى ثلاث مجموعات: حالات العمل (work states) وحالات الانتقال (transition states) وحالات الإيقاف (stop states). حالات العمل تشمل: Task (وحدة عمل تتكامل مع خدمات AWS) وActivity (مهمة مستضافة في أي مكان) وPass (تمرير أو تصفية بيانات الإدخال) وWait (تأخير سير العمل لمدة محددة). حالات الانتقال تشمل: Choice (شروط للتحكم بتدفق التنفيذ) وParallel (فروع متوازية من آلات الحالة المتداخلة) وMap (فصل سير العمل لكل سجل بيانات). حالات الإيقاف تشمل: Success (إيقاف وتسجيل نجاح) وFail (إيقاف وتسجيل فشل) ومعامل End (إيقاف آلة الحالة).
- Task: يؤدي وحدة عمل تتكامل مع خدمة AWS أو يستدعي نقطة نهاية HTTP.
- Activity: مهمة يؤديها عامل (worker) يمكن استضافته في أي مكان (EC2 أو Lambda أو جهاز محمول).
- Pass: يمرر المدخلات إلى المخرجات دون عمل. مفيد لبناء وتصحيح آلات الحالة.
- Wait: يؤخر سير العمل لوقت محدد (نسبي بالثواني أو مطلق كطابع زمني).
- Choice: يضيف منطقاً شرطياً لتحديد الحالة التالية بناءً على قواعد مقارنة.
- Parallel: يضيف فروعاً متوازية من آلات حالة متداخلة تعمل في آن واحد.
- Map: يشغل سير عمل لكل عنصر في مجموعة بيانات بالتوازي (JSON array أو S3 objects أو CSV).
- Success / Fail: يوقف آلة الحالة ويسجل نجاحاً أو فشلاً.
حالة Task تستدعي Lambda لحساب قيمة الصفقة ثم حالة Choice تتحقق هل تتجاوز 100$؟
إذا نعم → حالة Task ترسل بريداً لطلب موافقة بشرية عبر SNS ← حالة Choice للتحقق من الموافقة.
إذا تمت الموافقة → Task لتنفيذ الصفقة ← إما Success أو Fail.
3️⃣ Amazon States Language — لغة Amazon States
Amazon States Language هي لغة منظمة قائمة على JSON تُستخدم لتعريف آلة الحالة ومجموعة الحالات في Step Functions. تستخدم آلة الحالة أزواج المفتاح-القيمة لتحديد الحقول والقيم وتحدد دائماً الحالة التي يتم تشغيلها أولاً عبر حقل StartAt. حقل States يحتوي مجموعة من مستندات JSON المتداخلة التي تحدد الحالات في آلة الحالة. كل حالة لها اسم كمعرف ونوع في حقل Type. تستخدم الحالات حقلاً Next لتمرير التحكم للحالة التالية. الحالة الأخيرة تستخدم حقل End أو حالة Success أو Fail لإنهاء آلة الحالة.
الحالة الأولى من نوع Task تستدعي دالة Lambda وتحوي Next: "2 Success state".
الحالة الثانية من نوع Succeed تنهي آلة الحالة.
حقل StartAt يشير إلى الحالة الأولى ليبدأ التنفيذ منها.
- AWS Step Functions هي خدمة تنسيق بدون خوادم لإدارة سير العمل بين خدمات AWS.
- آلة الحالة (state machine) هي سلسلة من الحالات التي تعتمد على الأحداث.
- تصنف الحالات إلى: حالات العمل وحالات الانتقال وحالات الإيقاف.
- حالة Task يمكنها استدعاء خدمة AWS أو طلب نشاط مستضاف على أي خدمة حوسبة.
- Amazon States Language هي لغة JSON لتعريف آلات الحالة.
- أنواع سير العمل: قياسي (طويل) وسريع تزامني (قصير مع استجابة) وسريع غير تزامني (قصير بدون استجابة).
📖 جدول المصطلحات
| المصطلح (English) | الترجمة | المفهوم |
|---|---|---|
| AWS Step Functions | Step Functions | خدمة تنسيق بدون خوادم لإدارة سير العمل بين خدمات AWS. |
| State Machine | آلة الحالة | سلسلة من الحالات التي تعتمد على الأحداث تشكل سير عمل. |
| Amazon States Language | لغة Amazon States | لغة JSON هيكلية لتعريف آلات الحالة في Step Functions. |
| Standard Workflow | سير عمل قياسي | سير عمل طويل الأمد يُحسب بعدد انتقالات الحالة. |
| Express Workflow | سير عمل سريع | سير عمل قصير عالي الحجم يُحسب بعدد الطلبات ومدته. |
| Task State | حالة مهمة | حالة تؤدي وحدة عمل وتتكامل مع خدمة AWS أو HTTP. |
| Choice State | حالة اختيار | حالة تضيف منطقاً شرطياً لتحديد مسار التنفيذ التالي. |
| Map State | حالة خريطة | حالة تشغل سير عمل لكل عنصر في مجموعة بيانات بالتوازي. |
1️⃣ Benefits of APIs — فوائد واجهات البرمجة
تعمل واجهات البرمجة كجسر أو وسيط لربط التطبيقات المكتوبة بلغات مختلفة بأنواع بيانات مختلفة. توفر APIs توثيقاً يشرح كيفية استخدامها وكيفية تنسيق الطلب بشكل صحيح. الفائدة الأساسية هي أن التطبيق الطالب لا يحتاج لفهم تعقيد أو تفاصيل تنفيذ الخدمة المصغرة. APIs تخفي تعقيد التنفيذ خلف واجهة بسيطة وموحدة. كما توفر APIs حماية للخدمات المصغرة عبر آليات التوثيق والتحقق من تنسيق الطلب وتحديد معدل الطلبات (throttling) وتقييد الوصول للموارد.
- توحيد التواصل: ربط تطبيقات بلغات مختلفة بطريقة موحدة وإخفاء تعقيد التنفيذ.
- حماية الخدمات المصغرة: اختيار اشتراط التوثيق أم لا والتحقق من تنسيق الطلبات وتحديد عدد الطلبات والتحكم بالوصول للموارد.
- تحقيق الدخل والتتبع: تتبع استخدام العميل لأغراض الفوترة وتقديم إحصائيات الاستخدام لكل عميل.
- تخزين مؤقت للردود: يمكن تخزين الردود الشائعة مؤقتاً لتقليل زمن الاستجابة وعدد الطلبات للخدمة الخلفية.
يستخدم API GET /orders لجلب الطلبات و POST /orders لإنشاء طلب جديد.
التطبيق لا يعرف إذا كانت الخدمة مكتوبة بـ Python أو Java أو تعمل على Lambda أو ECS — فقط يرسل الطلب عبر API الموثّق ويستلم الرد.
2️⃣ Amazon API Gateway Overview — نظرة عامة على Amazon API Gateway
Amazon API Gateway هي خدمة مُدارة بالكامل تمكّنك من إنشاء ونشر ومراقبة وتأمين واجهات البرمجة (APIs) بأي حجم. يمكنك استخدامها لإنشاء واجهات RESTful وWebSocket APIs تعمل كنقطة دخول للتطبيقات للوصول إلى الموارد الخلفية. الموارد الخلفية يمكن أن تكون تطبيقات على EC2 أو دوال Lambda أو حاويات ECS أو تطبيقات خاصة في VPC أو نقاط نهاية عامة. تدير API Gateway كل المهام المتعلقة بقبول ومعالجة مئات الآلاف من الطلبات المتزامنة وتوفر ميزات إدارة حركة المرور والتوثيق والتحكم بالوصول وإدارة إصدارات API.
- إنشاء ونشر وصيانة واجهات REST وHTTP وWebSocket APIs.
- إدارة حركة المرور والتوثيق والتحكم بالوصول إلى الموارد بشكل قابل للتكوين.
- الوصول إلى خدمات AWS ونقاط النهاية العامة.
- استضافة إصدارات ومراحل متعددة من API التطبيق.
- إنشاء خطط استخدام للعملاء لتحقيق الدخل والتحكم في واجهات API.
- تخزين الردود الشائعة مؤقتاً (API caching) لتحسين الأداء.
- التكامل مع Amazon Cognito للتوثيق وإمكانية إضافة دوال Lambda لحلول توثيق مخصصة.
يستخدم API Gateway مع Lambda حيث يستقبل API Gateway الطلبات ويتحقق من صحتها ويرسلها لـ Lambda للمعالجة.
مع تمكين التخزين المؤقت (caching) تقل الطلبات للخدمة الخلفية بنسبة 60% مع تحسين زمن الاستجابة.
3️⃣ Choosing an API Type — اختيار نوع API المناسب
تقدم Amazon API Gateway خيارين لواجهات RESTful APIs (واجهات HTTP APIs وREST APIs) وخياراً لواجهات WebSocket APIs. واجهات REST APIs تقدم مجموعة واسعة من ميزات إدارة API مثل خطط الاستخدام والتحقق من صحة الحمولة ونقاط النهاية الخاصة وسياسات الموارد. وهي مناسبة عندما تحتاج تحكماً كاملاً. واجهات HTTP APIs محسّنة للبنى بدون خوادم وتتميز بزمن استجابة أقل وتكلفة أقل. وهي مثالية للخدمات المصغرة باستخدام Lambda وحاويات ECS. واجهات WebSocket APIs تحافظ على اتصال دائم بين العميل والخادم لتمكين التواصل الفوري في الوقت الفعلي مثل تطبيقات الدردشة.
| النوع | الوصف | حالات الاستخدام |
|---|---|---|
| REST APIs | مجموعة كاملة من ميزات إدارة API وتحكم كامل | تطبيقات تحتاج خطط استخدام وتحقق من الحمولة ونقاط نهاية خاصة |
| HTTP APIs | خفيفة الوزن بزمن استجابة أقل وتكلفة أقل | الخدمات المصغرة بدون خوادم مع Lambda وECS |
| WebSocket APIs | اتصال دائم بين العميل والخادم | تطبيقات الوقت الفعلي مثل الدردشة والألعاب متعددة اللاعبين |
كل من REST APIs وHTTP APIs تدعم CORS (Cross-Origin Resource Sharing) المطلوبة عادة لبناء تطبيقات ويب تصل إلى APIs مستضافة على نطاق مختلف.
تطبيق ويب يحتاج خطط استخدام للعملاء ← تستخدم REST API لإدارة المفاتيح والحدود.
تطبيق خدمات مصغرة داخل الشركة ← تستخدم HTTP API لخفة الوزن والسرعة.
تطبيق دردشة فورية ← تستخدم WebSocket API للاتصال الدائم ثنائي الاتجاه.
4️⃣ API Gateway Backend Integrations — تكاملات API Gateway الخلفية
تدعم API Gateway ثلاثة أنواع رئيسية من التكاملات الخلفية: تكامل Lambda وتكامل وكيل HTTP والتكامل المباشر مع خدمات AWS. تكامل Lambda هو الأنمط الأكثر شيوعاً للبنى بدون خوادم حيث تستدعي API Gateway دالة Lambda لتنفيذ منطق الأعمال. تكامل وكيل HTTP يسمح بربط مسار API بنقطة نهاية HTTP عامة حيث تمرر API Gateway الطلب والاستجابة بالكامل. التكامل المباشر مع خدمات AWS يتيح ربط مسار API مباشرة بخدمة AWS مثل إرسال رسالة إلى SQS أو بدء آلة حالة Step Functions.
- تكامل Lambda: API Gateway تستدعي دالة Lambda لتنفيذ منطق الأعمال.
- وكيل HTTP: API Gateway تمرر الطلب والاستجابة بالكامل إلى نقطة نهاية HTTP عامة.
- تكامل مباشر مع خدمات AWS: ربط مسار API مباشرة بخدمة AWS مثل SQS أو Step Functions.
- VPC Link: الوصول إلى Network Load Balancer أو Application Load Balancer داخل VPC للوصول لخدمات خاصة.
خدمة سلة التسوق تستخدم HTTP API مع Lambda وDynamoDB للمعاملات السريعة بالميلي ثانية.
خدمة الدفع تستخدم HTTP API مع ALB وECS لأنظمة الدفع المبنية على حاويات مع تغييرات كود ضئيلة.
خدمة التوصيل تستخدم HTTP API مع Step Functions Standard Workflow لأنها عملية طويلة قد تستغرق أياماً مع استدعاء.
- Amazon API Gateway تتيح إنشاء ونشر وصيانة واجهات APIs للتطبيقات.
- توفر الوصول إلى خدمات AWS ونقاط النهاية العامة.
- استخدم REST APIs عندما تحتاج إدارة وتحكماً كاملين في API.
- استخدم HTTP APIs عندما تحتاج زمن استجابة وتكلفة أقل للخدمات المصغرة.
- استخدم WebSocket APIs للتطبيقات الفورية التي تحتاج اتصالاً نشطاً.
- تدعم التكامل مع Lambda ووكيل HTTP والتكامل المباشر مع خدمات AWS و VPC Link.
📖 جدول المصطلحات
| المصطلح (English) | الترجمة | المفهوم |
|---|---|---|
| Amazon API Gateway | API Gateway | خدمة مُدارة لإنشاء ونشر ومراقبة وتأمين واجهات APIs بأي حجم. |
| REST API | واجهة REST | واجهة APIs كاملة الميزات مع خطط استخدام وتحقق من الحمولة وسياسات موارد. |
| HTTP API | واجهة HTTP | واجهة APIs خفيفة محسّنة للبنى بدون خوادم بزمن استجابة منخفض. |
| WebSocket API | واجهة WebSocket | واجهة APIs تحافظ على اتصال دائم للتواصل الفوري ثنائي الاتجاه. |
| CORS | مشاركة الموارد عبر الأصول | آلية أمنية تسمح لتطبيقات الويب بالوصول لـ APIs من نطاقات مختلفة. |
| VPC Link | رابط VPC | يتيح لـ API Gateway الوصول إلى الموارد داخل VPC عبر NLB أو ALB. |
| Usage Plan | خطة الاستخدام | تعلن حدود الطلبات وتحديد المعدل لمطوري الطرف الثالث مع مفاتيح API. |
| API Caching | تخزين API المؤقت | تخزين ردود الـ API مؤقتاً لتقليل عدد الطلبات للخدمة الخلفية وتحسين الأداء. |
1️⃣ Failure Management — إدارة الأعطال
تتكون التطبيقات بدون خوادم من استدعاءات غير متزامنة لمكونات متعددة. عندما تفشل هذه الاستدعاءات يجب التقاطها وإعادة المحاولة كلما أمكن لمنع فقدان البيانات وتدهور تجربة العميل. استخدام آلية طابور الرسائل الميتة (dead-letter queue): تسمح AWS Lambda بإرسال المعاملات الفاشلة إلى طابور Amazon SQS مخصص للرسائل الميتة لكل دالة على حدة. تراجع المعاملات الفاشلة: للأجزاء المتزامنة التي تعتمد على ضمانات معينة يمكن استخدام آلات حالة AWS Step Functions لفصل وتبسيط منطق التراجع.
عند فشل معالجة طلب معين ترسله Lambda تلقائياً إلى طابور SQS dead-letter للرسائل الميتة.
فريق التطوير يراجع الطابور يومياً ويحقق في سبب الفشل ويعيد معالجة الطلبات بعد التصحيح دون فقدان أي بيانات.
2️⃣ Identity and Access Management — إدارة الهوية والوصول
واجهات API غالباً ما تكون هدفاً للمهاجمين بسبب العمليات التي تؤديها والبيانات القيمة التي تصل إليها. هناك عدة آليات للدفاع. التحكم بالوصول إلى API: يمكن استخدام Amazon Cognito أو Lambda authorizer أو سياسات موارد API Gateway لتوثيق الطلبات. إدارة الحدود الأمنية للتطبيق: لدوال Lambda يُوصى باتباع مبدأ الامتياز الأقل (least-privileged access) وإعطاء الدالة فقط الصلاحيات اللازمة لأداء مهمتها.
دالة Lambda للاستعلام عن الرصيد تملك فقط صلاحية القراءة من DynamoDB.
دالة تحويل الأموال تملك صلاحية الكتابة فقط ولا يمكنها قراءة أرصدة العملاء الآخرين. هذا يضمن الأمان حتى لو اخترقت إحدى الدوال.
3️⃣ Data Protection — حماية البيانات
يجب تشفير البيانات الحساسة أثناء النقل (in transit) وأثناء التخزين (at rest) في جميع الطبقات الممكنة. تشفير البيانات أثناء النقل: البيانات الحساسة يجب تشفيرها من جهة العميل قبل إرسالها كجزء من طلب HTTP أو إرسالها كحمولة في طلب POST. تشفير البيانات أثناء التخزين: دوال Lambda يجب أن تخزن البيانات المشفرة في DynamoDB أو S3 مع تشفير عند التخزين. أمان التطبيق: التحقق من صحة الأحداث الواردة وتنقيتها وإجراء مراجعة أمنية للكود كما في التطبيقات التقليدية.
يُشفر العميل رقم البطاقة من المتصفح قبل إرسال طلب POST إلى API Gateway.
دالة Lambda تخزن البيانات مشفرة في DynamoDB مع تشفير AWS KMS عند التخزين.
حتى لو تم اعتراض الطلب أو اختراق قاعدة البيانات تبقى البيانات غير قابلة للقراءة.
4️⃣ Performance Optimization — تحسين الأداء
لأن مكونات التطبيق بدون خوادم تتوسع بمعدلات مختلفة من المهم ضمان الأداء الأمثل عبر اختبار التطبيق بطرق متنوعة. مع Amazon API Gateway: استخدم نقاط النهاية الطرفية (edge endpoints) للعملاء الموزعين جغرافياً ونقاط النهاية الإقليمية للعملاء المحليين. مع AWS Lambda: اختبر إعدادات الذاكرة المختلفة لأن وحدة المعالجة والشبكة والـ IOPS تُخصص بشكل نسبي مع زيادة الذاكرة. مع AWS Step Functions: اختبر سير العمل القياسي والسريع ولاحظ معدلات بدء التنفيذ وانتقال الحالة في الثانية.
يختبر إعدادات ذاكرة مختلفة: 512MB ثم 1024MB ثم 2048MB.
يكتشف أن زيادة الذاكرة من 512MB إلى 1024MB يسرع الدالة 3 مرات لأن Lambda تخصص وحدة معالجة نسبياً مع الذاكرة — والتكلفة الإضافية ضئيلة مقارنة بتحسين الأداء.
5️⃣ Cost Optimization — تحسين التكلفة
البنى بدون خوادم أسهل في الإدارة من حيث تخصيص الموارد الصحيح. بفضل نموذج الدفع حسب القيمة والتوسع حسب الطلب تقلل البنى بدون خوادم جهد تخطيط السعة بشكل فعال. نظراً لأن Lambda تخصص وحدة المعالجة والشبكة والـ IOPS بشكل نسبي بناءً على الذاكرة، كلما كانت الدالة أسرع كلما كانت أرخص وأكثر قيمة بسبب الفوترة بالمللي ثانية.
بعد التحويل إلى Lambda + API Gateway أصبحت تدفع 15$ شهرياً فقط.
التوفير يأتي لأن Lambda تعمل فقط عند وجود طلبات (ربما 4 ساعات نشاط يومياً) ولا تدفع شيء عندما لا يعمل التطبيق.
6️⃣ Optimizing Over Time — التحسين المستمر
استخدم تكاملات AWS المباشرة حيثما أمكن. إذا كانت دالة Lambda لا تؤدي منطقاً مخصصاً أثناء التكامل مع خدمات AWS أخرى فقد تكون غير ضرورية. خدمات مثل API Gateway وStep Functions وEventBridge وLambda Destinations يمكنها التكامل مباشرة مع العديد من الخدمات وتوفر قيمة أكبر وعبء تشغيلي أقل. مثال: بدلاً من استخدام API Gateway ← Lambda ← Kinesis Data Firehose ← S3، يمكن إرسال بيانات clickstream مباشرة من العميل إلى Kinesis Data Firehose مما يوفر تكلفة API Gateway وLambda.
بعد المراجعة اكتشف الفريق أن دالة Lambda لا تؤدي أي منطق سوى تمرير البيانات.
استبدلوا المسار بـ: العميل → API Gateway → Kinesis مباشرة ← توفير 40% من التكلفة وتقليل زمن الاستجابة.
- استخدم آلية طابور الرسائل الميتة للاحتفاظ بالمعاملات الفاشلة والتحقيق فيها وإعادة محاولتها.
- تراجع المعاملات الفاشلة باستخدام AWS Step Functions.
- تحكم بالوصول إلى API باستخدام Cognito وLambda authorizer وسياسات الموارد.
- تحكم بالوصول إلى التطبيق عبر مبدأ الامتياز الأقل لدوال Lambda.
- شفر البيانات أثناء النقل وأثناء التخزين باستمرار.
- طبق أمان التطبيق عبر التحقق من صحة الأحداث الواردة وتنقيتها.
- حسن الأداء عبر اختبار إعدادات الذاكرة في Lambda ونقاط النهاية في API Gateway.
- حسن التكلفة عبر الاستفادة من نموذج الدفع حسب الاستخدام والتوسع حسب الطلب.
- استخدم تكاملات AWS المباشرة حيثما أمكن لتقليل التكلفة والعبء التشغيلي.
📖 جدول المصطلحات
| المصطلح (English) | الترجمة | المفهوم |
|---|---|---|
| Dead-letter queue | طابور الرسائل الميتة | طابور SQS مخصص للاحتفاظ بالمعاملات الفاشلة للتحقيق وإعادة المحاولة. |
| Least-privileged access | الامتياز الأقل | مبدأ أمني يمنح المستخدم أو الخدمة أقل الصلاحيات اللازمة لأداء المهمة. |
| Lambda Authorizer | مفوض Lambda | دالة Lambda مخصصة للتحقق من صحة طلبات API وتنفيذ منطق توثيق مخصص. |
| Lambda Destinations | وجهات Lambda | توجيه نتائج استدعاء Lambda (نجاح أو فشل) إلى خدمات أخرى كـ SQS أو SNS أو EventBridge. |
| Clickstream | تيار النقرات | بيانات تتبع تفاعلات المستخدم مع التطبيق مثل النقرات وزيارات الصفحات. |
| Serverless Applications Lens | عدسة التطبيقات بدون خوادم | إضافة متخصصة لإطار Well-Architected Framework تغطي سيناريوهات serverless. |
1️⃣ The Evolving Café Architecture: Version 7 — تطور بنية المقهى: الإصدار السابع
يريد أحمد وسارة الحصول على تقارير يومية عبر البريد الإلكتروني عن جميع الطلبات التي تم وضعها على الموقع الإلكتروني للمقهى. أحمد يريد توقع الطلب ليخبز العدد الصحيح من الحلويات (تقليل الهدر). سارة تريد تحديد أي أنماط في أعمال المقهى (تحليلات). حالياً قامت سلمى بإعداد مهمة مجدولة (cron job) على خادم الويب ترسل تقارير الطلبات اليومية بالبريد الإلكتروني. لكن هذه المهمة تستنزف الموارد وتقلل أداء خادم الويب. تنصح ليلى بأن مهام التقارير غير الحيوية يجب فصلها عن خادم الويب. يريد سلمى وخالد فصل المهمة المجدولة إلى بيئة مُدارة بدون خوادم تتوسع جيداً وتقلل التكاليف.
- V1: موقع ثابت على Amazon S3 للتعريف بالمقهى.
- V2: إضافة الطلبات الإلكترونية عبر Amazon EC2 مع قاعدة بيانات.
- V3: فصل قاعدة البيانات ونقلها إلى Amazon RDS على شبكة خاصة.
- V4: تعزيز الأمان باستخدام ميزات Amazon VPC لفصل الشبكات.
- V5: إضافة موازن تحميل وتوسع تلقائي عبر منطقتي توفر.
- V6: أتمتة النشر عبر AWS CloudFormation ونشر البنية في منطقة أخرى.
- V7: نشر دوال Lambda تتصل بقاعدة Amazon RDS وتُنشئ تقريراً بناءً على جدول زمني — تحسين الأداء وتقليل التكاليف.
بعد التحويل إلى Lambda مع Amazon EventBridge Scheduler أصبحت التقارير تُنشأ دون التأثير على أداء الموقع.
تكلفة تشغيل دالة Lambda لدقائق قليلة يومياً أقل بكثير من تشغيل خادم إضافي أو إبطاء الخادم الحالي.
2️⃣ Serverless Café Lab Tasks — مهام معمل المقهى بدون خوادم
في هذا المعمل ستقوم بتنفيذ بنية بدون خوادم لتوليد تقرير مبيعات يومي باستخدام خدمات AWS Lambda وAmazon EventBridge وAmazon RDS وAmazon SES. ستتعلم كيفية إنشاء دالة Lambda تستخرج البيانات من قاعدة Amazon RDS وتوليد تقرير مبيعات وإرساله عبر البريد الإلكتروني. ستقوم بتكوين مجدول EventBridge لتشغيل الدالة يومياً في وقت محدد بدلاً من المهمة المجدولة التقليدية على الخادم.
تستخرج الدالة إجمالي المبيعات اليومية وعدد الطلبات وأكثر المنتجات طلباً.
ترسل النتيجة عبر Amazon SES إلى أحمد وسارة كل صباح الساعة 7:00.
هذا يمثل تحولاً من بنية تقليدية تعتمد على خادم واحد إلى بنية بدون خوادم مدارة بالكامل.
- الإصدار السابع من بنية المقهى يستبدل المهمة المجدولة (cron job) بدوال Lambda مُدارة.
- يهدف التحديث إلى تحسين أداء خادم الويب وتقليل التكاليف التشغيلية.
- تستخدم Lambda لاستخراج بيانات المبيعات من Amazon RDS.
- يستخدم Amazon EventBridge كمجدد زمني لتشغيل الدالة يومياً.
- تُرسل التقارير عبر Amazon SES بالبريد الإلكتروني.
- يمثل هذا التحول تطبيقاً عملياً لمبادئ البنى بدون خوادم والخدمات المُدارة.
📖 جدول المصطلحات
| المصطلح (English) | الترجمة | المفهوم |
|---|---|---|
| Amazon EventBridge Scheduler | مجدول EventBridge | خدمة لجدولة تشغيل دوال Lambda أو إرسال رسائل في أوقات محددة. |
| Amazon SES | خدمة البريد الإلكتروني البسيط | خدمة إرسال بريد إلكتروني مُدارة تتكامل مع Lambda لإرسال التقارير. |
| Cron job | مهمة مجدولة | مهمة تعمل في أوقات محددة على نظام Unix/Linux لتشغيل أوامر دورية. |
| Data Extractor | مستخرج البيانات | دالة Lambda تستخرج بيانات المبيعات من قاعدة البيانات لإنشاء التقارير. |
🚀 الخاتمة
في هذه الوحدة تعمقنا في عالم البنى السحابية بدون خوادم Serverless Architectures والخدمات المصغرة Microservices على منصة AWS. استعرضنا مفهوم التفكير بدون خوادم وفوائده الرئيسية من إلغاء إدارة الخوادم إلى التوسع المستمر والتوفر العالي المدمج. تعرفنا على خصائص الخدمات المصغرة وأنماطها المختلفة وقارناها بالتطبيقات المتجانسة مع أمثلة عملية. اكتسبنا مهارات عملية في استخدام AWS Lambda لبناء دوال برمجية بدون خوادم مع فهم أنماط الاستدعاء المختلفة وطبقات Lambda ومعالج الدالة. تعرفنا على خيارات الحاويات في AWS باستخدام Amazon ECS وAWS Fargate لتشغيل الخدمات المصغرة. استعرضنا AWS Step Functions لتنسيق سير العمل بين الخدمات المتعددة وأنواع الحالات في آلة الحالة ولغة Amazon States Language. تعلمنا كيفية توسيع البنى بدون خوادم باستخدام Amazon API Gateway بأنواعها الثلاثة: REST APIs وHTTP APIs وWebSocket APIs. وأخيراً طبقنا مبادئ AWS Well-Architected Framework على التطبيقات بدون خوادم مع التركيز على إدارة الأعطال والتحكم بالوصول وحماية البيانات وتحسين الأداء والتكلفة والتحسين المستمر.
