Horizontal Scaling: توسيع البنية التحتية

2025-11-27 وقت القراءه : 2 دقائق

متى تحتاج لـ Scaling؟

عندما تصل الـ optimizations إلى الحد الأقصى، الحل ليس دائماً في الكود - أحياناً في البنية التحتية نفسها.


أنواع Scaling

Vertical Scaling (زيادة قوة السيرفر)

  • زيادة RAM, CPU, Storage
  • محدود ومكلف
  • يتطلب downtime


Horizontal Scaling (إضافة servers جديدة) ✅ موصى به

  • إضافة servers متعددة
  • توزيع الحمل بينهم
  • قابل للتوسع بلا حدود
  • لا يتطلب downtime


تطبيق Horizontal Scaling في Laravel

1. Load Balancer Configuration

استخدم Load Balancer (مثل Nginx, AWS ALB, أو Cloudflare) لتوزيع الطلبات:

nginx
# nginx load balancer config
upstream laravel_backend {
    least_conn; # توزيع حسب أقل connections
    
    server 192.168.1.10:80 weight=3;
    server 192.168.1.11:80 weight=2;
    server 192.168.1.12:80 weight=1;
}


server {
    listen 80;
    server_name api.example.com;
    
    location / {
        proxy_pass http://laravel_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


2. Session Management في بيئة Distributed

عند استخدام عدة servers، يجب تخزين الـ sessions في مكان مشترك:

env

# استخدم Redis أو Database للـ sessions
SESSION_DRIVER=redis
# لا تستخدم file driver في بيئة distributed!
php// في config/session.php
'driver' => env('SESSION_DRIVER', 'redis'),
'connection' => 'session',


3. File Storage في بيئة Distributed

لا تستخدم local filesystem لتخزين الملفات المشتركة:

php//
 في config/filesystems.php
'default' => env('FILESYSTEM_DISK', 's3'),


'disks' => [
    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
    ],
],

php

// في Controller
use Illuminate\Support\Facades\Storage;


public function upload(Request $request)
{
    $path = $request->file('image')->store('uploads', 's3');
    
    return response()->json([
        'url' => Storage::disk('s3')->url($path)
    ]);
}


4. Auto-scaling على Cloud Platforms

AWS Elastic Beanstalk:
json{
  "AWSEBAutoScalingGroup": {
    "MinSize": "2",
    "MaxSize": "10"
  },
  "AWSEBAutoScalingScaleUpPolicy": {
    "UpperThreshold": "75"
  }
}

Laravel Forge + Digital Ocean:

  • يدعم Auto-scaling من خلال API
  • يمكن ربطه مع monitoring tools
إضافة تعليق
Loading...