Scalability
১০০ user থেকে ১০০ মিলিয়ন user — কীভাবে সিস্টেম বাড়ে?
আপনি একটি ছোট চা-দোকান খুললেন — দিনে ৫০ কাপ বিক্রি। কয়েক মাস পর ৫০০ কাপ — আপনি নিজে আর কুলিয়ে উঠছেন না। কী করবেন? নিজে আরও দ্রুত কাজ করবেন (vertical), নাকি ২ জন লোক রাখবেন (horizontal)? Software-এও একই গল্প।
Scalability কী?
Scalability = একটি সিস্টেমের ক্ষমতা যেটা বর্ধিত load (user, data, transaction) handle করতে পারে — performance ভেঙে না পড়ে।
Vertical vs Horizontal Scaling
Vertical Scaling (Scale Up)
- একই server-এ বেশি CPU, RAM, storage
- সরল — code পরিবর্তন লাগে না
- সীমা: hardware-এর সর্বোচ্চ
- Single point of failure
- খরচ exponentially বাড়ে
- উদাহরণ: 4-core → 32-core CPU
Horizontal Scaling (Scale Out)
- একাধিক server যোগ
- প্রায় unlimited scale
- HA সহজ
- Code stateless হতে হবে
- Complexity বাড়ে — distributed system
- উদাহরণ: ১ server → ১০০ server
Scale Cube — তিন dimension-এ scaling
The Art of Scalability বইয়ে Martin Abbott-এর model:
X-axis: Horizontal duplication
একই সার্ভারের multiple copy। Load balancer দিয়ে traffic distribute। সবচেয়ে সহজ।
Y-axis: Functional decomposition
Application-কে service-এ ভাঙা। Microservices। User service, Order service, Payment service আলাদা।
Z-axis: Data partitioning
Data shard করা। User ID দিয়ে DB-কে ১০ shard। প্রতিটি shard আলাদা server।
কোথায় bottleneck?
- CPU: Compute-heavy operation (image processing, ML)। Solution: optimize, parallelize, scale out।
- Memory: Cache full, GC pressure। Solution: bigger server, distributed cache।
- Disk I/O: Database read/write slow। Solution: SSD, indexing, caching।
- Network: Bandwidth saturate। Solution: CDN, compression।
- Database: সাধারণত প্রথম bottleneck। Solution: replication, sharding, caching।
Scalability Patterns
Stateless Architecture
Server-এ session রাখবেন না। Redis/JWT-এ রাখুন। Server interchangeable।
Caching
Read-heavy load DB-তে না গিয়ে cache থেকে — DB protect।
Asynchronous Processing
Heavy task background queue-এ। User-কে সাথে সাথে response।
Database Replication
Read replica দিয়ে read load distribute। Write master-এ।
Database Sharding
Data partition — প্রতিটি shard আলাদা DB-তে।
CDN
Static asset offload — origin-এ load কমে।
Microservices
Independent scaling — শুধু hot service scale করুন।
Capacity Planning
সঠিকভাবে scale করতে আগে measure প্রয়োজন:
- QPS (Queries per Second): ১০০M user × ১০ action/day = ~১২K QPS।
- Storage: User × data per user × growth।
- Bandwidth: Daily transfer × peak factor।
- Peak vs average: Peak সাধারণত average-এর ২-৩×।
- Headroom: ৩০% buffer রাখুন।
Auto-scaling
Cloud (AWS, GCP, Azure)-এ auto-scaling group:
- CPU > ৭০% → server যোগ
- CPU < ৩০% → server সরান
- Predictable load: scheduled scaling (অফিস ঘণ্টায় বেশি)
- Spike: rapid scaling rule
বাস্তব উদাহরণ
- Twitter: Horizontal scale + functional decomposition (timeline, tweet, search service আলাদা)।
- Instagram: 1 engineer-এ ১৪M user — heavy use of Postgres + Redis caching।
- WhatsApp: Erlang VM-এ vertical scale করে কয়েক million concurrent connection per server।
সাধারণ ভুল ধারণা
- "আগেই scale করো": Premature optimization — ১০ user-এ Kubernetes দরকার নেই।
- "More server = more performance": Distributed system overhead থাকে। Network I/O, coordination।
- "Vertical scaling backward": না, ছোট সিস্টেমে এটাই সরল।
Best Practices
- Stateless app design (scale-out-friendly)।
- Database আগে bottleneck হবে — caching, indexing শুরু থেকেই।
- Monitoring (Prometheus, Datadog) — bottleneck আগে চিহ্নিত।
- Load testing (k6, JMeter) — production-এ গিয়ে surprise নয়।
- Async processing — heavy job background-এ।
- Premature scaling এড়ান — measure আগে।
📌 চ্যাপ্টার সারমর্ম
- Scalability = বর্ধিত load handle করার ক্ষমতা।
- Vertical = বড় server; Horizontal = বেশি server।
- Scale Cube: X (duplicate), Y (functional), Z (data shard)।
- Database প্রথম bottleneck হয় সাধারণত।
- Stateless + caching + async = scalable foundation।