متى تحتاج لـ Scaling؟
عندما تصل الـ optimizations إلى الحد الأقصى، الحل ليس دائماً في الكود - أحياناً في البنية التحتية نفسها.
أنواع Scaling
Vertical Scaling (زيادة قوة السيرفر)
Horizontal Scaling (إضافة servers جديدة) ✅ موصى به
تطبيق 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: