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

مختبر: تكوين التوسع التلقائي

هدف المختبر​

تصميم وتكوين حل توسع تلقائي كامل لتطبيق ويب مع أنماط حركة مرور متغيرة.

الجزء 1: السيناريو​

السياق​

NewsPortal هو موقع أخبار يشهد ارتفاعات غير متوقعة في حركة المرور أثناء الأخبار العاجلة. تريد الفريق التقني أتمتة التوسع من أجل:

  • الحفاظ على الأداء أثناء الذروات
  • تقليل التكاليف خلال الأوقات الهادئة

بيانات حركة المرور​

┌─────────────────────────────────────────────────────────────┐
│ أنماط حركة المرور لـ NewsPortal │
├─────────────────────────────────────────────────────────────┤
│ │
│ يوم عادي │
│ ─────────────── │
│ │
│ الزوار ▲ │
│ │ ┌────┐ │
│ 50,000 ─┤ ┌┘ └┐ │
│ │ ┌┘ └┐ ┌──┐ │
│ 30,000 ─┤ ┌──┘ └──────┘ └┐ │
│ │ ┌──┘ └──┐ │
│ 10,000 ─┤──┘ └── │
│ │ │
│ └─────┬─────┬─────┬─────┬─────┬─────► ساعة │
│ 6h 9h 12h 18h 21h │
│ │
│ أخبار عاجلة (غير متوقعة) │
│ ─────────────────────────── │
│ │
│ الزوار ▲ │
│ │ ▲ ذروة مفاجئة x10 │
│ 200,000 ─┤ ╱╲ │
│ │ ╱ ╲ │
│ 100,000 ─┤ ╱ ╲ │
│ │ ╱ ╲ │
│ 20,000 ─┤──────╱ ╲────────── │
│ │ │
│ └─────────────────────────────────► وقت │
│ │
└─────────────────────────────────────────────────────────────┘

المتطلبات​

الجانبالمتطلب
التوافر99.9%
زمن الاستجابة< 500ms (P95)
السعة الدنيا5,000 زائر/دقيقة
السعة القصوى200,000 زائر/دقيقة
الميزانيةتحسين التكاليف خارج الذروات

الجزء 2: تمارين التصميم​

تمرين 2.1: تحديد الحجم​

مع العلم أن t3.medium يمكنها معالجة 500 طلب/ثانية، احسب:

السؤالإجابتك
الحد الأدنى من المثيلات (عادي)؟
المثيلات للذروة x10؟
الحد الأدنى الموصى به لـ HA؟
الحد الأقصى الموصى به؟
💡 الحل
حركة المرور العادية: 50,000 زائر/دقيقة = 833 طلب/ثانية
المثيلات اللازمة: 833 / 500 = 2 مثيلات

حركة المرور في الذروة x10: 200,000 زائر/دقيقة = 3,333 طلب/ثانية
المثيلات اللازمة: 3,333 / 500 = 7 مثيلات (تقريب)

الحد الأدنى الموصى به: 2 (HA Multi-AZ)
الحد الأقصى الموصى به: 10 (هامش أمان)

المرغوب الأولي: 2

تمرين 2.2: اختيار السياسة​

ما هي السياسة/السياسات التي توصي بها ولماذا؟

السياسةمناسبة؟التبرير
Target Tracking CPU؟؟
Target Tracking Requests؟؟
Scheduled؟؟
Step Scaling؟؟
💡 الحل
السياسةمناسبة؟التبرير
Target Tracking CPU⚠️ جزئيمفيد لكن CPU ليس دائمًا مرتبطًا بالطلبات
Target Tracking Requests✅ نعممرتبط مباشرة بحركة مرور المستخدم
Scheduled⚠️ جزئيأنماط اليوم/الليل متوقعة، لكن ليس الأخبار العاجلة
Step Scaling✅ نعماستجابة سريعة للذروات المفاجئة

التوصية: دمج Target Tracking (requests) + Scheduled (base)

تمرين 2.3: تكوين Launch Template​

أكمل تكوين Launch Template:

# Launch Template Configuration
LaunchTemplateName: newsportal-lt

# لإكمال:
AMI: _______________
InstanceType: _______________
SecurityGroupIds:
- _______________
KeyName: _______________
UserData: |
#!/bin/bash
_______________
_______________
_______________
💡 الحل
LaunchTemplateName: newsportal-lt

