مفاهيم التوسع التلقائي
ما هو التوسع التلقائي؟
يتيح التوسع التلقائي ضبط عدد مثيلات 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 |
القسم التالي : سياسات التوسع