# 🚀 قابلية التوسع وتوزيع الأحمال على منصة غنيمة (Scalability & Load Balancing)

---

## 1️⃣ المخطط الهندسي للنظام (Architecture Diagram — 15,000 req/s)

تم تصميم المعمارية التالية للاستجابة لـ **15,000 طلب في الثانية (15,000 req/s)** مع توافر عالي (High Availability) وأداء متفوق على منصة **غنيمة**:

![المخطط الهندسي لنظام غنيمة عالي التوسع 15,000 req/s](./architecture.png)

## 2️⃣ حساب عدد الحاويات المطلوبة (Capacity Planning & Sizing)

### 📊 المعطيات:
* **حركة المرور المستهدفة (Target Traffic):** $15,000 \text{ req/s}$
* **طاقة الحاوية الواحدة (Container Capacity):** $500 \text{ req/s}$
* **هامش الأمان الموصى به (Safety Margin Buffer):** $30\%$

---

### 🧮 الخطوات الحسابية:

1. **حساب إجمالي حركة المرور المطلوبة مع هامش الأمان:**
   $$\text{Total Traffic with Buffer} = 15,000 \times (1 + 0.30) = 15,000 \times 1.30 = 19,500 \text{ req/s}$$

2. **حساب عدد الحاويات المطلوبة:**
   $$\text{Number of Containers} = \left\lceil \frac{19,500 \text{ req/s}}{500 \text{ req/s}} \right\rceil = 39 \text{ Containers}$$

---

### 📌 النتيجة والتوزيع على بيئات غنيمة:
* **إجمالي عدد الحاويات (Pods):** **39 حاوية** (تضمن معالجة $19,500 \text{ req/s}$ بكفاءة عالية وبدون اختناق).
* **توزيع الحاويات على مناطق التوافر (Multi-AZ Deployment):**
  * **Zone A:** 13 Pods
  * **Zone B:** 13 Pods
  * **Zone C:** 13 Pods
* **سبب إضافة هامش الأمان (30% Buffer):**
  1. امتصاص الارتفاعات المفاجئة واللحظية في حركة المرور (Traffic Spikes).
  2. تغطية استهلاك الموارد الموجه لـ Health Checks و Garbage Collection.
  3. حماية النظام أثناء إعادة تشغيل الحاويات أو تحديثات النسخ (Rolling Updates).

---

## 3️⃣ استراتيجية تقليل الـ Cold Start للحاويات الجديدة

الـ **Cold Start** هو الوقت المستغرق بين إطلاق حاوية جديدة وجاهزيتها التامة لاستقبال الطلبات. لتقليل هذا الوقت لأقل من 1 ثانية في منصة **غنيمة**، نتبع الاستراتيجيات التالية:

### 1. تصغير حجم صورة الحاوية (Lightweight Docker Images)
* استخدام صور **Multi-stage Build** مبنية على `scratch` أو `alpine` (حجم الصورة النهائي **~6.7 ميجابايت** كما تم بناؤه في Dockerfile غنيمة).
* الصورة الصغيرة يسهل سحبها من **Ghanimah Container Registry** عبر شبكة غنيمة السريعة خلال مسبارات زمنية تقل عن **200ms**.

### 2. التوسع الاستباقي (Proactive Pre-Warming & Buffer Capacity)
* ضبط الحد الأدنى للحاويات عند 39 حاوية، وتفعيل التوسع التلقائي (HPA) فور وصول استهلاك الذاكرة أو المعالج إلى **70%** (بدلاً من 90%).
* هذا يمنح الـ Clusters وقتاً كافياً لإطلاق الحاويات قبل وصول الضغط الفعلي للذروة.

### 3. تحسين فحوصات الجاهزية (Readiness Probes Tuning)
* ضبط فحوصات الجاهزية للبدء سريعاً بدون تأخير غير برمجيات:
  ```yaml
  readinessProbe:
    httpGet:
      path: /health
      port: 8080
    initialDelaySeconds: 1  # البدء بالفحص فوراً بعد ثانية واحدة
    periodSeconds: 2        # الفحص كل ثانيتين
    successThreshold: 1
    failureThreshold: 2
  ```

### 4. تسريع وقت تشغيل التطبيق (Fast Application Startup)
* الاعتماد على لغة Go المجمعة بلغة الآلة (Native Compiled Output) والتي تبدأ العمل خلال أجزاء من الملي ثانية بدون تجمعات JVM أو حزم تفسير ثقيلة.
* تجميع وإيقاف أي اتصالات قاعدة بيانات كسولة (Lazy Initialization) واستبدالها باتصالات جاهزة سلفاً (Pre-warmed connection pools).

---

## 4️⃣ استخدام Ghanimah Block Storage للبيانات المستمرة (Stateful Workloads)

تعتمد الحاويات بطبيعتها على كونها **Stateless** (تزول بياناتها بزوال الحاوية). ولتشغيل التطبيقات التي تتطلب حفظ البيانات بشكل دائم (Stateful Workloads مثل قواعد البيانات PostgreSQL و Redis Persistent Logs)، توفر منصة غنيمة **Ghanimah Block Storage (GBS)**.

### 🔑 أهم الميزات والية العمل:

```text
┌────────────────────────┐        Persistent Volume Claim        ┌────────────────────────────┐
│   PostgreSQL Pod       │ ───────────────────────────────────► │ Ghanimah Block Storage(PV) │
│ (Stateful Workload)    │       (Attach NVMe Storage)        │   (High-Performance SSD)   │
└────────────────────────┘                                     └────────────────────────────┘
```

1. **الأداء العالي (High Performance NVMe Volumes):**
   * يوفر Ghanimah Block Storage أقراص NVMe فائقة السرعة مع معدل عمليات إدخال/إخراج يصل إلى **60,000 IOPS** وتأخير أقل من **1ms**، وهو مثالي لقواعد البيانات الضخمة.

2. **التكامل عبر Kubernetes Dynamic Provisioning (PVC & StorageClass):**
   * يتم ربط التخزين بالتطبيقات باستخدام `PersistentVolumeClaim` (PVC) وتحديد `StorageClass: ghanimah-block-nvme`:
   ```yaml
   apiVersion: v1
   kind: PersistentVolumeClaim
   metadata:
     name: ghanimah-db-pvc
   spec:
     accessModes:
       - ReadWriteOnce
     storageClassName: ghanimah-block-nvme
     resources:
       requests:
         storage: 250Gi
   ```

3. **الحماية والاستمرارية (Data Persistence & High Availability):**
   * عند تعطل الـ Pod المربوط بوحدة التخزين، تقوم منصة غنيمة تلقائياً بفصل قرص الـ Block Storage وإعادة ربطه (`Attach/Detach`) بالـ Pod الجديد عبر عقدة أخرى بدون أي فقدان للبيانات.

4. **النسخ الاحتياطي واللقطات الفورية (Snapshots & Replication):**
   * يدعم Ghanimah Block Storage إنشاء لقطات فورية (Volume Snapshots) دورية بدون التأثير على أداء الخدمة الحية، مع إمكانية استرجاعها فوراً في حالات الطوارئ (Disaster Recovery).