AMI: ami-0123456789 (Amazon Linux 2, مهيأ مسبقًا)
InstanceType: t3.medium
SecurityGroupIds:
- sg-web-servers
KeyName: newsportal-key
UserData: |
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
# أو نشر التطبيق عبر CodeDeploy
aws s3 cp s3://newsportal-deploy/latest.tar.gz /tmp/
tar -xzf /tmp/latest.tar.gz -C /var/www/html/

تمرين 2.4: تكوين ASG​

أكمل تكوين Auto Scaling Group:

AutoScalingGroupName: newsportal-asg

# السعة
MinSize: ___
MaxSize: ___
DesiredCapacity: ___

# الشبكة (2 AZ على الأقل)
VPCZoneIdentifier:
- _______________
- _______________

# الفحوصات الصحية
HealthCheckType: _______________
HealthCheckGracePeriod: ___

# مجموعة الهدف
TargetGroupARNs:
- _______________
💡 الحل
AutoScalingGroupName: newsportal-asg

MinSize: 2
MaxSize: 10
DesiredCapacity: 2

VPCZoneIdentifier:
- subnet-private-az-a
- subnet-private-az-b

HealthCheckType: ELB # استخدام الفحوصات الصحية لـ ALB
HealthCheckGracePeriod: 300 # 5 دقائق لبدء التطبيق

TargetGroupARNs:
- arn:aws:elasticloadbalancing:...:targetgroup/newsportal-tg/xxx

الجزء 3: تكوين السياسات​

تمرين 3.1: Target Tracking​

أنشئ سياسة Target Tracking للحفاظ على 1000 طلب لكل هدف:

# أكمل الأمر
aws autoscaling put-scaling-policy \
--auto-scaling-group-name newsportal-asg \
--policy-name _______________ \
--policy-type _______________ \
--target-tracking-configuration '{
"TargetValue": ___,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "_______________",
"ResourceLabel": "app/newsportal-alb/xxx/targetgroup/newsportal-tg/yyy"
},
"ScaleOutCooldown": ___,
"ScaleInCooldown": ___
}'
💡 الحل
aws autoscaling put-scaling-policy \
--auto-scaling-group-name newsportal-asg \
--policy-name request-target-tracking \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"TargetValue": 1000.0,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ALBRequestCountPerTarget",
"ResourceLabel": "app/newsportal-alb/xxx/targetgroup/newsportal-tg/yyy"
},
"ScaleOutCooldown": 60,
"ScaleInCooldown": 300
}'

تمرين 3.2: Scheduled Scaling​

قم بتكوين التوسع المجدول لأنماط اليوم/الليل:

# Morning scale up (8h UTC, Lun-Ven)
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name newsportal-asg \
--scheduled-action-name _______________ \
--recurrence "_______________ " \
--min-size ___ \
--max-size ___

# Evening scale down (22h UTC, tous les jours)
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name newsportal-asg \
--scheduled-action-name _______________ \
--recurrence "_______________" \
--min-size ___ \
--max-size ___
💡 الحل
# Morning scale up (8h UTC, Lun-Ven)
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name newsportal-asg \
--scheduled-action-name morning-scale-up \
--recurrence "0 8 * * MON-FRI" \
--min-size 3 \
--max-size 10

# Evening scale down (22h UTC, tous les jours)
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name newsportal-asg \
--scheduled-action-name evening-scale-down \
--recurrence "0 22 * * *" \
--min-size 2 \
--max-size 5

الجزء 4: المراقبة والتنبيهات​

تمرين 4.1: لوحة معلومات CloudWatch​

قم بتحديد المقاييس الأساسية للمراقبة:

المقياسNamespaceعتبة التنبيه
؟AWS/EC2؟
؟AWS/ApplicationELB؟
؟AWS/AutoScaling؟
؟Custom؟
💡 الحل
المقياسNamespaceعتبة التنبيه
CPUUtilizationAWS/EC2> 80%
TargetResponseTimeAWS/ApplicationELB> 500ms
RequestCountAWS/ApplicationELBinfo only
HealthyHostCountAWS/ApplicationELB< 2
GroupDesiredCapacityAWS/AutoScalinginfo only
GroupInServiceInstancesAWS/AutoScaling< min
HTTPCode_Target_5XX_CountAWS/ApplicationELB> 10/min

