System DesignMastery
--Foundations — ভিত্তি তৈরি

Scalability Fundamentals

Duration৩০-৪৫ মিনিট
LevelIntermediate
FocusTheory & Practice
001Introduction

SCALABILITY আসলে কি?

ধরুন আপনি একটা দারুণ অ্যাপ বানালেন। এবং আপনার বাড়িতে থাকা একটা ল্যাপটপকেই সার্ভার বানিয়ে অ্যাপটা লাইভ করে দিলেন। শুরুতে ১০০ ইউজার, সব চমৎকার চলছে। কিন্তু অ্যাপটি জনপ্রিয় হতেই শুরু হলো বিপদ! ইউজাররা কমপ্লেইন করছে অ্যাপ নাকি কচ্ছপের গতিতে চলে। চেক করে দেখলেন যে আপনার সার্ভারের র‍্যাম আর সিপিইউ ১০০% ছুঁয়েছে, ল্যাপটপের ফ্যান হেলিকপ্টারের মতো শব্দ করছে মনে হচ্ছে এই এখনি মনে হয় ল্যাপটপ পুড়ে গলে যাবে।

Stressed server illustration

সার্ভার যখন লোড সামলাতে হিমশিম খায়

তখনি আপনি বুঝতে পারলেন যে আপনার ল্যাপটপের পক্ষে এই এত ইউজারের লোড সামলানো সম্ভব না । তাই আপনি চিন্তা করলেন যে ল্যাপটপ দিয়ে হবেনা, তাই আপনি একটি বিশাল কনফিগারেশর কম্পিউটার কিনে আনলেন এবং সেটাতে সার্ভার সেটআপ করলেন।

এইযে আপনি বাড়তি ইউজারের লোড সামলাতে আপনার সিস্টেমের ক্ষমতা বাড়ালেন, এইটাই মূলত স্কেল করা।

সিস্টেম যখন বাড়তে থাকা ইউজারের চাপ আর সামলাতে পারে না, তখনই দরকার হয় Scalability। সহজ কথায়, বাড়তি লোড হ্যান্ডেল করার জন্য সিস্টেমকে বড় করার ক্ষমতাই হলো স্কেলেবিলিটি।

এই যে স্কেল করার ব্যাপারটা, এইটাকে মূলত দুইভাবে ভাগ করা হয়, Vertical Scaling এবং Horizontal Scaling

DEFINITION

Scalability হলো একটা system এর ক্ষমতা — বাড়তি load (users, data, requests) handle করার জন্য পারফরম্যান্স ঠিক রেখে নিজেকে বড় করার ক্ষমতা।

002Vertical Scaling

Vertical Scaling (Scaling Up)

যখন আপনার সার্ভার স্লো হয়ে যায়, তখন সবচেয়ে সহজ সমাধান কী? বাজার থেকে বেশি RAM বা ভালো প্রসেসর কিনে আপনার ওই একটা কম্পিউটারকেই শক্তিশালী বানানো। এটাকে বলা হয় Vertical Scaling বা Scaling Up

Powerful workstation illustration

ভার্টিক্যাল স্কেলিং: একটি শক্তিশালী দানব পিসি

অনেকটা আপনার পুরোনো ল্যাপটপ ফেলে দিয়ে একটা বিশাল কনফিগারেশনের দানব পিসি কিনে আনার মতো। শুরুতে এটা বেশ কার্যকর মনে হয় এবং ১০০০-৫০০০ ইউজার পর্যন্ত হয়তো ভালোই সার্ভিস দেয়। কিন্তু এই দানব পিসিটারওতো একটা সীমা আছে, তাইনা?

BEFORE4GB RAM2 CPUServerUPGRADEAFTER64GB RAM32 CPUNVMe SSDBigger Server💸 $$$Expensive

চলুন Vertical Scaling এর সুবিধা এবং অসুবিধাগুলো জেনে নেওয়া যাক:

সুবিধাসমূহ

  • সেটআপ করা খুব সহজ। বাজার থেকে RAM কিনে এনে লাগিয়ে দিলেই হলো।
  • মেইনটেইন করা সহজ কারণ আপনার সার্ভার একটাই।
  • অ্যাপের কোডে বড় কোনো পরিবর্তন ছাড়াই হার্ডওয়্যার আপগ্রেড করে পারফরম্যান্স বাড়ানো যায়।

