انتقل إلى المحتوى الرئيسي

مفاهيم التوسع التلقائي

ما هو التوسع التلقائي؟​

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

┌─────────────────────────────────────────────────────────────┐
│ AUTO SCALING - CONCEPT │
├─────────────────────────────────────────────────────────────┤
│ │
│ بدون التوسع التلقائي │
│ ───────────────── │
│ │
│ السعة ▲ │
│ │ ┌─────────────────────────────────┐ │
│ │ │ سعة ثابتة (10 مثيلات) │ │
│ │ ───┴─────────────────────────────────┴─── │
│ │ /\ │
│ │ / \ الطلب الفعلي │
│ │ / \___________ │
│ │ / \ │
│ │ / \___ │
│ └─────────────────────────────► الوقت │
│ │
│ مشاكل : ❌ فائض في التخصيص ليلاً = هدر │
│ ❌ نقص في التخصيص عند الذروة = بطء │
│ │
│ ──────────────────────────────────────────────────────── │
│ │
│ مع التوسع التلقائي │
│ ───────────────── │
│ │
│ السعة ▲ │
│ │ ________ │
│ │ / \ السعة تتكيف │
│ │ / \___________ │
│ │ / \ │
│ │ / \___ │
│ └─────────────────────────────────► الوقت │
│ │
│ المزايا : ✅ السعة = الطلب (دائمًا) │
│ ✅ تكاليف محسّنة │
│ ✅ أداء مستمر │
│ │
└─────────────────────────────────────────────────────────────┘

مكونات التوسع التلقائي​

البنية​

┌─────────────────────────────────────────────────────────────┐
│ COMPOSANTS AUTO SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ LAUNCH TEMPLATE │ │
│ │ │ │
│ │ "كيفية إنشاء المثيلات الجديدة" │ │
│ │ • AMI : ami-xxxxx │ │
│ │ • النوع : t3.medium │ │
│ │ • مجموعة الأمان : sg-web │ │
│ │ • بيانات المستخدم : نص بدء التشغيل │ │
│ │ • زوج المفاتيح : my-key │ │
│ │ │ │
│ └──────────────────────┬──────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ AUTO SCALING GROUP (ASG) │ │
│ │ │ │
│ │ "كم عدد المثيلات وأين" │ │
│ │ • الحد الأدنى : 2 │ │
│ │ • الحد الأقصى : 10 │ │
│ │ • المطلوب : 4 │ │
│ │ • الشبكات الفرعية : subnet-1a, subnet-1b │ │
│ │ • فحص الصحة : EC2 أو ELB │ │
│ │ │ │
│ └──────────────────────┬──────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ SCALING POLICIES │ │
│ │ │ │
│ │ "متى نضيف/نزيل المثيلات" │ │
│ │ • CPU > 70% → +2 مثيلات │ │
│ │ • CPU < 30% → -1 مثيلة │ │
│ │ • الجدول : 8h → 6 مثيلات، 20h → 2 مثيلات │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

جدول المكونات​

المكونالدورمثال
Launch Templateيحدد تكوين المثيلاتAMI، النوع، SG، بيانات المستخدم
ASGيدير مجموعة المثيلاتالحد الأدنى/الأقصى/المطلوب، الشبكات الفرعية
Scaling Policyقواعد التوسعCPU > 70% → توسع
CloudWatch Alarmيطلق التوسعتنبيه على مقياس

أنواع التوسع​

1. Manual Scaling​

تعديل يدوي لعدد المثيلات.

# تغيير العدد المطلوب يدويًا
aws autoscaling set-desired-capacity \
--auto-scaling-group-name my-asg \
--desired-capacity 5

حالة الاستخدام : أحداث متوقعة (الجمعة السوداء المتوقعة)

2. Scheduled Scaling​

التوسع بناءً على جدول محدد مسبقًا.

┌─────────────────────────────────────────────────────────────┐
│ SCHEDULED SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ مثال : موقع تجارة إلكترونية مع حركة مرور متوقعة │
│ │
│ مثيلات ▲ │
│ │ │
│ 10─┤ ┌───────────────┐ │
│ │ │ │ │
│ 6─┤ ┌────┘ └────┐ │
│ │ │ │ │
│ 2─┤─────┘ └───── │
│ │ │
│ └─────┬─────┬─────┬─────┬─────┬─────► ساعة │
│ 6h 9h 12h 18h 22h │
│ │
│ القواعد : │
│ • 6h → الحد الأدنى:2، الحد الأقصى:6 (قبل الفتح) │
│ • 9h → الحد الأدنى:6، الحد الأقصى:10 (ساعات الذروة) │
│ • 22h → الحد الأدنى:2، الحد الأقصى:4 (ليلاً) │
│ │
└─────────────────────────────────────────────────────────────┘
# إنشاء إجراء مجدول
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name my-asg \
--scheduled-action-name scale-up-morning \
--recurrence "0 9 * * MON-FRI" \
--min-size 6 \
--max-size 10 \
--desired-capacity 6

3. Dynamic Scaling (Target Tracking)​

الأكثر توصية. تقوم AWS تلقائيًا بالحفاظ على مقياس مستهدف.

