مختبر: تصميم بنية HA
هدف المختبر
في هذا المختبر، ستقوم بتصميم بنية عالية التوافر لتطبيق ويب. ستقوم بتحليل المتطلبات، وتحديد نقاط الفشل الفردية (SPOF)، واقتراح حل قوي.
الجزء 1: السيناريو
السياق
ShopOnline هي منصة للتجارة الإلكترونية تتعرض لخسائر مالية في كل دقيقة من عدم التوفر. تطلب الإدارة بنية بتوافر 99.9%.
المتطلبات
┌─────────────────────────────────────────────────────────────┐
│ متطلبات SHOPONLINE │
├─────────────────────────────────────────────────────────────┤
│ │
│ التوافر │
│ • 99.9% وقت تشغيل (حد أقصى 8.76 ساعات توقف/سنة) │
│ • تجاوز تلقائي < 2 دقيقة │
│ • عدم فقدان البيانات │
│ │
│ الأداء │
│ • زمن استجابة < 500 مللي ثانية │
│ • دعم 10,000 مستخدم متزامن │
│ • ذروة تحميل x3 خلال التخفيضات │
│ │
│ الأمان │
│ • HTTPS إلزامي │
│ • قاعدة البيانات غير مكشوفة للإنترنت │
│ • الامتثال PCI-DSS (الدفع) │
│ │
│ الميزانية │
│ • حد أقصى $2,000/شهر │
│ │
└─────────────────────────────────────────────────────────────┘
البنية الحالية (لتحسينها)
┌─────────────────────────────────────────────────────────────┐
│ البنية الحالية │
├─────────────────────────────────────────────────────────────┤
│ │
│ الإنترنت │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ VPC │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ الشبكة الفرعية العامة (AZ-a) │ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────────────────┐ │ │ │
│ │ │ │ EC2 Instance │ │ │ │
│ │ │ │ (Web + App + API) │ │ │ │
│ │ │ │ t3.large │ │ │ │
│ │ │ │ IP: 52.x.x.x │ │ │ │
│ │ │ └───────────┬─────────────┘ │ │ │
│ │ │ │ │ │ │
│ │ └────────────────────┼──────────────────────────┘ │ │
│ │ │ │ │
│ │ ┌────────────────────┼──────────────────────────┐ │ │
│ │ │ الشبكة الفرعية الخاصة (AZ-a) │ │ │
│ │ │ │ │ │ │
│ │ │ ┌───────────▼─────────────┐ │ │ │
│ │ │ │ RDS │ │ │ │
│ │ │ │ MySQL 5.7 │ │ │ │
│ │ │ │ Single-AZ │ │ │ │
│ │ │ └─────────────────────────┘ │ │ │
│ │ │ │ │ │
│ │ └───────────────────────────────────────────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
الجزء 2: تحليل نقاط الفشل الفردية (SPOF)
تمرين 2.1: تحديد نقاط الفشل الفردية
حلل البنية الحالية وقم بإدراج جميع نقاط الفشل الفردية:
| # | المكون | نوع SPOF | التأثير في حالة العطل |
|---|---|---|---|
| 1 | ? | ? | ? |
| 2 | ? | ? | ? |
| 3 | ? | ? | ? |
| 4 | ? | ? | ? |
💡 الحل
| # | المكون | نوع SPOF | التأثير في حالة العطل |
|---|---|---|---|
| 1 | EC2 فريد | Compute | الموقع بالكامل معطل |
| 2 | RDS Single-AZ | Database | فقدان بيانات محتمل |
| 3 | منطقة توافر واحدة | Infrastructure | كل شيء معطل إذا سقطت AZ |
| 4 | IP عام على EC2 | Access | لا يمكن تجاوز الفشل |
| 5 | لا يوجد LB | Distribution | لا يمكن التوسع |
تمرين 2.2: حساب التوافر الحالي
إذا كان لكل مكون توافر فردي بنسبة 99%، ما هو التوافر الإجمالي؟
بنية تسلسلية: التوافر = توافر_EC2 × توافر_RDS × توافر_AZ
💡 الحل
التوافر = 0.99 × 0.99 × 0.99 = 0.970 = 97%
وقت التوقف السنوي = 3% × 365 يوم = 10.95 يوم
هذا بعيد عن 99.9% المطلوب (8.76 ساعة)!
الجزء 3: تصميم الحل
تمرين 3.1: رسم البنية المستهدفة
صمم بنية تحقق 99.9% من التوافر.
المكونات التي يجب تضمينها:
- Application Load Balancer
- Instances EC2 Multi-AZ
- RDS Multi-AZ
- Auto Scaling Group
القالب لإكماله:
┌─────────────────────────────────────────────────────────────────────────┐
│ البنية الخاصة بك │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ الإنترنت │
│ │ │
│ [ارسم هنا] │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
💡 الحل المعماري
┌─────────────────────────────────────────────────────────────────────────┐
│ بنية HA SHOPONLINE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ الإنترنت │
│ │ │
│ ┌──────▼──────┐ │
│ │ IGW │ │
│ └──────┬──────┘ │
│ │ │
│ ┌──────────────────────────────┼──────────────────────────────┐ │
│ │ VPC │ (10.0.0.0/16) │ │
│ │ │ │ │
│ │ ┌──────────────────────────┴────────────────────────────┐ │ │
│ │ │ الشبكات الفرعية العامة │ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │
│ │ │ │ Public AZ-a │ │ Public AZ-b │ │ │ │
│ │ │ │ 10.0.1.0/24 │ │ 10.0.2.0/24 │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │ │ │
│ │ │ │ │ ALB │◄─┼────────┼──│ ALB │ │ │ │ │
│ │ │ │ │ node │ │ │ │ node │ │ │ │ │
│ │ │ │ └─────┬─────┘ │ │ └─────┬─────┘ │ │ │ │
│ │ │ └────────┼────────┘ └────────┼────────┘ │ │ │
│ │ │ │ │ │ │ │
│ │ └───────────┼──────────────────────────┼─────────────────┘ │ │
│ │ │ │ │ │
│ │ ┌───────────┼──────────────────────────┼─────────────────┐ │ │
│ │ │ │ الشبكات الفرعية الخاصة (App) │ │ │
│ │ │ │ │ │ │ │
│ │ │ ┌────────▼────────┐ ┌────────▼────────┐ │ │ │
│ │ │ │ Private AZ-a │ │ Private AZ-b │ │ │ │
│ │ │ │ 10.0.11.0/24 │ │ 10.0.12.0/24 │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │ │ │
│ │ │ │ │ EC2 (ASG) │ │ │ │ EC2 (ASG) │ │ │ │ │
│ │ │ │ │ min:2 │ │ │ │ max:6 │ │ │ │ │
│ │ │ │ └─────┬─────┘ │ │ └─────┬─────┘ │ │ │ │
│ │ │ └────────┼────────┘ └────────┼────────┘ │ │ │
│ │ │ │ │ │ │ │
│ │ └───────────┼──────────────────────────┼─────────────────┘ │ │
│ │ │ │ │ │
│ │ ┌───────────┼──────────────────────────┼─────────────────┐ │ │
│ │ │ │ الشبكات الفرعية الخاصة (DB) │ │ │
│ │ │ │ │ │ │ │
│ │ │ ┌────────▼────────┐ ┌────────▼────────┐ │ │ │
│ │ │ │ DB AZ-a │ │ DB AZ-b │ │ │ │
│ │ │ │ 10.0.21.0/24 │ │ 10.0.22.0/24 │ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │ │ │
│ │ │ │ │ RDS │◄─┼────────┼──│ RDS │ │ │ │ │
│ │ │ │ │ Primary │ │ sync │ │ Standby │ │ │ │ │
│ │ │ │ └───────────┘ │ │ └───────────┘ │ │ │ │
│ │ │ └─────────────────┘ └─────────────────┘ │ │ │
│ │ │ │ │ │
│ │ └────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
تمرين 3.2: جدول التكوين
أكمل جدول التكوين لبنيتك:
| المكون | التكوين | التبرير |
|---|---|---|
| ALB | ? | ? |
| EC2 | النوع: ؟، العدد الأدنى: ؟، الأقصى: ؟ | ؟ |
| RDS | النوع: ؟، Multi-AZ: ؟ | ؟ |
| ASG | سياسة التوسع: ؟ | ؟ |
💡 الحل
| المكون | التكوين | التبرير |
|---|---|---|
| ALB | Internet-facing, 2 AZ | التوزيع + HA |
| EC2 | t3.medium, min:2, max:6 | 2 لـ HA، 6 للذروة |
| RDS | db.t3.medium, Multi-AZ: نعم | تجاوز تلقائي + عدم فقدان البيانات |
| ASG | تتبع الهدف CPU 70% | التوسع التلقائي حسب الحمل |
الجزء 4: تقدير التكاليف
تمرين 4.1: حساب التكلفة الشهرية
قم بتقدير التكلفة الشهرية لبنيتك:
| الخدمة | التكوين | التكلفة/الشهر |
|---|---|---|
| ALB | 1 ALB + الاستخدام | ؟ |
| EC2 | 2-6 t3.medium | ؟ |
| RDS | db.t3.medium Multi-AZ | ؟ |
| NAT Gateway | 2 (HA) | ؟ |
| نقل البيانات | تقديري | ؟ |
| الإجمالي | ؟ |
💡 الحل التقديري
| الخدمة | التكوين | التكلفة/الشهر |
|---|---|---|
| ALB | 1 ALB + الاستخدام | ~$25 |
| EC2 | 2 t3.medium (الحد الأدنى) | ~$60 |
| RDS | db.t3.medium Multi-AZ | ~$100 |
| NAT Gateway | 2 + البيانات | ~$70 |
| EBS | 100GB gp3 | ~$20 |
| نقل البيانات | ~100GB | ~$10 |
| الإجمالي | ~$285/شهر |
✅ ضمن الميزانية $2,000/شهر مع هامش للتوسع
الجزء 5: خطة اختبار HA
تمرين 5.1: سيناريوهات الاختبار
صف كيف ستختبر التوافر العالي:
| الاختبار | الإجراء | النتيجة المتوقعة |
|---|---|---|
| تجاوز EC2 | ؟ | ؟ |
| تجاوز RDS | ؟ | ؟ |
| عطل AZ | ؟ | ؟ |
💡 الحل
| الاختبار | الإجراء | النتيجة المتوقعة |
|---|---|---|
| تجاوز EC2 | إنهاء 1 instance | ASG يطلق جديد، ALB يعيد التوجيه |
| تجاوز RDS | إعادة التشغيل مع تجاوز | Standby يصبح primary، < 2 دقيقة |
| عطل AZ | تعطيل الشبكة الفرعية AZ-a | حركة المرور 100% على AZ-b |
| التوسع الخارجي | توليد حمل | إنشاء مثيلات جديدة تلقائيًا |
| فحص الصحة | إيقاف nginx | ALB يزيل المثيل غير الصحي |
التسليم النهائي
الوثيقة المطلوبة
أنشئ وثيقة "بنية HA ShopOnline" تحتوي على:
- تحليل الوضع الحالي (نقاط الفشل الفردية المحددة)
- مخطط البنية المستهدفة (مع جميع المكونات)
- جدول التكوين (مفصل)
- تقدير التكاليف
- خطة اختبار HA
- حساب التوافر النظري
معايير التقييم
| المعيار | النقاط |
|---|---|
| تحديد نقاط الفشل الفردية بشكل صحيح | /15 |
| بنية متماسكة وكاملة | /25 |
| التكوين مبرر | /20 |
| التكاليف ضمن الميزانية | /15 |
| خطة اختبار ذات صلة | /15 |
| جودة الوثيقة | /10 |
| الإجمالي | /100 |
الأسبوع القادم: التوسع التلقائي