بنية تحتية
استضافة كلاود قابلة للتوسع: كيف تنمو بدون مشاكل
كلاود|١٥ أبريل ٢٠٢٦|3 دقائق قراءة|٣٨٧ مشاهدة

من سيرفر واحد لعدة سيرفرات. Vertical scaling ثم horizontal. نشرح متى ولماذا وكيف تتوسع.
قابلية التوسع في الاستضافة السحابية: من النظرية للتطبيق
"قابل للتوسع" كلمة يكررها كل مزودي الاستضافة. لكن ماذا يعني ذلك عملياً؟ وكيف تتأكد أن بنيتك التحتية تنمو فعلاً مع عملك؟
أنواع التوسع
التوسع العمودي (Vertical Scaling)
زيادة موارد نفس السيرفر: أكثر RAM، أكثر CPU، أكبر SSD.
المميزات:
- بسيط — لا تغيير في الكود
- فوري نسبياً
- مناسب لمعظم الحالات
الحدود:
- سقف للموارد في النهاية
- يحتاج إعادة تشغيل في بعض الحالات
- نقطة فشل واحدة
مثال عملي على كلاود:
الحالي: نمو (2vCPU / 4GB) = أسعار تنافسية — <a href="https://cloud.net.sa/pricing">الأسعار والباقات</a>
بعد نمو المستخدمين:
أعمال (4vCPU / 8GB) = أسعار تنافسية — <a href="https://cloud.net.sa/pricing">الأسعار والباقات</a>
مؤسسة (8vCPU / 16GB) = أسعار تنافسية — <a href="https://cloud.net.sa/pricing">الأسعار والباقات</a>
أو مؤسسة + موارد مضافة
التوسع الأفقي (Horizontal Scaling)
إضافة سيرفرات جديدة وتوزيع الحمل عليها.
المميزات:
- لا سقف للتوسع (نظرياً)
- تحمل عالٍ للفشل (High Availability)
- تحديثات بدون توقف
التحديات:
- يحتاج Load Balancer
- قاعدة البيانات تصبح نقطة الاختناق
- الـ Sessions يحتاج Redis أو sticky sessions
- تكلفة أعلى
تصميم التطبيق للتوسع
قواعد التطوير Scalable
// ❌ خطأ: تخزين Session على السيرفر
session->put('user_data', $complexObject);
// ✓ صحيح: Session في Redis (يعمل مع أي عدد سيرفرات)
// .env
SESSION_DRIVER=redis
REDIS_HOST=redis.internal
REDIS_PORT=6379
// ❌ خطأ: حفظ الملفات محلياً
Storage::put('uploads/' . $filename, $content);
// ✓ صحيح: S3 أو MinIO (يمكن الوصول من أي سيرفر)
Storage::disk('s3')->put('uploads/' . $filename, $content);
Stateless Architecture
مبدأ أساسي للتوسع:
كل طلب يجب أن يكون مكتفياً بذاته.
السيرفر لا يتذكر الطلب السابق.
كل المعلومات في:
├── JWT Token (في الـ Request)
├── قاعدة البيانات
└── Redis Cache
قاعدة البيانات والتوسع
قاعدة البيانات عادة هي نقطة الاختناق الأولى عند التوسع.
Database Connection Pooling
// config/database.php
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST'),
'options' => [
PDO::ATTR_PERSISTENT => true, // Connection Pooling
],
'pool' => [
'min' => 10,
'max' => 100,
],
],
Read Replicas
// قاعدة بيانات منفصلة للقراءة والكتابة
'mysql' => [
'read' => [
'host' => ['read-replica-1.internal', 'read-replica-2.internal'],
],
'write' => [
'host' => ['primary-db.internal'],
],
'driver' => 'mysql',
'sticky' => true, // اقرأ من Primary مباشرة بعد الكتابة
],
Database Caching مع Redis
// تخزين نتائج الاستعلامات المتكررة
$users = Cache::remember('active_users', 300, function {
return User::where('status', 'active')
->with('subscriptions')
->get;
});
Load Balancer: توزيع الحمل
# nginx.conf - Load Balancer
upstream app_servers {
# Round-robin (افتراضي)
server app1.internal:3000;
server app2.internal:3000;
server app3.internal:3000;
# أو Least Connections (للطلبات غير المتساوية)
least_conn;
# Health check
server app1.internal:3000 max_fails=3 fail_timeout=30s;
}
server {
location / {
proxy_pass http://app_servers;
proxy_set_header X-Real-IP $remote_addr;
}
}
Auto-Scaling: التوسع التلقائي
التوسع التلقائي يزيد السيرفرات عند الحاجة ويخفضها عند الهدوء.
# مثال باستخدام Kubernetes HPA
kubectl autoscale deployment nextapp \
--cpu-percent=70 \
--min=3 \
--max=20
# يضيف سيرفرات تلقائياً عند تجاوز 70% CPU
# يخفض للحد الأدنى في أوقات الهدوء
خطة التوسع الواقعية
| المرحلة | المستخدمون | البنية | التكلفة (كلاود) |
|---|---|---|---|
| إطلاق | 0-1,000 | VPS واحد نمو | أسعار تنافسية — الأسعار والباقات |
| نمو | 1-10K | VPS أعمال + Redis منفصل | ~20,000 ريال/سنة |
| توسع | 10-100K | 2 App + 1 DB + Redis | ~45,000 ريال/سنة |
| نضج | 100K+ | Load Balancer + 3 App + DB Cluster | 100,000+ ريال/سنة |
الخلاصة
التوسع ليس ميزة تشتريها — هو قرار معماري في تصميم التطبيق. ابن تطبيقك بشكل stateless من اليوم الأول، استخدم Redis للـ cache والـ sessions، وفصل قاعدة البيانات مبكراً. كلاود (cloud.net.sa) يدعم كل هذه المراحل بدون الحاجة لتغيير المزود.
مشاركة


