الوحدة 3 · الخدمات الأساسية
الحوسبة: Amazon EC2 وAWS Lambda
18 دقراءة 4 داختر بحكمة
الدرس في لمحة
اقرأ اسم نوع instance في EC2، واختر خيار الشراء المناسب لطبيعة حمل العمل، وقرّر متى يتفوّق نموذج AWS Lambda القائم على الطلب على خادم يعمل طوال الشهر.
لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.
كان خادم Lantern القديم يفعل كل شيء: يقدّم الصفحات، ويعالج تأكيدات الحضور، ويغيّر أحجام الملصقات، ويشغّل تصديرًا ليليًا. على AWS، يمكن تشغيل كل مهمة من هذه المهام على نموذج الحوسبة الذي يناسب طبيعتها. النموذجان اللذان ستستخدمهما أكثر من غيرهما هما Amazon EC2، أي خوادم افتراضية تستأجرها بالثانية، وAWS Lambda، أي دوال لا تعمل إلا حين يستدعيها شيء ما.
Amazon EC2: خادم مستأجَر
الـ instance في EC2 آلة افتراضية. تختار صورة نظام تشغيل (AMI، مثل Amazon Linux 2023)، ونوع instance، وشبكة وتخزينًا، فتشغّلها AWS في منطقة التوافر التي تختارها. كل ما فوق الـ hypervisor مسؤوليتك: تحديثات نظام التشغيل، وبيئة التشغيل، والتطبيق، والتوسّع.
قراءة نوع الـ instance
أسماء أنواع الـ instances مكثّفة لكنها منتظمة. خذ m7g.large مثالًا:
| الجزء | المعنى |
|---|---|
m |
العائلة: للأغراض العامة |
7 |
الجيل: الأحدث عادةً قيمته أفضل |
g |
قدرة إضافية: معالج AWS Graviton (Arm) |
large |
الحجم |
العائلات الشائعة: t (قابلة للاندفاع burstable، رخيصة للاستخدام المنخفض المتقطّع)، وm (متوازنة)، وc (للحوسبة الكثيفة)، وr (للذاكرة الكثيفة). ومن المقاطع الأخرى i (Intel)، وa (AMD)، وd (قرص NVMe محلي). كل خطوة في الحجم، من large إلى xlarge إلى 2xlarge، تضاعف تقريبًا الـ vCPUs والذاكرة والسعر. وتمنح instances العاملة بـ Graviton عادةً نسبة أفضل بين السعر والأداء إذا كان برنامجك يعمل على Arm، وNode.js وPython يعملان عليه دون تغييرات.
كيف تدفع
الـ instance هي نفسها؛ والالتزام هو ما يغيّر السعر.
- On-Demand: تدفع بالثانية (على Linux، بحد أدنى 60 ثانية)، دون أي التزام. مناسب لكل ما هو قصير العمر أو جديد أو غير متوقّع.
- Savings Plans: تلتزم بمبلغ ثابت من الإنفاق على الحوسبة في الساعة لمدة سنة أو ثلاث سنوات، مقابل خصم كبير. مناسب للحد الأدنى الذي تعرف أنه سيعمل طوال العام. (ما زال النموذج الأقدم Reserved Instances موجودًا ويعمل بطريقة مشابهة.)
- Spot Instances: سعة فائضة لدى AWS بخصم كبير، لكن AWS تستطيع استرجاعها بإنذار مدته دقيقتان. مناسب للعمل الدفعي (batch) القابل لإعادة التشغيل.
- Dedicated Hosts وCapacity Reservations تغطّي احتياجات الترخيص والسعة المضمونة التي يُستبعد أن تكون لديك بعد.
الالتزامات غير متاحة في خطة الحساب المجانية؛ وهذا سبب آخر لكون حساب الإنتاج الخاص بـ Lantern على الخطة المدفوعة.
AWS Lambda: كود يعمل عند وقوع الأحداث
مع Lambda ترفع دالة وتحدّد ما الذي يشغّلها: طلب HTTP عبر API Gateway، أو ملف يصل إلى S3، أو جدول زمني، أو رسالة في طابور (queue). تشغّل Lambda نسخًا بعدد الأحداث المتزامنة، ولا شيء حين لا توجد أحداث.
إليك دالة الصور المصغّرة في Lantern. يستدعيها S3 بحدث يصف الملصق المرفوع:
export const handler = async (event) => {
const { bucket, object } = event.Records[0].s3;
console.log(`New poster: s3://${bucket.name}/${object.key}`);
// …download, resize, upload to thumbnails/
return { resized: object.key };
};وتنشئها عبر الـ CLI، مختارًا بيئة التشغيل، ومعمارية Arm، والذاكرة، والمهلة (timeout):
aws lambda create-function --function-name lantern-thumbnail \
--runtime nodejs24.x --architectures arm64 \
--handler index.handler --zip-file fileb://thumbnail.zip \
--role arn:aws:iam::111122223333:role/lantern-thumbnail-role \
--memory-size 512 --timeout 30الـ role هنا هو الـ execution role من القسم السابق: يستطيع قراءة uploads/ والكتابة في thumbnails/، ولا شيء غير ذلك.
نموذج تكلفة Lambda
تدفع لكل طلب ولكل GB-second: حجم الذاكرة بالغيغابايت مضروبًا في وقت التشغيل بالثواني، مقيسًا بالمللي ثانية. تتناسب قوة المعالج مع الذاكرة التي تخصّصها (من 128 MB إلى 10,240 MB)، ويستطيع الاستدعاء الواحد العمل 15 دقيقة كحد أقصى. احسب استخدام Lantern للصور المصغّرة:
const postersPerMonth = 3000;
const avgSeconds = 0.8; // measured from CloudWatch logs
const memoryGb = 512 / 1024;
const gbSeconds = postersPerMonth * avgSeconds * memoryGb;
console.log(`Requests: ${postersPerMonth}`);
console.log(`GB-seconds: ${gbSeconds}`);1,200 GB-second و3,000 طلب شهريًا أقل بكثير من الحصة الشهرية المجانية الدائمة في Lambda، والتي تبلغ وقت كتابة هذا الدرس مليون طلب و400,000 GB-second. أما instance في EC2 تؤدّي المهمة نفسها فستُحتسب كل ثانية من الشهر، مشغولة كانت أم خاملة.
الاختيار بينهما
| مهمة في Lantern | الاختيار | السبب |
|---|---|---|
| الـ API الخاص بتأكيد الحضور | Lambda | زيارات متقطّعة، وطلبات قصيرة، وخمول معظم الليل |
| الصور المصغّرة للملصقات | Lambda | يشغّلها رفع الملفات إلى S3، وعملها ثوانٍ معدودة |
| الأرشفة الليلية لـ 40 دقيقة | EC2 بنظام On-Demand أو Spot | أطول من أن تكفيها استدعاءة واحدة؛ وتعمل لوقت قصير كل يوم |
| تطبيق Node.js القديم أثناء الترحيل | EC2 | يجب أن يعمل دون تغيير حتى يُستغنى عنه |
خيار افتراضي جيد لفريق بحجم Lantern: Lambda للقطع القائمة على الأحداث، وEC2 فقط حين يحتاج شيء ما إلى عملية طويلة التشغيل، أو تحكّم على مستوى نظام التشغيل، أو حمل ثقيل ثابت. وتقع الـ containers على Amazon ECS مع AWS Fargate بين الاثنين، وتستحق نظرة بمجرد أن تحزم تطبيقاتك كـ images.
تحتاج الحوسبة إلى مكان تحفظ فيه الملفات. في الدرس التالي: Amazon S3 للكائنات، وEBS وEFS للأقراص.
أهم النقاط
- اسم نوع الـ instance مثل m7g.large يرمّز العائلة والجيل والقدرات الإضافية والحجم، وكل خطوة في الحجم تضاعف عدد الـ vCPUs والذاكرة بما يقارب الضعف.
- يناسب On-Demand الاستخدام القصير أو غير المتوقّع، وتناسب Savings Plans الاستخدام الثابت الذي تستطيع الالتزام به، ويناسب Spot العمل القابل للمقاطعة بخصم كبير.
- الـ instance الموقوفة في EC2 توقف رسوم الحوسبة، لكن الـ volumes الخاصة بها في EBS وأي عنوان Elastic IP يبقى مرتبطًا بها تظل تُحتسب.
- تحاسبك Lambda لكل طلب ولكل GB-second من وقت التشغيل، وتتقلّص إلى الصفر، وتناسب العمل القائم على الأحداث الذي ينتهي خلال 15 دقيقة.
- اختر Lambda افتراضيًا للمهام الصغيرة القائمة على الأحداث، وEC2 حين تحتاج إلى عمليات طويلة التشغيل، أو تحكّم كامل في نظام التشغيل، أو حمل ثقيل ثابت.