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

مختبر: تصميم بنية 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التأثير في حالة العطل
1EC2 فريدComputeالموقع بالكامل معطل
2RDS Single-AZDatabaseفقدان بيانات محتمل
3منطقة توافر واحدةInfrastructureكل شيء معطل إذا سقطت AZ
4IP عام على EC2Accessلا يمكن تجاوز الفشل
5لا يوجد LBDistributionلا يمكن التوسع

تمرين 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سياسة التوسع: ؟؟
💡 الحل
المكونالتكوينالتبرير
ALBInternet-facing, 2 AZالتوزيع + HA
EC2t3.medium, min:2, max:62 لـ HA، 6 للذروة
RDSdb.t3.medium, Multi-AZ: نعمتجاوز تلقائي + عدم فقدان البيانات
ASGتتبع الهدف CPU 70%التوسع التلقائي حسب الحمل

الجزء 4: تقدير التكاليف​

تمرين 4.1: حساب التكلفة الشهرية​

قم بتقدير التكلفة الشهرية لبنيتك:

الخدمةالتكوينالتكلفة/الشهر
ALB1 ALB + الاستخدام؟
EC22-6 t3.medium؟
RDSdb.t3.medium Multi-AZ؟
NAT Gateway2 (HA)؟
نقل البياناتتقديري؟
الإجمالي؟
💡 الحل التقديري
الخدمةالتكوينالتكلفة/الشهر
ALB1 ALB + الاستخدام~$25
EC22 t3.medium (الحد الأدنى)~$60
RDSdb.t3.medium Multi-AZ~$100
NAT Gateway2 + البيانات~$70
EBS100GB gp3~$20
نقل البيانات~100GB~$10
الإجمالي~$285/شهر

✅ ضمن الميزانية $2,000/شهر مع هامش للتوسع

الجزء 5: خطة اختبار HA​

تمرين 5.1: سيناريوهات الاختبار​

صف كيف ستختبر التوافر العالي:

الاختبارالإجراءالنتيجة المتوقعة
تجاوز EC2؟؟
تجاوز RDS؟؟
عطل AZ؟؟
💡 الحل
الاختبارالإجراءالنتيجة المتوقعة
تجاوز EC2إنهاء 1 instanceASG يطلق جديد، ALB يعيد التوجيه
تجاوز RDSإعادة التشغيل مع تجاوزStandby يصبح primary، < 2 دقيقة
عطل AZتعطيل الشبكة الفرعية AZ-aحركة المرور 100% على AZ-b
التوسع الخارجيتوليد حملإنشاء مثيلات جديدة تلقائيًا
فحص الصحةإيقاف nginxALB يزيل المثيل غير الصحي

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

الوثيقة المطلوبة​

أنشئ وثيقة "بنية HA ShopOnline" تحتوي على:

  1. تحليل الوضع الحالي (نقاط الفشل الفردية المحددة)
  2. مخطط البنية المستهدفة (مع جميع المكونات)
  3. جدول التكوين (مفصل)
  4. تقدير التكاليف
  5. خطة اختبار HA
  6. حساب التوافر النظري

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

المعيارالنقاط
تحديد نقاط الفشل الفردية بشكل صحيح/15
بنية متماسكة وكاملة/25
التكوين مبرر/20
التكاليف ضمن الميزانية/15
خطة اختبار ذات صلة/15
جودة الوثيقة/10
الإجمالي/100

الأسبوع القادم: التوسع التلقائي