هذا الالتزام موجود في:
ayashosha
2026-07-29 05:15:26 +03:00
الأصل 91e3e0f709
التزام 0a4a236f77
13 ملفات معدلة مع 756 إضافات و0 حذوفات

ثنائية
q4-scalability/architecture.png Normal file

ملف ثنائي غير معروض.

بعد

العرض:  |  الارتفاع:  |  الحجم: 1.4 MiB

عرض الملف

@@ -0,0 +1,170 @@
# Q4 — قابلية التوسع وتوزيع الأحمال
## 1. Architecture Diagram
راجع الملف `architecture.png` في هذا المجلد.
يوضّح المخطط تدفّق **15,000 req/s** عبر:
| الطبقة | المكوّن | الدور |
|--------|---------|-------|
| Edge | Ghaymah Load Balancer (L7) | توزيع الطلبات، SSL، Health Checks |
| Compute | Auto Scaling Group — 43 حاوية | معالجة الطلبات (500 req/s لكل حاوية) |
| Stateful | Ghaymah Block Storage | تخزين دائم للـ stateful workloads |
| Cache/CDN | Object Storage / CDN | الملفات الثابتة والوسائط |
| Ops | Monitoring & Alerts | مقاييس، تنبيهات، قرارات التوسع |
| Warm Pool | Cold Start Pool | حاويات مُسخَّنة مسبقاً لتقليل زمن الإقلاع |
---
## 2. حساب عدد الحاويات
### المعطيات
| المتغير | القيمة |
|---------|--------|
| إجمالي الحمل | **15,000 req/s** |
| سعة الحاوية الواحدة | **500 req/s** |
| هامش الأمان | **30%** |
### المنطق
الهامش 30% يعني **عدم تشغيل الحاويات فوق 70%** من سعتها القصوى، لترك مساحة للذروات والتقلبات:
```
السعة الفعلية القابلة للتخطيط = 500 × (1 0.30) = 500 × 0.70 = 350 req/s لكل حاوية
```
### الحساب
```
عدد الحاويات = ⌈ 15,000 ÷ 350 ⌉
= ⌈ 42.857 ⌉
= 43 حاوية
```
### التحقق
```
43 × 350 = 15,050 req/s ✅ (يغطي 15,000 req/s مع هامش 30%)
```
### ملخص
| البند | القيمة |
|-------|--------|
| الحد الأدنى نظرياً (بدون هامش) | 30 حاوية |
| **العدد الموصى به (مع هامش 30%)** | **43 حاوية** |
| السعة الإجمالية الفعلية | 15,050 req/s |
| نسبة الاستخدام عند 15K req/s | ≈ 99.7% من السعة المُخطَّطة |
> **ملاحظة:** إذا قصدت إضافة 30% فوق العدد الأساسي: `30 × 1.30 = 39 حاوية`.
> في سياق SRE، هامش السعة (capacity headroom) هو التفسير الأدق — أي 43 حاوية.
---
## 3. استراتيجية Cold Start للحاويات الجديدة
عند التوسع الأفقي (scale-out)، الحاوية الجديدة تحتاج وقتاً قبل أن تستقبل حركة. الاستراتيجية المقترحة:
### أ) Warm Pool (مجموعة تسخين)
- الإبقاء على **35 حاويات جاهزة** في حالة `standby` (مُشغَّلة ومُسخَّنة، لكن خارج rotation الـ Load Balancer).
- عند ارتفاع الحمل، تُضاف فوراً إلى الـ LB **بدون** انتظار pull للصورة أو boot.
### ب) Pre-pull الصور
- تخزين صورة Docker في **Ghaymah Internal Registry** داخل نفس المنطقة.
- تقليل زمن `image pull` من دقائق إلى ثوانٍ.
### ج) Readiness Probe تدريجي
```
Startup Probe → Readiness Probe → إضافة للـ LB
(30s) (HTTP /health)
```
- لا تُوجَّه الطلبات للحاوية حتى تمر `/health` بنجاح.
- يمنع إرسال حركة لحاوية لم تكتمل تهيئتها.
### د) Graceful Scale-In
- عند التقليص: إرسال `SIGTERM` → انتظار إنهاء الطلبات الجارية (drain) → إزالة من LB → إيقاف.
- يمنع قطع الطلبات أثناء التوسع العكسي.
### هـ) Predictive Scaling
- مراقبة CPU / RPS / latency.
- بدء التوسع **قبل** الوصول للحد (مثلاً عند 60% utilization) وليس عند 90%.
### ف) Application Warm-up
- عند الإقلاع: تحميل cache محلي، pre-connect لقاعدة البيانات، JIT warm-up.
- endpoint `/warmup` يُستدعى تلقائياً بعد readiness.
---
## 4. Ghaymah Block Storage للـ Stateful Workloads
### ما هو Block Storage؟
تخزين **كتلة (block-level)** يُ attach كقرص افتراضي (volume) لحاوية أو خدمة — مثل `/dev/vdb` — ويحتفظ بالبيانات **بعد** إعادة تشغيل أو استبدال الحاوية.
### متى نستخدمه؟
| Stateful | Stateless (لا يحتاج Block Storage) |
|----------|-------------------------------------|
| PostgreSQL / MySQL | API servers (43 حاوية أعلاه) |
| Redis persistence (AOF/RDB) | Static assets → Object Storage |
| File uploads / media processing | Session في Redis مشترك |
| Logs طويلة الأمد | |
### كيف يُستخدم على غيمة؟
1. **إنشاء Volume**
- حجم مناسب (مثلاً 100 GB SSD) في نفس منطقة التطبيق.
2. **Mount على الحاوية Stateful**
```text
/data/postgresql ← Ghaymah Block Volume (persistent)
```
3. **فصل Compute عن Storage**
- حاويات الـ API **stateless** — تتوسع أفقياً بحرية.
- قاعدة البيانات **stateful** — volume واحد (أو cluster مع replication).
4. **Snapshots & Backup**
- Ghaymah Backup: snapshots دورية للـ volume.
- استرداد Point-in-Time عند الفشل.
5. **High Availability**
- Primary DB على volume + Replica على volume منفصل.
- Failover تلقائي عند سقوط Primary.
### في مخططنا (architecture.png)
```
Load Balancer → 43 App Containers (stateless)
Stateful DB Pod ← Ghaymah Block Storage (persistent volume)
```
- الـ **43 حاوية** لا تخزّن state محلياً.
- كل البيانات الدائمة على **Block Storage** م attached لطبقة DB/Cache الم persistent.
### الفوائد
| الفائدة | الشرح |
|---------|--------|
| Persistence | البيانات تبقى بعد restart/redeploy |
| Performance | IOPS مضمون لقواعد البيانات |
| Scalability | فصل التوسع الأفقي (API) عن التخزين (DB) |
| DR | Snapshots + restore سريع |
---
## المراجع
- [Ghaymah Cloud](https://ghaymah.systems/)
- [Ghaymah CLI — `gy resource app launch`](https://cli.ghaymah.systems/)
- Health & Retry: HTTP/TCP probes — down-nodes تخرج فوراً من rotation