অসুবিধাসমূহ

  • হার্ডওয়্যার লিমিট: একটা কম্পিউটারের ক্ষমতা অসীম নয়। মাদারবোর্ডের একটা শেষ সীমানা আছে।
  • অতিরিক্ত খরচ: হাই-এন্ড হার্ডওয়্যারের দাম জ্যামিতিক হারে (Exponentially) বাড়ে।
  • Single Point of Failure: ওই একটা সার্ভার নষ্ট হলে পুরো অ্যাপ বন্ধ হয়ে যাবে।
003Horizontal Scaling

Horizontal Scaling (Scaling Out)

আপনি যখন আপনার ল্যাপটপটিকে ফেলে একটা বিশাল কম্পিটার কিনে আনলেন তখন শুরুতে তা কয়েক হাজার ইউজার পর্যন্ত ভালোই সার্ভিস দিচ্ছিল, কিন্তু যখন ইউজার সংখ্যা আরো বাড়তে শুরু করলো তখন কিন্তু আপনার বিশাল কম্পিটারও ইউজারের চাপে হাঁপিয়ে ওঠে, তখন আপনি বুঝতে পারবেন যে হার্ডওয়্যার আপগ্রেড করে আপনি আর এই সমস্যার সমাধান করতে পারবেন না,কেননা আপনি যতই আপগ্রেড করেন না কেন সেটাও একটা সময় আর ইউজারের চাপ সামলাতে পারবেনা। কারণ তারও তো একটা সীমা আছে। তাই এই সমস্যার সমাধান করতে হলে আপনাকে স্ট্র্যাটেজিতে পরিবর্তন আনতে হবে।

তখন আপনি যেটা করতে পারেন আপনার ওই বিশাল কম্পিউটারটাকে বার বার আপগ্রেড না করে, আপনি ছোট ছোট কিছু সাধারণ কম্পিউটার কিনে পাশাপাশি বসিয়ে দিতে পারেন। এবং অ্যাপের লোড সবার মধ্যে ভাগ করে দিতে পারেন। এইযে লোডকে একটা কপিঊটারে না রেখে অনেকগুলো কম্পিউটারে (সার্ভারে) ভাগ করে দেওয়ার প্রক্রিয়াটাকেই Horizontal Scaling বা Scaling Out বলা হয়।

Server cluster illustration

ভারটিকাল স্কেলিং: একটি শক্তিশালী কম্পিউটারে লোড হ্যান্ডলিং, হরাইজন্টাল স্কেলিং: অনেকগুলো সার্ভার মিলে কাজ করছে

একটা কম্পিউটারের ক্ষমতা না বাড়িয়ে, পাশাপাশি নতুন আরও কয়েকটা সাধারণ কম্পিউটার (সার্ভার) বসিয়ে দেওয়া এবং কাজের লোড সবার মধ্যে ভাগ করে দেওয়াকে বলা হয় Horizontal Scaling বা Scaling Out

👥USERSLOADBALANCERNginx/HAProxySERVER 14GB / 2CPUSERVER 24GB / 2CPUSERVER 34GB / 2CPUDATABASEShared+ easily add SERVER 4, 5, 6...

চলুন Horizontal Scaling এর সুবিধা এবং অসুবিধাগুলো জেনে নেওয়া যাক:

সুবিধাসমূহ

  • আনলিমিটেড পাওয়ার: তাত্ত্বিকভাবে আপনি যত খুশি সার্ভার যোগ করতে পারবেন।
  • Fault Tolerance: একটা সার্ভার নষ্ট হলেও বাকিগুলো ব্যাকআপ দেয়, ইউজার টেরও পাবে না।
  • সহজ আপগ্রেড: লাইভ সিস্টেমেই নতুন সার্ভার যুক্ত করা যায়।

অসুবিধাসমূহ

  • আর্কিটেকচারাল জটিলতা: সিস্টেম মেইনটেইন করা এবং ট্রাফিককে বিভিন্ন সার্ভারে ভাগ করা কঠিন।
  • ডিস্ট্রিবিউটেড ডাটাবেজ: অনেকগুলো সার্ভারের মধ্যে ডেটা সিঙ্ক করা বেশ জটিল।

সুধু তাই না Horizontal Scaling করতে হলে আপনাকে load balancer, Stateless architecture, database replication, data partitioning, caching ইত্যাদি বিষয়গুলো সম্পর্কেও জানতে হবে। নাহলে আপনি বুজতে পারবেন না যে ট্রাফিক কিভাবে মাল্টিপল সার্ভারে ভাগ করবেন, এবং ডাটা কিভাবে মাল্টিপল সার্ভারে সিঙ্ক করবেন।