┌─────────────────────────────────────────────────────────────┐
│ TARGET TRACKING SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ الهدف : الحفاظ على CPU عند 50% │
│ │
│ CPU ▲ │
│ │ │
│ 80─┤ x x │
│ │ x x ← مرتفع جدًا → توسع │
│ 50─┤──────────────────────────────────────── Target │
│ │ x │
│ 20─┤ x x ← منخفض جدًا → تقليص │
│ │ │
│ └─────────────────────────────────────────► الوقت │
│ │
│ تقوم AWS بضبط عدد المثيلات تلقائيًا │
│ للحفاظ على CPU حول 50% │
│ │
│ المقاييس المتاحة : │
│ • ASGAverageCPUUtilization │
│ • ASGAverageNetworkIn │
│ • ASGAverageNetworkOut │
│ • ALBRequestCountPerTarget │
│ │
└─────────────────────────────────────────────────────────────┘
# إنشاء سياسة Target Tracking
aws autoscaling put-scaling-policy \
--auto-scaling-group-name my-asg \
--policy-name cpu-target-policy \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"TargetValue": 50.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ASGAverageCPUUtilization"
}
}'

4. Step Scaling​

التوسع على مراحل حسب شدة الحمل.

┌─────────────────────────────────────────────────────────────┐
│ STEP SCALING │
├─────────────────────────────────────────────────────────────┤
│ │
│ قواعد التوسع على مراحل : │
│ │
│ CPU% الإجراء │
│ ───── ────── │
│ 0-40% إزالة 2 مثيلات │
│ 40-60% لا إجراء │
│ 60-80% إضافة 1 مثيلة │
│ 80-100% إضافة 3 مثيلات │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 100% ┬─────────────────────────────┐ │ │
│ │ │ +3 مثيلات │ │ │
│ │ 80% ┼─────────────────────────────┼ │ │
│ │ │ +1 مثيلة │ │ │
│ │ 60% ┼─────────────────────────────┼ │ │
│ │ │ (لا شيء) │ │ │
│ │ 40% ┼─────────────────────────────┼ │ │
│ │ │ -2 مثيلات │ │ │
│ │ 0% └─────────────────────────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

مقارنة الأنواع​

النوعمتى يستخدمالتفاعل
Manualأحداث معروفة مسبقًافوري
Scheduledأنماط متوقعة (جداول زمنية)مجدول
Target Trackingحمل متغير، موصى به افتراضيًا~3 دقائق
Stepاستجابة متناسبة مع الحمل~3 دقائق

سلوك التوسع​

التوسع الخارجي مقابل التوسع الداخلي​

┌─────────────────────────────────────────────────────────────┐
│ SCALE OUT vs SCALE IN │
├─────────────────────────────────────────────────────────────┤
│ │
│ التوسع الخارجي (إضافة) │
│ ─────────────────── │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ 1 │ │ 2 │ → │ 1 │ │ 2 │ │ 3 │ │ 4 │ │
│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │
│ 2 مثيلات 4 مثيلات │
│ │
│ السلوك : │
│ • سريع (المثيلات تُطلق بمجرد الوصول إلى الحد) │
│ • لا يوجد تبريد افتراضي لـ Target Tracking │
│ │
│ ──────────────────────────────────────────────────────── │
│ │
│ التوسع الداخلي (إزالة) │
│ ────────────────── │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ 1 │ │ 2 │ │ 3 │ │ 4 │ → │ 1 │ │ 2 │ │
│ └───┘ └───┘ └───┘ └───┘ └───┘ └───┘ │
│ 4 مثيلات 2 مثيلات │
│ │
│ السلوك : │
│ • أبطأ (لتجنب التذبذبات) │
│ • تبريد افتراضي 300 ثانية │
│ • سياسة الإنهاء تحدد أي مثيلة │
│ │
└─────────────────────────────────────────────────────────────┘

سياسة الإنهاء​

أي مثيلة تُنهى أولاً عند التوسع الداخلي؟

السياسةالسلوك
Defaultأقدم منطقة توافر بها أكثر مثيلات، ثم أقدم تكوين
OldestInstanceأقدم مثيلة
NewestInstanceأحدث مثيلة
OldestLaunchConfigأقدم تكوين إطلاق
ClosestToNextInstanceHourالأقرب إلى الساعة التالية للفوترة

التبريد والتسخين​

┌─────────────────────────────────────────────────────────────┐
│ COOLDOWN ET WARMUP │
├─────────────────────────────────────────────────────────────┤
│ │
│ التبريد (بعد التوسع) │
│ ──────────────────────── │
│ فترة لا يحدث فيها أي توسع إضافي │
│ → لتجنب التذبذبات │
│ │
│ الوقت ─────► │
│ │ │
│ │ توسع تبريد تقليص تبريد │
│ │ خارجي 300s داخلي 300s │
│ │ │ ├─────┤ │ ├─────┤ │
│ │ ▼ │ │ ▼ │ │ │
│ │ ┌───┐ │ │ ┌───┐ │ │ │
│ │ │+2 │ │ لا │ │-1 │ │ لا │ │
│ │ │ │ │ توسع│ │ │ │ توسع│ │
│ │ │ │ │ │ │ │ │ │ │
│ │ └───┘ │ │ └───┘ │ │ │
│ └──────────┴─────┴────────┴───────┴─────┴──────────► │
│ │
│ التسخين (قبل المقاييس) │
│ ──────────────────────── │
│ الوقت الذي تستغرقه مثيلة جديدة لتصبح "ساخنة" │
│ → لا تُحسب مقاييسها قبل التسخين │
│ │
│ الافتراضي لـ Target Tracking : 300 ثانية │
│ │
└─────────────────────────────────────────────────────────────┘

ملخص​

المفهومالوصفالقيمة النموذجية
Launch Templateتكوين المثيلات الجديدةAMI + النوع + SG
ASGمجموعة مثيلات مُدارةالحد الأدنى:2، الحد الأقصى:10
Target Trackingتوسع تلقائي على مقياسCPU 50%
Cooldownتوقف بعد التوسع300s
Warmupتأخير قبل احتساب المقاييس300s

القسم التالي : سياسات التوسع