Large-Scale Backend Architecture — Scaling to Millions of Users
"Scaling to Millions of Users"
যখন তোমার অ্যাপে ১০০ জন ইউজার, তখন একটি সাধারণ Monolith (সব কোড এক প্রজেক্টে) যথেষ্ট। কিন্তু যখন ইউজার ১ মিলিয়নে পৌঁছাবে, তখন তোমার সার্ভার ধসে পড়বে।
কেন? কারণ Monolith-এ একটা ছোট বাগ পুরো সিস্টেম ডাউন করে দেয়। ডেটাবেস বটলনেক (Bottleneck) হয়ে যায়।
সমাধান? Microservices & Event-Driven Architecture।
⭐ ১. Microservices: ছোট ছোট রাজ্য 🏰
পুরো অ্যাপকে ভেঙে ছোট ছোট স্বাধীন সার্ভিসে ভাগ করে ফেলা।
লগইন/রেজিস্টার
অর্ডার নেওয়া
পেমেন্ট প্রসেসিং
✅ Independent Scaling: ব্ল্যাক ফ্রাইডেতে শুধু Order Service এর সার্ভার বাড়ালেই হবে
✅ Fault Isolation: Payment Service ডাউন থাকলেও প্রোডাক্ট ব্রাউজ করা যাবে
✅ Tech Freedom: Order Service Node.js দিয়ে, Payment Service Python দিয়ে বানানো যাবে
⭐ ২. Communication: Synchronous vs Asynchronous 📞 vs ✉️
❌ Synchronous (REST/HTTP) - The Blocking Way
Order → Payment → Inventory → Notification (চেইনের এক স্লো হলে পুরো সিস্টেম স্লো)
✅ Asynchronous (Event-Driven) - The Non-Blocking Way
Order Service ইভেন্ট ছুঁড়ে দেয়: "অর্ডার এসেছে!" → Message Broker → যার যার দরকার নেয়
⭐ ৩. Message Brokers: The Post Office 📮
A) Apache Kafka (The Beast) 🦍
হাই-থ্রুপুট স্ট্রিমিং, লগ এগ্রিগেশন, রিয়েল-টাইম এনালিটিক্স
B) RabbitMQ (The Reliable Courier) 🐰
কমপ্লেক্স রাউটিং, ব্যাকগ্রাউন্ড জব (ইমেইল, PDF)
C) Redis Streams / BullMQ (The Sprinter) 🐆
লাইটওয়েট, সুপার ফাস্ট, Node.js ব্যাকগ্রাউন্ড জবের জন্য সেরা
⭐ ৪. Caching: Speed Layer (Redis) ⚡
ফ্রিকুয়েন্টলি এক্সেস করা ডেটা Redis (In-memory DB) এ রাখা হয়।
📌 Cache-Aside Pattern:
1. অ্যাপ Redis এ ডেটা খোঁজে (Cache Hit → Return)
2. না পেলে Database থেকে আনে
3. Redis এ সেভ করে রাখে (Cache Miss → Store + Return)
💡 Senior Tip: ক্যাশ এক্সপায়ার (TTL) করা জরুরি, নাহলে ইউজার পুরনো ডেটা দেখবে!
⭐ ৫. CQRS: Read & Write আলাদা করা 📖✍️
✍️ Command Side (Write)
Insert/Update, Complex Logic, PostgreSQL
📖 Query Side (Read)
Super Fast Search, ElasticSearch/Redis
⭐ ৬. Saga Pattern: Distributed Transactions 🤝
Order Service: ORDER_CREATED →
Payment Service: চার্জ করে → PAYMENT_SUCCESS / PAYMENT_FAILED
✅ Success: Order Confirmed
❌ Failed: Order Service Rollback (Cancel Order)
⭐ ৭. API Gateway: দ্য দারোয়ান 👮♂️
- Routing: /users → User Service
- Auth: টোকেন ভেরিফাই করা
- Rate Limiting: স্প্যামিং আটকানো
- Aggregation: একাধিক সার্ভিসের ডেটা জোড়া লাগানো
🔧 টুলস: NGINX, Kong, AWS API Gateway
⭐ ৮. Database Scaling: Sharding & Replication 💾
📖 Read Replication
১টা Master (Write) + ৫টা Slave (Read) → রিড স্পিড বাড়ে
✂️ Sharding
User 1-10L → Server A | User 10-20L → Server B
🧠 ৯. Senior Interview Questions
Q1: Kafka এবং RabbitMQ এর মূল পার্থক্য কী?
A: Kafka "Log-based" (মেসেজ স্টোর করে, রিপ্লে করা যায়), RabbitMQ "Queue-based" (ডেলিভারি কনফার্ম হলে মুছে ফেলে)
Q2: Eventual Consistency কী?
A: ডিস্ট্রিবিউটেড সিস্টেমে সব নোড একই সময়ে আপডেট হয় না। পেমেন্ট হওয়া এবং ব্যালেন্স আপডেটের মধ্যে সাময়িক অমিল মেনে নেওয়া।
Q3: API Gateway কেন দরকার?
A: ক্লায়েন্টকে জটিলতা থেকে আড়াল করে, সিকিউরিটি নিশ্চিত করে এবং প্রোটোকল ট্রান্সলেশন করতে পারে।
🚀 অধ্যায় ২৮ সারাংশ (Checklist)
- ✓Architecture: Monolith → Microservices
- ✓Messaging: Kafka/RabbitMQ দিয়ে Event-Driven সিস্টেম
- ✓Patterns: CQRS (Read/Write আলাদা) + Saga (Distributed Transactions)
- ✓Speed: Redis ক্যাশিং + API Gateway রাউটিং
Next Step: সিস্টেম তো বানালাম, কিন্তু এটা ডেপ্লয় এবং মেইনটেইন করব কিভাবে? পরের অধ্যায়: "DevOps & Deployment (Docker, CI/CD, Cloud)"।