I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

إزاي تبني نظام تعدد المستأجرين (Multitenancy) في لاراڤل لمشاريع الـ SaaS العملاقة؟

إزاي تبني نظام تعدد المستأجرين (Multitenancy) في لاراڤل لمشاريع الـ SaaS العملاقة؟ لو بتفكر تبني منصة برمجية كخدمة (Software as a Service - SaaS)، فأنت أكيد خبط

إزاي تبني نظام تعدد المستأجرين (Multitenancy) في لاراڤل لمشاريع الـ SaaS العملاقة؟
Reading Count: 5

إزاي تبني نظام تعدد المستأجرين (Multitenancy) في لاراڤل لمشاريع الـ SaaS العملاقة؟

لو بتفكر تبني منصة برمجية كخدمة (Software as a Service - SaaS)، فأنت أكيد خبطت في معضلة كبيرة: إزاي هتعزل بيانات العملاء عن بعض؟ هل هتعمل قاعدة بيانات لكل عميل، ولا هتستخدم جدول واحد فيه عمود للـ Tenant ID؟ ده سؤال المليون دولار اللي بيحدد شكل العمارة البرمجية (Architecture) للمشروع بتاعك بالكامل. في المقال ده، هنتكلم بالتفصيل عن استراتيجيات الـ Multitenancy في إطار العمل لاراڤل (Laravel) عشان تاخد القرار الصح من أول يوم.

يعني إيه Multitenancy أصلاً؟

ببساطة، الـ Multitenancy هو نظام بيخلي نسخة واحدة من الكود بتاعك (Application Instance) تخدم أكتر من عميل (Tenant)، بحيث كل عميل يحس إنه في سيستم خاص بيه لوحده، لا شايف بيانات غيره، ولا غيره عارف يوصل لبياناته. التحدي هنا مش بس في الكود، التحدي في حماية البيانات (Data Isolation) والأداء (Performance).

الاستراتيجية الأولى: فصل قواعد البيانات (Database-per-tenant)

دي الطريقة اللي بنسميها "العزل الكامل". كل عميل بيشترك معاك، السيستم بيكريت له قاعدة بيانات خاصة بيه (Database).

المميزات:

  • أعلى درجات الأمان والخصوصية للبيانات.
  • سهولة عمل Backup أو Restore لعميل محدد.
  • مش هتحتاج تعدل استعلاماتك (Queries) عشان تمنع التداخل، لأن كل داتا في حتة تانية خالص.

العيوب:

  • صعبة جداً في الصيانة (Migrations)؛ لو عايز تضيف عمود في جدول، لازم تلف على كل قواعد البيانات بتاعة العملاء.
  • استهلاك عالي لموارد السيرفر (Server Resources) خصوصاً لو عدد العملاء زاد.

الاستراتيجية الثانية: الفصل عبر الهوية (Tenant ID Partitioning)

في الطريقة دي، الكل بيستخدم قاعدة بيانات واحدة، بس كل الجداول فيها عمود اسمه tenant_id. لاراڤل بيعمل فلترة أوتوماتيكية لكل الـ Queries بناءً على الـ ID ده.

المميزات:

  • سهولة رهيبة في الصيانة (تعديل واحد في المايجريشن بيسمع في الكل).
  • خفيفة جداً على السيرفر وبتدعم عدد مستخدمين ضخم.

العيوب:

  • خطأ بسيط في الكود (زي نسيان Global Scope) ممكن يخلي عميل يشوف بيانات عميل تاني، ودي كارثة أمنية.
  • حجم الجدول (Table Size) بيكبر جداً، وده محتاج احترافية في التعامل مع الـ Indexing.

إزاي تطبق ده في لاراڤل؟ (Implementation)

لاراڤل بيوفر مرونة عالية جداً. لو اخترت طريقة الـ tenant_id، أفضل طريقة هي استخدام الـ (Global Scopes). بص على المثال ده:

// مثال على Global Scope للفلترة الأوتوماتيكية protected static function booted() { static::addGlobalScope('tenant', function (Builder $builder) { $builder->where('tenant_id', tenant()->id); }); }

أما لو اخترت طريقة الـ Database-per-tenant، هتحتاج تغير الـ DB Connection ديناميكياً في الـ Middleware بتاعك بمجرد ما تعرف مين العميل اللي داخل:

config(['database.connections.tenant.database' => $tenant->db_name]); DB::purge('tenant'); DB::reconnect('tenant');

نصيحة من أخوك المبرمج

لو بتبدأ مشروع صغير أو متوسط، ابدأ بطريقة Tenant ID لأنها هتخليك أسرع في التطوير (Development Velocity). لو مشروعك بيستهدف شركات كبيرة (Enterprise) وعندهم اشتراطات أمنية صارمة بخصوص مكان تخزين الداتا، وقتها فكر في Database-per-tenant. ومتقعدش تعيد اختراع العجلة، فيه حزم (Packages) جاهزة ومجربة زي Tenancy for Laravel، وفر على نفسك وقت المجهود وادرس الكود بتاعها عشان تفهم هي بتشتغل إزاي تحت الغطاء.

اتعلم دايماً، جرب بنفسك، وماتخافش من الـ Refactoring؛ العمارة البرمجية (Architecture) بتتطور مع نمو مشروعك.


Share

Related posts

Jul 05, 2026 • 1 min read
Reading Count: 7
إزاي تخرج عن التقليدية وتعمل تصميمات مجلات (Magazine Layouts) احترافية بـ Bootstrap

إزاي تخرج عن التقليدية وتعمل تصميمات مجلات (Magazine Layouts) احترافية بـ Bootstrap بتشوف مواقع المج...

Jul 04, 2026 • 1 min read
Reading Count: 17
دليلك العملي لدخول عالم الويب 3 (Web3) والتعامل مع المحافظ الإلكترونية باستخدام Ethers.js

دليلك العملي لدخول عالم الويب 3 (Web3) والتعامل مع المحافظ الإلكترونية باستخدام Ethers.js أهلاً بك ي...

Jul 04, 2026 • 1 min read
Reading Count: 15
دليلك الشامل لتنفيذ الـ Deep Linking في Flutter باحترافية

دليلك الشامل لتنفيذ الـ Deep Linking في Flutter باحترافية تخيل إنك بتبعت لواحد صاحبك رابط لمنتج معين...