Microservice Architecture
1. What is Microservice Architecture?
Microservice Architecture হলো এমন একটা পদ্ধতি যেখানে বড় একটি application কে ছোট ছোট independent services এ ভাগ করা হয়। প্রতিটি service একটি নির্দিষ্ট কাজ করে (Single Responsibility Principle) এবং একে অপরের সাথে communicate করে API (REST, gRPC, Message Queue) এর মাধ্যমে।
-
প্রতিটি service এর নিজস্ব database বা storage থাকতে পারে।
-
প্রতিটি service আলাদা আলাদা ভাবে deploy, scale, maintain করা যায়।
2. Structure of Microservices
একটা বড় system কে ভাগ করা হয় ছোট ছোট services এ। যেমন E-commerce example নিলে:
- User Service → Authentication, Profile Management
- Product Service → Product listing, Inventory
- Order Service → Order management
- Payment Service → Payment gateway integration
- Notification Service → Email, SMS, Push notification
প্রতিটি service আলাদা আলাদা ব্যাকেন্ড এপ্লিকেশন, এবং এগুলো পুরোপুরি স্বাধীনভাবে চলে এবং প্রতিটি service একে অপরের সাথে communicate করে API (REST, gRPC, Message Queue) এর মাধ্যমে।
3. How Microservices Work
ধরে নেন আপনি একটা product কিনতে চাইছেন:
- UI → আপনি "Buy Now" চাপ দিলে request যায় Order Service এ।
- Order Service → Product Service কে কল করে → Stock আছে কিনা।
- Stock confirm হলে Order Service → Payment Service কে কল করে।
- Payment success হলে Order Service → Notification Service কে কল করে → "Order Confirmed" SMS/Email পাঠানো হয়।
- সব কিছু আলাদা service হলেও একসাথে কাজ করে seamless experience দেয়।
4. Advantages of Microservice Architecture
✅ Independent Deployment → একেকটা service আলাদা deploy করা যায়। ✅ Scalability → শুধু যে service বেশি load নিচ্ছে সেটাকে scale করা যায় (e.g. Payment service)। ✅ Technology Freedom → এক service Node.js, আরেকটা Python এ হতে পারে। ✅ Fault Isolation → একটা service down হলেও পুরো system down হয় না। ✅ Faster Development → বড় টিম একসাথে কাজ করতে পারে, আলাদা আলাদা service এ। ✅ Reusable Services → একবার বানানো service (e.g. Auth Service) অন্য project এও ব্যবহার করা যায়।
5. Disadvantages of Microservice Architecture
❌ Complexity → ছোট প্রজেক্টে অযথা জটিল হয়ে যায়। ❌ Communication Overhead → services একে অপরের সাথে API/Message Queue দিয়ে communicate করায় latency বাড়তে পারে। ❌ Data Consistency Problem → আলাদা database থাকার কারণে data sync করা কঠিন। ❌ DevOps Overhead → CI/CD, container orchestration, monitoring সব complex। ❌ Testing Harder → Integration test করা কঠিন।
6. When to use Microservices
- বড় application যেখানে অনেক আলাদা আলাদা feature আছে।
- যেখানে অনেক user আসবে এবং scaling দরকার।
- যখন multiple team একসাথে parallel কাজ করবে।
- যখন long-term maintainability দরকার।
7. When NOT to use
- ছোট প্রজেক্ট বা MVP (early startup stage)।
- যখন ছোট দল কাজ করছে।
- যখন খুব দ্রুত prototype বানাতে হবে।
8. Real Life Examples
- Netflix → আলাদা services (streaming, recommendation, billing, user profile)।
- Amazon → product catalog, order, payment, review সব আলাদা service।
- Uber → ride request, driver matching, payment, notification service।
9. Scaling in Microservices
- Independent Scaling → শুধু বেশি load হওয়া service scale করা যায়।
- Example: যদি Order Service এ বেশি load পড়ে, শুধু Order Service এর container 10x করে deploy করা যায়।
- Cloud-native scaling → Kubernetes / Docker Swarm দিয়ে সহজে করা যায়।
10. Deployment in Microservices
- প্রতিটি service আলাদা container / server এ deploy হয়।
- CI/CD pipeline প্রতিটি service এর জন্য আলাদা থাকে।
- Service discovery, API gateway, load balancer ব্যবহার করতে হয়।
11. Important Concepts in Microservices
- API Gateway → সব service এক জায়গায় expose করা হয় (single entry point)।
- Service Discovery → কোন service কোথায় চলছে তা automatically খুঁজে বের করা।
- Message Queue (Kafka, RabbitMQ) → Event-driven communication এর জন্য।
- Database per Service → প্রতিটি service এর নিজস্ব database থাকে।
12. Diagram (Textual Representation)
API Gateway
|
------------------------------------------------
| | | | | |
| User | Product| Order | Payment | Notification|
|Service|Service| Service | Service | Service |
|------|--------|---------|---------|------------|
| DB | DB | DB | DB | DB |
------------------------------------------------প্রতিটি service আলাদা box, আলাদা database।
13. Developer Experience
- Beginners → খুব জটিল, কারণ CI/CD, service communication, deployment system বুঝতে হয়।
- Large Team → Productivity অনেক বেশি, কারণ সবাই নিজের নিজের service maintain করতে পারে।
- DevOps Team দরকার।
14. Summary
- Microservice = Independent Small Services।
- বড় application এর জন্য perfect, ছোট app এর জন্য overkill।
- Scalability, maintainability, fault isolation ভালো।
- কিন্তু DevOps, Communication, Consistency এর complexity বেশি।