Key Insight

Google, Facebook বা Netflix-এর মতো জায়ান্টরা এভাবেই কাজ করে। তাদের লক্ষ লক্ষ ছোট ছোট সার্ভার মিলে একটা বিশাল সুপার সিস্টেম হিসেবে কাজ করে।
004Architecture

Stateless Architecture — কেন এটি জরুরি?

হরাইজন্টাল স্কেলিং-এ একটা বড় প্রশ্ন হলো— "১০টা কম্পিউটার থাকলে ইউজারের রিকোয়েস্ট কোন কম্পিউটারের কাছে যাবে?" এবং সব কম্পিউটার কি একই ডেটা জানবে?

এর সমাধান হলো আপনার সার্ভারকে Stateless বানানো। অর্থাৎ, সার্ভার তার নিজের মেমরিতে কোনো সেশন ডেটা রাখবে না। ফলে যেকোনো সার্ভার যেকোনো রিকোয়েস্ট হ্যান্ডেল করতে পারবে।

বিষয়Stateless ✅Stateful ❌
Session dataRedis/DB তে রাখুনServer memory তে রাখুন
Scale করা যায়?সহজেই যায়কঠিন, সেশন সিঙ্ক লাগে
Server crash হলে?অন্য সার্ভার সামলায়ইউজার সেশন হারিয়ে যায়
stateless-auth.js
// ❌ STATEFUL — এটা স্কেলিং-এ সমস্যা করে
const sessions = {}; // মেমরিতে ডেটা রাখা মানেই ওই সার্ভারের ওপর নির্ভরশীলতা

app.post('/login', (req, res) => {
  sessions[userId] = { loggedIn: true };
  // ইউজার পরের রিকোয়েস্ট অন্য সার্ভারে পাঠালে সেশন খুঁজে পাবে না!
});

// ✅ STATELESS — এটি স্কেলেবল সিস্টেমের জন্য আদর্শ
const redis = require('redis');

app.post('/login', async (req, res) => {
  // ডেটা সেন্ট্রাল ডেটাবেজ বা Redis-এ রাখুন
  await redis.set(`session:${userId}`, JSON.stringify(sessionData));
});
005Comparison

Vertical vs Horizontal — সম্পূর্ণ তুলনা

বিষয়Vertical ScalingHorizontal Scaling
সংজ্ঞাএকটা মেশিন বড় করুনবেশি মেশিন যোগ করুন
Costজ্যামিতিক হারে বাড়েসরল রেখায় বাড়ে
Limitহার্ডওয়্যার লিমিট আছেলিমিট নেই
Downtimeআপগ্রেড করতে ডাউনটাইম লাগেলাইভ সিস্টেমেই বাড়ানো যায়
Fault Toleranceনেইচমৎকার

ইন্ডাস্ট্রি টিপস

সাধারণত শুরুতে Vertical Scaling দিয়ে কাজ চালানো হয় কারণ এটি সহজ। কিন্তু যখন ইউজার সংখ্যা বাড়ে বা হাই-অ্যাভেইলেবিলিটি দরকার হয়, তখন Horizontal Scaling ছাড়া গতি নেই।
006Hands-on Lab

Node.js Multi-Server + Load Balancer Setup

থিয়োরি তো জানলাম, এবার চলুন একটি কাস্টম Node.js Load Balancer এবং একাধিক সার্ভার সেটআপ করে দেখি। নিচে ধাপে ধাপে কোড দেওয়া হলো:

Practical Implementation Guide

Node.js Multi-Server & Load Balancing

007Lesson Summary

SUMMARY — আজকে যা শিখলাম

Conceptএক লাইনে
Scalabilityবাড়তি লোড হ্যান্ডেল করার ক্ষমতা
Vertical Scalingসার্ভারের হার্ডওয়্যার আপগ্রেড করা (Scaling Up)
Horizontal Scalingএকাধিক সার্ভার যুক্ত করা (Scaling Out)
Statelessসার্ভার মেমরিতে কোনো স্টেট রাখবে না
Load Balancerট্রাফিক সব সার্ভারে ভাগ করে দেয়
008Knowledge Check
009Assignments
010Practical Lab