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 ফিল্টার যোগ করে, তাই ভুলে যাওয়া WHERE data ফাঁস করতে পারে না।
  • 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 সহজ ভাষায়.

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া