تمرين 4.2: تنبيه التوسع​

قم بإنشاء تنبيه SNS للإخطار عند حدوث أحداث التوسع:

# 1. إنشاء موضوع SNS
aws sns create-topic --name _______________

# 2. الاشتراك عبر البريد الإلكتروني
aws sns subscribe \
--topic-arn arn:aws:sns:...:_______________ \
--protocol email \
--notification-endpoint _______________

# 3. تكوين إشعارات ASG
aws autoscaling put-notification-configuration \
--auto-scaling-group-name newsportal-asg \
--topic-arn arn:aws:sns:...:_______________ \
--notification-types \
"autoscaling:EC2_INSTANCE_LAUNCH" \
"autoscaling:EC2_INSTANCE_TERMINATE" \
"_______________"
💡 الحل
# 1. إنشاء موضوع SNS
aws sns create-topic --name newsportal-scaling-alerts

# 2. الاشتراك عبر البريد الإلكتروني
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:123456789:newsportal-scaling-alerts \
--protocol email \
--notification-endpoint ops@newsportal.com

# 3. تكوين إشعارات ASG
aws autoscaling put-notification-configuration \
--auto-scaling-group-name newsportal-asg \
--topic-arn arn:aws:sns:us-east-1:123456789:newsportal-scaling-alerts \
--notification-types \
"autoscaling:EC2_INSTANCE_LAUNCH" \
"autoscaling:EC2_INSTANCE_TERMINATE" \
"autoscaling:EC2_INSTANCE_LAUNCH_ERROR"

الجزء 5: اختبارات التحقق​

خطة الاختبار​

الاختبارالطريقةالنتيجة المتوقعة
Scale Outتوليد حملمثيلات جديدة في < 5 دقائق
Scale Inإيقاف الحملتقليل بعد فترة التهدئة
Failoverإنهاء مثيلاستبدال تلقائي
Health Checkإيقاف التطبيقمثيل معلم كغير صحي

سكريبت اختبار الحمل​

#!/bin/bash
# test-load.sh - محاكاة ذروة حركة المرور

ALB_DNS="newsportal-alb-xxx.region.elb.amazonaws.com"
DURATION=300 # 5 دقائق
CONCURRENCY=100

echo "بدء اختبار الحمل..."
echo "URL: http://$ALB_DNS"
echo "المدة: $DURATION ثانية"
echo "التزامن: $CONCURRENCY"

# استخدام Apache Bench أو hey
hey -z ${DURATION}s -c $CONCURRENCY http://$ALB_DNS/

echo "انتهى الاختبار. تحقق من CloudWatch و ASG."

قائمة التحقق من التحقق​

┌─────────────────────────────────────────────────────────────┐
│ قائمة التحقق من التحقق │
├─────────────────────────────────────────────────────────────┤
│ │
│ ☐ يعمل التوسع الخارجي (مثيلات جديدة) │
│ ☐ يعمل التوسع الداخلي (مثيلات منتهية) │
│ ☐ فحوصات الصحة ALB تكتشف الأعطال │
│ ☐ استبدال المثيلات غير الصحية تلقائيًا │
│ ☐ تلقي إشعارات SNS │
│ ☐ المقاييس مرئية في CloudWatch │
│ ☐ احترام الإجراءات المجدولة │
│ ☐ الحفاظ على زمن الاستجابة < 500ms تحت الحمل │
│ │
└─────────────────────────────────────────────────────────────┘

التسليم النهائي​

الوثيقة المطلوب إنتاجها​

  1. هندسة التوسع التلقائي (مخطط)
  2. التكوين الكامل (Launch Template + ASG)
  3. سياسات التوسع (Target Tracking + Scheduled)
  4. خطة المراقبة (المقاييس + التنبيهات)
  5. نتائج الاختبارات (لقطات شاشة CloudWatch)

معايير التقييم​

المعيارالنقاط
تحديد الحجم الصحيح/15
تكوين ASG الكامل/25
السياسات المناسبة للسيناريو/20
المراقبة والتنبيهات/15
الاختبارات الموثقة/15
جودة الوثيقة/10
المجموع/100

الأسبوع التالي: MODULE 10 - Route 53