21 KiB
تقرير البنية التحتية لنظام سيرو (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 APIride-syria.siromove.com/siro→ Ride APIlocation-syria.siromove.com/siro/ride/location→ Location API- كل هذه على نفس السيرفر، نفس قاعدة البيانات الرئيسية
PHP-FPM Configuration:
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 المقترح:
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=4326car_tracks- 2.5M+ سجل - يحتاج أرشفة دورية أو partitioningride+waitingRides- استعلامات متكررة مع SPATIALpalces11- 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:
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 استضافة السيرفرات
الخيارات الموصى بها (بالترتيب):
-
مراكز البيانات السورية:
- شركة الاتصالات السورية (STE) - خدمات hosting واستضافة
- Ayaa Cloud - مزود خدمات سحابية سوري
- SNS (Syrian Network Systems) - colocation واستضافة
-
السيرفرات في دول مجاورة (للأداء):
- لبنان (IDM، Ogero) - أقرب وأقل زمن استجابة (< 30ms)
- الأردن - خيار ممتاز (زمن استجابة ~ 30-50ms)
- تركيا - أقرب لشمال سوريا
- الإمارات / السعودية - استقرار أكبر لكن زمن استجابة أعلى (~ 80-100ms)
-
سيرفرات عالمية:
- 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. الخلاصة والتوصيات
-
أفضل نموذج لنشر سيرفرات سوريا هو:
- استضافة السيرفرات في مركز بيانات سوري أو لبناني/أردني
- استخدام شبكة داخلية (VLAN) لكل الاتصالات بين السيرفرات
- وضع Load Balancer واحد أمام API Servers (2)
- قاعدة البيانات الرئيسية + Redis على نفس الشبكة الداخلية مع اتصال 10 Gbps
-
توزيع الأدوار:
- 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 ✅ (كحد أدنى)
-
توفير التكاليف:
- يمكن دمج Socket Servers في جهاز واحد (Driver + Passenger) لتوفير سيرفر
- يمكن دمج Wallet مع أحد API Servers
- يمكن استخدام OSRM Server واحد لسوريا (الخريطة صغيرة نسبياً)
-
أولوية الأداء في سوريا:
- Redis هو أهم عنصر لأداء التطبيق (مواقع السائقين + كاش)
- MySQL Buffer Pool يحدد سرعة الاستعلامات
- الـ Load Balancer يوزع الضغط عن API servers
-
الأمان:
- API Servers → قاعدة البيانات عبر مستخدم MySQL مخصص بصلاحيات محدودة
- Redis محمي بكلمة مرور (requirepass + rename-command FLUSHALL)
- جميع المفاتيح السرية في
.envمع صلاحيات 600 - JWT + HMAC للمدفوعات