Files
Siro/INFRASTRUCTURE_REPORT.md
2026-06-16 22:44:11 +03:00

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 API
  • ride-syria.siromove.com/siro → Ride API
  • location-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=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:

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 للمدفوعات