Scaling মানে কী?
Server বা Application এর লোড (traffic, data processing ইত্যাদি) যখন বাড়তে থাকে, তখন আগের মতো Hardware আর System সেই লোড সামলাতে পারে না। তখন আমাদের scaling করতে হয় — মানে সার্ভারকে এমনভাবে বাড়ানো যাতে বেশি লোডও ঠিকভাবে সামলাতে পারে।
Scaling মূলত দুইভাবে করা যায়:
- Vertical Scaling (Scale Up/Down)
- Horizontal Scaling (Scale Out/In)
1. Vertical Scaling (Scale Up)
সংজ্ঞা:
একটা একক সার্ভার/মেশিনকে আরও শক্তিশালী করা — যেমন RAM বাড়ানো, CPU upgrade করা, SSD যোগ করা ইত্যাদি।
উদাহরণ:
- আপনার কাছে একটা Laptop আছে, যেটাতে 8GB RAM। যদি আপনি 16GB RAM বসান, সেটা হলো Vertical Scaling।
- Cloud server এ 2 core CPU → 8 core CPU upgrade করাও Vertical Scaling।
সুবিধা:
- Simple implement করা যায়।
- Application এর architecture পরিবর্তন করতে হয় না।
- Database এর মতো systems (যেমন MySQL, PostgreSQL) এ সহজে কাজ করে।
অসুবিধা:
- একটা সময় Hardware এর limit এসে যাবে (যেমন 1 সার্ভারকে 1TB RAM দেওয়া যায় না)।
- Hardware upgrade ব্যয়বহুল হতে পারে।
- যদি সার্ভার down হয়, পুরো Application down হয়ে যাবে (single point of failure)।
2. Horizontal Scaling (Scale Out)
সংজ্ঞা:
একটা বড় সার্ভার না বানিয়ে, বরং একই ধরনের অনেকগুলো সার্ভার যোগ করা। মানে load কে ভাগ করে দেওয়া।
উদাহরণ:
- Facebook, Google, Netflix এগুলো কখনো Vertical Scaling করে না, বরং অনেক সার্ভার একসাথে চালায়।
- যদি আপনার ওয়েবসাইটে 10,000 concurrent user থাকে, তখন 1 সার্ভার না বাড়িয়ে 10টা সার্ভারে লোড ভাগ করে দেন ।
- Load Balancer ব্যবহার করে traffic ভাগ করা হয়।
সুবিধা:
- Practically unlimited scalability (server add করা যায় যত দরকার)।
- High Availability (একটা সার্ভার down হলে অন্যগুলো কাজ করে যাবে)।
- Cloud environment (AWS, GCP, Azure) এ খুব flexible।
অসুবিধা:
- Architecture design জটিল হয়ে যায়।
- Application কে distributed ভাবে বানাতে হয় (state management, session handling, database sharding, caching ইত্যাদি করতে হয়)।
- DevOps এবং Networking জ্ঞান বেশি দরকার।
Comparision - তুলনা (Vertical vs Horizontal)
| দিক | Vertical Scaling | Horizontal Scaling |
|---|---|---|
| পদ্ধতি | 1 সার্ভারকে শক্তিশালী করা | একাধিক সার্ভার যোগ করা |
| খরচ | High-end hardware দামি | Relatively সস্তা, commodity hardware ব্যবহার করা যায় |
| Limit | Hardware সীমাবদ্ধতা আছে | Practically unlimited |
| Availability | Single point of failure | Fault tolerance বেশি |
| Complexity | Simple to implement | Complex architecture লাগে |
| Use case | Database, small apps | Large scale web apps, microservices |
কখন কোনটা ব্যবহার করা উচিত ?
-
Vertical Scaling
- ছোট/মাঝারি অ্যাপের জন্য
- Database server এ
- যখন traffic কম/medium লেভেলে
-
Horizontal Scaling
- Enterprise level systems
- High traffic ওয়েবসাইট/অ্যাপ (e.g. e-commerce, social media)
- যখন scalability আর availability সবচেয়ে জরুরি
সহজভাবে বললে:
- Vertical Scaling মানে "একটা বিল্ডিংকে উঁচু করা"।
- Horizontal Scaling মানে "অনেকগুলো ছোট বিল্ডিং পাশাপাশি বানানো"।