461 lines
21 KiB
Markdown
461 lines
21 KiB
Markdown
# تقرير البنية التحتية لنظام سيرو (Siro) - النشر في سوريا
|
|
|
|
**التاريخ:** 16 يونيو 2026
|
|
**المشروع:** Siro - تطبيق نقل الركاب
|
|
**الموقع:** سوريا
|
|
|
|
---
|
|
|
|
## 📊 ملخص الخدمات المطلوبة
|
|
|
|
| الخدمة | الدور | بروتوكول | بوابات |
|
|
|--------|-------|-----------|--------|
|
|
| **Load Balancer** | توزيع الأحمال على API | HTTP/HTTPS | 80, 443 |
|
|
| **API Server x2** | المعالجة الرئيسية | HTTP/HTTPS | 8080 (داخلي) |
|
|
| **MySQL Server** | قاعدة البيانات الرئيسية | MySQL | 3306 (داخلي) |
|
|
| **Redis Server** | كاش + مواقع السائقين | Redis | 6379 (داخلي) |
|
|
| **Driver Socket** | WebSocket للسائقين | WS/WSS + HTTP | 2020, 2021 |
|
|
| **Passenger Socket** | WebSocket للركاب | WS/WSS + HTTP | 3030, 3031 |
|
|
| **Wallet Server** | نظام المحفظة والمدفوعات | HTTP/HTTPS | 8081 (داخلي) |
|
|
| **OSRM Server (1-2)** | محرك التوجيه والخرائط | HTTP | 5000 (داخلي) |
|
|
| **Map SaaS** | خدمات الخرائط المخصصة | HTTP/HTTPS | 8082 |
|
|
|
|
---
|
|
|
|
## 🖥️ 1. Load Balancer (موازن الأحمال)
|
|
|
|
**الجهاز/السيرفر: جهاز واحد - عقدة أمامية**
|
|
|
|
| المواصفة | المطلوب | السبب |
|
|
|----------|---------|-------|
|
|
| **المعالج** | 2 Core (Xeon / AMD EPYC) | لا يحتاج طاقة معالجة، فقط توجيه الطلبات |
|
|
| **الرام** | 4 GB | HAProxy/Nginx يستهلك القليل |
|
|
| **التخزين** | 50 GB SSD | نظام تشغيل + سجلات |
|
|
| **الشبكة** | 1 Gbps | استيعاب حجم الطلبات |
|
|
| **نظام التشغيل** | Ubuntu 22.04 LTS أو Rocky Linux 9 | |
|
|
|
|
**البرامج المطلوبة:**
|
|
- Nginx ( reverse proxy + SSL termination + load balancing upstream للـ API servers )
|
|
- HAProxy (اختياري للـ TCP load balancing للسوكتات)
|
|
- Keepalived (لـ High Availability إذا أردت أكثر من موازن)
|
|
- Certbot / Let's Encrypt (لشهادات SSL)
|
|
|
|
**نظام التوزيع المقترح:**
|
|
```
|
|
Nginx upstream → API Server 1 (weight=5) + API Server 2 (weight=5)
|
|
└── Round Robin أو Least Connections
|
|
```
|
|
|
|
---
|
|
|
|
## 🖥️ 2. API Backend Server (سيرفر الباك إند الرئيسي)
|
|
|
|
**العدد: 2 سيرفرات خلف الـ Load Balancer**
|
|
|
|
| المواصفة | المطلوب | السبب |
|
|
|----------|---------|-------|
|
|
| **المعالج** | 8 Core (Xeon / AMD EPYC) | PHP-FPM يحتاج عدة عمال لكل نواة؛ 8cores = 16-24 worker |
|
|
| **الرام** | 16 GB | PHP worker ~50MB/worker + نظام + كاش |
|
|
| **التخزين** | 100 GB NVMe SSD | كود المصدر + صور السائقين + سجلات |
|
|
| **الشبكة** | 1 Gbps | اتصال مع الـ DB والخدمات الأخرى |
|
|
| **نظام التشغيل** | Ubuntu 22.04 LTS | |
|
|
|
|
**البرامج المطلوبة:**
|
|
- PHP 8.2/8.3 (مع extensions: pdo_mysql, redis, openssl, mbstring, gd)
|
|
- PHP-FPM (مع pm.max_children = 40-50 لكل سيرفر)
|
|
- Nginx للمحتوى الثابت
|
|
- Supervisor (لإدارة العمليات)
|
|
|
|
**توجيه الطلبات من كل سيرفر:**
|
|
- `api-syria.siromove.com/siro_v3` → Main API
|
|
- `ride-syria.siromove.com/siro` → Ride API
|
|
- `location-syria.siromove.com/siro/ride/location` → Location API
|
|
- كل هذه على نفس السيرفر، نفس قاعدة البيانات الرئيسية
|
|
|
|
**PHP-FPM Configuration:**
|
|
```ini
|
|
pm = dynamic
|
|
pm.max_children = 50
|
|
pm.start_servers = 8
|
|
pm.min_spare_servers = 4
|
|
pm.max_spare_servers = 12
|
|
pm.max_requests = 1000
|
|
```
|
|
|
|
---
|
|
|
|
## 🗄️ 3. MySQL Database Server (سيرفر قاعدة البيانات الرئيسية)
|
|
|
|
**العدد: 1 + 1 Replica (اختياري للنسخ الاحتياطي)**
|
|
|
|
| المواصفة | المطلوب | السبب |
|
|
|----------|---------|-------|
|
|
| **المعالج** | 16 Core (Xeon / AMD EPYC) | MySQL يتوسع أفقياً مع عدد النوى |
|
|
| **الرام** | 64 GB | InnoDB Buffer Pool يحتاج ذاكرة كبيرة للأداء |
|
|
| **التخزين** | 1 TB NVMe SSD | 3 قواعد بيانات (intaleqDB1, ridesDB, locationDB) ~ 100-300 GB + سجلات |
|
|
| **الشبكة** | 10 Gbps | عمليات كتابة/قراءة مكثفة من سيرفرين API + سوكتات |
|
|
| **نظام التشغيل** | Ubuntu 22.04 LTS | |
|
|
|
|
**ضبط MySQL المقترح:**
|
|
```ini
|
|
innodb_buffer_pool_size = 40G # 60-70% من الرام
|
|
innodb_log_file_size = 2G
|
|
innodb_flush_log_at_trx_commit = 2 # أداء أفضل للتحديثات
|
|
innodb_flush_method = O_DIRECT
|
|
max_connections = 300 # 150 لكل API server + 50 للسوكتات
|
|
tmp_table_size = 256M
|
|
max_heap_table_size = 256M
|
|
query_cache_type = 0 # OFF (MySQL 8.0 ألغاه)
|
|
```
|
|
|
|
**الجداول الحساسة للأداء:**
|
|
- `car_locations` - يستخدم SPATIAL indexes + GEOMETRY - تأكد من `SRID=4326`
|
|
- `car_tracks` - 2.5M+ سجل - يحتاج أرشفة دورية أو partitioning
|
|
- `ride` + `waitingRides` - استعلامات متكررة مع SPATIAL
|
|
- `palces11` - FULLTEXT search
|
|
|
|
**ملاحظة: قاعدة بيانات الخرائط والتتبع (locationDB) هي الأكبر من حيث حجم الكتابة، يمكن وضعها على NVMe منفصل.**
|
|
|
|
---
|
|
|
|
## ⚡ 4. Redis Server (سيرفر الكاش والمواقع اللحظية)
|
|
|
|
**العدد: 1 (أو 1 + 1 Sentinel للتبديل التلقائي)**
|
|
|
|
| المواصفة | المطلوب | السبب |
|
|
|----------|---------|-------|
|
|
| **المعالج** | 8 Core | Redis single-threaded للعمليات الأساسية لكن له عمليات خلفية |
|
|
| **الرام** | 32 GB | بيانات GEO (مواقع السائقين) + كاش الجلسات + rate limiting |
|
|
| **التخزين** | 100 GB NVMe | RDB/AOF persistence |
|
|
| **الشبكة** | 10 Gbps | زمن استجابة منخفض جداً مطلوب |
|
|
| **نظام التشغيل** | Ubuntu 22.04 LTS | |
|
|
|
|
**ملاحظات هامة:**
|
|
- يجب أن يكون Redis على نفس الشبكة الداخلية (Latency < 1ms)
|
|
- الـ Socket servers (driver + passenger) يعتمدان على Redis بشكل كبير (GEOADD/GEORADIUS كل 500ms)
|
|
- حجم الذاكرة المطلوب يعتمد على عدد السائقين النشطين: كل موقع سائق ~ 200 bytes → 1M سجل = 200MB فقط
|
|
- لكن الكاش الإضافي (driver:profile:*، الجلسات) يحتاج مساحة إضافية
|
|
|
|
**نظام الكاش:**
|
|
```
|
|
driver_socket → Redis GEO (GEOADD)
|
|
passenger_socket → Redis GEORADIUS
|
|
API servers → Redis GET/SET (profile cache)
|
|
Rate Limiting → Redis INCR + EXPIRE
|
|
Session Store → Redis SETEX
|
|
```
|
|
|
|
---
|
|
|
|
## 🔌 5. WebSocket Servers (سيرفرات السوكت)
|
|
|
|
### 5.1 Driver Socket Server
|
|
|
|
| المواصفة | المطلوب | السبب |
|
|
|----------|---------|-------|
|
|
| **المعالج** | 8 Core | Workerman PHP event loop مع 500ms batch |
|
|
| **الرام** | 16 GB | كل اتصال WebSocket يستهلك ذاكرة + buffer |
|
|
| **التخزين** | 50 GB SSD | سجلات فقط |
|
|
| **الشبكة** | 1 Gbps | |
|
|
|
|
**البوابات:** `2020` (WebSocket للسائقين)، `2021` (Internal HTTP بين السوكتات)
|
|
|
|
### 5.2 Passenger Socket Server
|
|
|
|
| المواصفة | المطلوب | السبب |
|
|
|----------|---------|-------|
|
|
| **المعالج** | 4-8 Core | أقل تحميلاً من driver socket |
|
|
| **الرام** | 8 GB | |
|
|
| **التخزين** | 50 GB SSD | |
|
|
| **الشبكة** | 1 Gbps | |
|
|
|
|
**البوابات:** `3030` (WebSocket للركاب)، `3031` (Internal HTTP)
|
|
|
|
**ملاحظة:** يمكن دمج السوكتين في سيرفر واحد (Driver + Passenger على نفس الجهاز) لتوفير التكاليف إذا كان عدد المستخدمين متوسطاً. أما إذا توقعتم نمواً كبيراً، فالأفضل فصلهما.
|
|
|
|
**نظام التشغيل للسوكتات:** يفضل Ubuntu 22.04 LTS ويحتاج PHP-CLI وليس PHP-FPM
|
|
|
|
---
|
|
|
|
## 💳 6. Wallet / Payment Server (سيرفر المحفظة والمدفوعات)
|
|
|
|
| المواصفة | المطلوب | السبب |
|
|
|----------|---------|-------|
|
|
| **المعالج** | 4 Core | طلبات أقل تواتراً لكنها حسّاسة |
|
|
| **الرام** | 8 GB | |
|
|
| **التخزين** | 50 GB SSD | كود + سجلات |
|
|
| **الشبكة** | 1 Gbps | |
|
|
|
|
**ملاحظات:**
|
|
- يمكن فصله كخدمة مستقلة أو وضعه على أحد API servers
|
|
- يحتاج اتصال مع بوابات الدفع (PayMob، MTN، Syriatel Cash)
|
|
- **هام:** يحتاج HTTPS إلزامي (ضروري لأمان المدفوعات)
|
|
- إذا كانت المدفوعات محليّة في سوريا فقط، قد تحتاج بوابات دفع سورية (MTN Cash, Syriatel Cash)
|
|
|
|
---
|
|
|
|
## 🗺️ 7. OSRM Routing Server (محرك التوجيه)
|
|
|
|
**العدد: 1-2 سيرفر (حسب عدد المسارات المطلوبة)**
|
|
|
|
| المواصفة | المطلوب | السبب |
|
|
|----------|---------|-------|
|
|
| **المعالج** | 16 Core | OSRM routing requests تستهلك CPU عالٍ |
|
|
| **الرام** | 32 GB | OSRM يحمل خريطة كاملة في الذاكرة |
|
|
| **التخزين** | 200 GB NVMe | بيانات OSM لسوريا + ملفات OSRM processed |
|
|
| **الشبكة** | 1 Gbps | |
|
|
|
|
**حجم OSM لسوريا:**
|
|
- ملف الخريطة (syria-latest.osm.pbf) ~ 100-200 MB
|
|
- بعد معالجة OSRM (contracted graph) ~ 500 MB - 1 GB
|
|
- الذاكرة المطلوبة للتشغيل ~ 8-16 GB للخريطة نفسها
|
|
|
|
**يمكنك تشغيله على Docker:**
|
|
```bash
|
|
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/syria-latest.osm.pbf
|
|
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-contract /data/syria-latest.osrm
|
|
docker run -t -i -p 5000:5000 -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld /data/syria-latest.osrm
|
|
```
|
|
|
|
---
|
|
|
|
## 🗺️ 8. Map SaaS Server (سيرفر الخرائط المخصص)
|
|
|
|
| المواصفة | المطلوب | السبب |
|
|
|----------|---------|-------|
|
|
| **المعالج** | 4-8 Core | |
|
|
| **الرام** | 16 GB | للـ tile caching والـ geocoding |
|
|
| **التخزين** | 200 GB SSD | Tile cache + بيانات جغرافية |
|
|
| **الشبكة** | 1 Gbps | |
|
|
|
|
هذا السيرفر يقوم بـ:
|
|
- Reverse Geocoding (تحويل إحداثيات إلى عنوان)
|
|
- Place Search (البحث عن الأماكن)
|
|
- Route calculation (قد يمرر طلبات إلى OSRM)
|
|
- يمكن استخدام Nominatim + PostgreSQL/PostGIS للتجيكودينغ
|
|
|
|
---
|
|
|
|
## 🌐 9. الشبكة (Network Topology)
|
|
|
|
### 9.1 الشبكة الداخلية (Internal Network)
|
|
|
|
**مفضّلة**: شبكة داخلية خاصة (VLAN / Private Subnet)
|
|
|
|
```
|
|
┌─────────────┐
|
|
│ Internet │
|
|
└──────┬──────┘
|
|
│
|
|
┌──────┴──────┐
|
|
│ Firewall │
|
|
│ (iptables/ │
|
|
│ nftables) │
|
|
└──────┬──────┘
|
|
│
|
|
┌──────┴──────┐
|
|
│Load Balancer │
|
|
│(Nginx/HAProxy)│
|
|
│ Public IP │
|
|
└──────┬──────┘
|
|
│
|
|
┌────────────────┼────────────────┐
|
|
│ │ │
|
|
┌──────┴──────┐ ┌─────┴──────┐ ┌─────┴──────┐
|
|
│ API SRV 1 │ │ API SRV 2 │ │ Socket SV │
|
|
│ 10.0.1.10 │ │ 10.0.1.11 │ │10.0.1.20-21 │
|
|
└──────┬──────┘ └─────┬──────┘ └──────┬──────┘
|
|
│ │ │
|
|
└────────────────┼────────────────┘
|
|
│
|
|
┌────────────────┼────────────────┐
|
|
│ │ │
|
|
┌──────┴──────┐ ┌─────┴──────┐ ┌─────┴──────┐
|
|
│ MySQL DB │ │ Redis │ │ OSRM │
|
|
│ 10.0.1.30 │ │ 10.0.1.31 │ │ 10.0.1.40 │
|
|
└─────────────┘ └────────────┘ └────────────┘
|
|
|
|
┌─────────────┐ ┌────────────┐
|
|
│ Wallet SV │ │ Map SaaS │
|
|
│ 10.0.1.50 │ │ 10.0.1.60 │
|
|
└─────────────┘ └────────────┘
|
|
```
|
|
|
|
**نطاق الشبكة الداخلية:** `10.0.1.0/24` (أي نطاق خاص)
|
|
|
|
### 9.2 الشبكة الخارجية
|
|
|
|
- السيرفرات التي تحتاج IP عام: **Load Balancer فقط**
|
|
- Socket Servers: يمكن تشغيل WebSocket على نفس Load Balancer (رفع بروتوكول WS إلى WSS)
|
|
- OSRM و Map SaaS: داخليان فقط (API servers تتصل بهم داخلياً)
|
|
- قاعدة البيانات: **ليست عامة أبداً** - فقط وصلات داخلية
|
|
|
|
### 9.3 الإجراءات الأمنية
|
|
|
|
- **Firewall**: فتح المنافذ التالية فقط من الخارج:
|
|
- 80 (HTTP → redirect to 443)
|
|
- 443 (HTTPS)
|
|
- 2020 (WebSocket driver - اختياري إذا прямо WS)
|
|
- 3030 (WebSocket passenger - اختياري)
|
|
- 22 (SSH - فقط من IPs محددة)
|
|
|
|
- **Fail2ban**: على Load Balancer لحماية SSH و API
|
|
- **UFW/iptables**: على كل سيرفر لحجب المنافذ غير المستخدمة
|
|
- **VPN**: للوصول إلى الإدارة (Tailscale أو WireGuard)
|
|
- **SSL/TLS**: جميع الاتصالات الخارجية مشفرة
|
|
|
|
### 9.4 هل شبكة داخلية أم خارجية؟
|
|
|
|
| الخدمة | المفضل |
|
|
|--------|--------|
|
|
| API ↔ Database | **داخلي** (VLAN 10.0.1.x) |
|
|
| API ↔ Redis | **داخلي** |
|
|
| Socket ↔ Database | **داخلي** |
|
|
| API ↔ Wallet | **داخلي** (أو خارجي إذا wallet على سيرفر مختلف كلياً) |
|
|
| API ↔ OSRM | **داخلي** |
|
|
| API ↔ Map SaaS | **داخلي** |
|
|
| Internet ↔ Load Balancer | **خارجي** |
|
|
| Driver App ↔ Socket | **خارجي** (لكن عبر Load Balancer أيضاً) |
|
|
|
|
---
|
|
|
|
## 📍 10. اعتبارات خاصة لسوريا
|
|
|
|
### 10.1 استضافة السيرفرات
|
|
|
|
**الخيارات الموصى بها (بالترتيب):**
|
|
|
|
1. **مراكز البيانات السورية:**
|
|
- **شركة الاتصالات السورية (STE)** - خدمات hosting واستضافة
|
|
- **Ayaa Cloud** - مزود خدمات سحابية سوري
|
|
- **SNS (Syrian Network Systems)** - colocation واستضافة
|
|
|
|
2. **السيرفرات في دول مجاورة (للأداء):**
|
|
- **لبنان** (IDM، Ogero) - أقرب وأقل زمن استجابة (< 30ms)
|
|
- **الأردن** - خيار ممتاز (زمن استجابة ~ 30-50ms)
|
|
- **تركيا** - أقرب لشمال سوريا
|
|
- **الإمارات / السعودية** - استقرار أكبر لكن زمن استجابة أعلى (~ 80-100ms)
|
|
|
|
3. **سيرفرات عالمية:**
|
|
- **Hetzner (ألمانيا/فنلندا)** - أفضل قيمة مقابل سعر (~ 150-200ms latency)
|
|
- **OVH (فرنسا)** - جيد
|
|
- **DigitalOcean / Linode** - للاستضافة السحابية
|
|
|
|
### 10.2 مشاكل الإنترنت في سوريا
|
|
|
|
| المشكلة | الحل |
|
|
|---------|------|
|
|
| **انقطاع الكهرباء** | UPS لكل سيرفر + مولد كهربائي للمركز |
|
|
| **ضعف سرعة الإنترنت** | استخدام Content Delivery (CDN) للملفات الثابتة |
|
|
| **الحجب (بعض الخدمات)** | استخدام VPN أو proxy للاتصال بخدمات خارجية (PayMob، Firebase) إذا لزم الأمر |
|
|
| **تكاليف النطاق العالي** | ضغط البيانات (gzip) + تحجيم الصور + lazy loading |
|
|
| **تذبذب الاتصال (Packet Loss)** | TCP tuning, BBR congestion control على السيرفرات |
|
|
|
|
### 10.3 سرعة الإنترنت في سوريا
|
|
|
|
| الخدمة | السرعة المتوقعة | ملاحظة |
|
|
|--------|-----------------|--------|
|
|
| ADSL | 4-16 Mbps | الأكثر انتشاراً |
|
|
| Fiber (FTTH) | 20-100 Mbps | متوفرة في المدن الكبرى |
|
|
| 4G/LTE | 10-50 Mbps | جيد للمستخدمين النهائيين |
|
|
| Business Line | 50-200 Mbps | المطلوب للسيرفرات |
|
|
|
|
**لتطبيق مثالي في سوريا:**
|
|
- حجم API response يجب أن يكون < 50 KB
|
|
- حجم الصور مضغوط (WebP)
|
|
- استخدام Lazy loading للخرائط
|
|
- تفعيل HTTP/2 على الـ Load Balancer
|
|
|
|
### 10.4 استهلاك النطاق الترددي المقدر
|
|
|
|
| الخدمة | الاستهلاك التقريبي (شهرياً) |
|
|
|--------|---------------------------|
|
|
| API Requests (REST) | 200-500 GB |
|
|
| WebSocket Data | 500 GB - 2 TB |
|
|
| Map Tiles & Routing | 200-500 GB |
|
|
| Uploads (صور، وثائق) | 100-200 GB |
|
|
| **المجموع التقريبي** | **1-3 TB شهرياً** |
|
|
|
|
---
|
|
|
|
## 📐 11. الترتيب المقترح للتنفيذ
|
|
|
|
```
|
|
المرحلة 1: البنية الأساسية
|
|
├── تجهيز Load Balancer (Nginx + SSL)
|
|
├── تجهيز MySQL Server (تركيب + ضبط + تحميل البيانات)
|
|
└── تجهيز Redis Server
|
|
|
|
المرحلة 2: السيرفرات الأساسية
|
|
├── تجهيز API Server 1 (PHP + Nginx + FPM)
|
|
├── تجهيز API Server 2 (clone من 1)
|
|
└── ربط API Servers مع Load Balancer
|
|
|
|
المرحلة 3: السيرفرات المساعدة
|
|
├── تجهيز Socket Server (Driver Socket + Passenger Socket)
|
|
├── تجهيز Wallet Server
|
|
└── ربط الكل مع قاعدة البيانات و Redis
|
|
|
|
المرحلة 4: الخرائط
|
|
├── تجهيز OSRM Server (تحميل OSM سوريا + معالجة)
|
|
├── تجهيز Map SaaS Server
|
|
└── اختبار التوجيه والتجيكودينغ
|
|
|
|
المرحلة 5: الاختبار والإطلاق
|
|
├── اختبار تحميل (Load Testing) - استخدام K6 أو Locust
|
|
├── اختبار WebSocket مع 1000+ مستخدم وهمي
|
|
├── مراقبة (Prometheus + Grafana)
|
|
└── الإطلاق التدريجي
|
|
```
|
|
|
|
---
|
|
|
|
## 💰 12. التكلفة التقديرية الشهرية (للسيرفرات)
|
|
|
|
| السيرفر | المواصفات | التكلفة التقريبية (شهرياً) |
|
|
|---------|-----------|--------------------------|
|
|
| Load Balancer | 2 Core, 4GB | $20 - $40 |
|
|
| API Server x2 | 8 Core, 16GB (لكل) | $100 - $200 (لكل) |
|
|
| MySQL Server | 16 Core, 64GB, 1TB NVMe | $300 - $600 |
|
|
| Redis Server | 8 Core, 32GB | $100 - $200 |
|
|
| Socket Server(s) | 8 Core, 16GB | $80 - $150 |
|
|
| Wallet Server | 4 Core, 8GB | $40 - $80 |
|
|
| OSRM Server | 16 Core, 32GB | $200 - $400 |
|
|
| Map SaaS | 4 Core, 16GB | $60 - $120 |
|
|
| **المجموع التقريبي** | | **$900 - $1,890 شهرياً** |
|
|
|
|
**ملاحظة:** الأسعار تقديرية وقد تختلف حسب المزود. السيرفرات داخل سوريا قد تكون أرخص ولكن بجودة شبكة أقل.
|
|
|
|
---
|
|
|
|
## ✅ 13. الخلاصة والتوصيات
|
|
|
|
1. **أفضل نموذج لنشر سيرفرات سوريا هو:**
|
|
- استضافة السيرفرات في **مركز بيانات سوري** أو **لبناني/أردني**
|
|
- استخدام **شبكة داخلية (VLAN)** لكل الاتصالات بين السيرفرات
|
|
- وضع **Load Balancer** واحد أمام API Servers (2)
|
|
- قاعدة البيانات الرئيسية + Redis على نفس الشبكة الداخلية مع اتصال 10 Gbps
|
|
|
|
2. **توزيع الأدوار:**
|
|
- API Servers: 8 Cores + 16 GB RAM ✅ (كافٍ)
|
|
- Database: 16 Cores + 64 GB RAM ✅ (ضروري)
|
|
- Redis: 8 Cores + 32 GB RAM ✅ (ضروري للأداء اللحظي)
|
|
- Socket: 8 Cores + 16 GB RAM ✅ (كحد أدنى)
|
|
|
|
3. **توفير التكاليف:**
|
|
- يمكن دمج Socket Servers في جهاز واحد (Driver + Passenger) لتوفير سيرفر
|
|
- يمكن دمج Wallet مع أحد API Servers
|
|
- يمكن استخدام OSRM Server واحد لسوريا (الخريطة صغيرة نسبياً)
|
|
|
|
4. **أولوية الأداء في سوريا:**
|
|
- **Redis** هو أهم عنصر لأداء التطبيق (مواقع السائقين + كاش)
|
|
- **MySQL Buffer Pool** يحدد سرعة الاستعلامات
|
|
- **الـ Load Balancer** يوزع الضغط عن API servers
|
|
|
|
5. **الأمان:**
|
|
- API Servers → قاعدة البيانات عبر مستخدم MySQL مخصص بصلاحيات محدودة
|
|
- Redis محمي بكلمة مرور (requirepass + rename-command FLUSHALL)
|
|
- جميع المفاتيح السرية في `.env` مع صلاحيات 600
|
|
- JWT + HMAC للمدفوعات
|
|
---
|