Multi-tenant সিস্টেম ডিজাইন: গ্রাহকদের আলাদা রাখা
SaaS একটি সিস্টেম থেকে অনেক গ্রাহককে (tenant) সেবা দেয়। ডিজাইনের প্রশ্ন হলো তাদের কতটা শক্তভাবে আলাদা রাখবেন।

Multi-tenant সিস্টেম একই চালু সফটওয়্যার থেকে অনেক গ্রাহক (tenant), যেমন কোম্পানিকে সেবা দেয়। গ্রাহক-প্রতি আলাদা deployment-এর চেয়ে এটি সস্তা ও চালানো সহজ, কিন্তু নিশ্চিত করতে হবে একজন tenant কখনো অন্যের data দেখবে না বা ক্ষতি করবে না।
Data isolation-এর তিন মডেল
| মডেল | কীভাবে | সুবিধা | অসুবিধা |
|---|---|---|---|
| Shared database, shared schema | প্রতিটি table-এ tenant_id column |
সবচেয়ে সস্তা, অনেক tenant-এ scale সহজ | bug-এ tenant জুড়ে data ফাঁস; noisy neighbour |
| Tenant-প্রতি schema | এক database, প্রতি tenant-এর আলাদা schema (table-এর সেট) | ভালো isolation, প্রতি-tenant বদল সহজ | অনেক schema migration ও টুলকে কষ্ট দেয় |
| Tenant-প্রতি database | প্রতি tenant-এর নিজস্ব database | সবচেয়ে শক্ত isolation, প্রতি-tenant backup, restore ও data residency সহজ | ব্যয়বহুল, হাজার tenant-এ পরিচালনা কঠিন |
প্রচলিত পদ্ধতি মিশ্র: ছোট tenant ভাগ করে, বড় বা নিয়ন্ত্রিত tenant নিজস্ব database পায়।
Isolation কার্যকর করা
Multi-tenant সিস্টেমের সবচেয়ে ভয়ের bug হলো tenant জুড়ে data access (এটি IDOR-এর একটি রূপ)।
- প্রতিটি query-তে
tenant_idরাখুন, এবং তা authenticated session থেকে নিন, কখনো user input থেকে নয়। - Row-level security (যেমন PostgreSQL RLS) ব্যবহার করুন: database নিজেই tenant ফিল্টার যোগ করে, তাই ভুলে যাওয়া
WHEREdata ফাঁস করতে পারে না। - Cache key, queue message, ফাইলের পথ ও search index-এ
tenant_idরাখুন। - অন্য tenant-এর data পড়তে চেষ্টা করে এমন স্বয়ংক্রিয় test লিখুন, যা অবশ্যই ব্যর্থ হবে।
- Object storage ও ফাইলের access প্রতি tenant-এ যাচাই করুন।
Noisy neighbour
একজন ভারী tenant সবাইকে ধীর করতে পারে। বাকিদের রক্ষা করুন:
- প্রতি-tenant rate limit ও quota (request, storage, seat)।
- Background job-এর resource আলাদা: আলাদা queue বা worker pool, ন্যায্য scheduling।
- Query timeout এবং ব্যয়বহুল report-এ সীমা।
- খুব বড় tenant-কে নিজস্ব resource-এ সরানো।
পরিচালনা
- প্রতি-tenant backup ও restore। Shared schema-তে এটি কঠিন, তাই পরিকল্পনা রাখুন (
tenant_idধরে export)। - Migration shared schema-তে একবারে সব tenant ছোঁয়, কিন্তু tenant-প্রতি database-এ N বার চালাতে হয়।
- Data residency: কিছু গ্রাহক চায় data দেশের ভেতরে থাকুক। অঞ্চল-প্রতি database বা cluster সাহায্য করে।
- Tenant মোছা (মুছে ফেলার অধিকার) backup, log ও cache সহ সব জায়গা থেকে data সরাবে।
- Billing ও noisy tenant খোঁজার জন্য প্রতি-tenant ব্যবহার ট্র্যাকিং।
কাস্টমাইজেশন
প্রতি-tenant কোডের শাখা এড়ান। বদলে configuration ও feature flag ব্যবহার করুন, নইলে সিস্টেম রক্ষণাবেক্ষণের অযোগ্য হবে।
মূল কথা: ঝুঁকি ও scale অনুযায়ী isolation মডেল বাছুন, tenant ফিল্টার database স্তরে কার্যকর করুন, এবং প্রতি tenant-এর resource সীমিত করুন।
System Design সিরিজ, পর্ব ৫ (failure ও security): 6 নম্বর (মোট 6)। আগের লেখা: Zero trust architecture সহজ ভাষায়.


