Part 3 · আর্কিটেকচার 📖 ১৫ মিনিট পড়া 📝 ২০টি কুইজ

Monoliths বনাম Microservices

Modern software-এর সবচেয়ে আলোচিত architectural choice।

📝 কুইজে যান

একটি বড় বাড়ি বানাবেন: এক বিশাল hall room যেখানে সব কাজ — খাওয়া, ঘুমানো, কাজ — সব? নাকি আলাদা বেডরুম, কিচেন, অফিস room? প্রথমটা monolith, দ্বিতীয়টা microservice। দুটোরই জায়গা আছে — কিন্তু কোনটা কখন?

Monolith কী?

Monolithic Architecture = সম্পূর্ণ application একটি single codebase, single deployment unit, single process। সব functionality (UI, business logic, DB access) একসাথে।

Structure

[Single Application] ├── User module ├── Product module ├── Order module ├── Payment module ├── Inventory module └── Notification module ↓ [Single Database]

Microservice কী?

Microservices Architecture = application কে ছোট, স্বাধীন service-এ ভাগ। প্রতিটি service:

  • Single responsibility।
  • Own codebase ও deployment।
  • Own database (preferably)।
  • API/event দিয়ে যোগাযোগ।
[User Service] [Product Service] [Order Service] ↓ ↓ ↓ [User DB] [Product DB] [Order DB] ↑ ↑ ↑ └────[ API Gateway / Message Broker ]────┘

বিস্তারিত তুলনা

Monolith

  • Single codebase
  • One deployment
  • One DB
  • Internal call (in-process)
  • Tech stack lock-in
  • Simple debugging
  • Slow scaling
  • One bug → entire app down

Microservices

  • Multiple codebases
  • Independent deployments
  • Per-service DB
  • Network call
  • Polyglot — different tech
  • Distributed debugging
  • Independent scaling
  • Fault isolation

Monolith-এর সুবিধা

  • Simple development: One codebase, easy navigation।
  • Easy debugging: Single process, integrated stack trace।
  • Performance: In-process call — no network latency।
  • ACID transaction: Single DB — easy।
  • Easy testing: End-to-end test simple।
  • Low operational overhead: One deployment।
  • Less DevOps complexity।

Monolith-এর অসুবিধা

  • Scaling difficult: Whole app together scale করতে হয়।
  • Slow deployment: One small change = full redeploy।
  • Tech lock-in: Single tech stack across the app।
  • Fault impact: One bug = entire app down।
  • Team coordination: Big team-এ codebase conflict।
  • Codebase complexity: Time-এর সাথে monolith bloat।

Microservice-এর সুবিধা

  • Independent scaling: Hot service শুধু scale।
  • Independent deployment: Service বদলালে অন্যরা untouched।
  • Tech diversity: Best tool per service।
  • Fault isolation: One service fail = others continue।
  • Team autonomy: Each team owns service end-to-end।
  • Faster development: Small codebase per service।
  • Polyglot persistence: Different DB per need।

Microservice-এর অসুবিধা

  • Distributed complexity: Network failures, latency।
  • Operational overhead: Many deployments, monitoring।
  • Distributed transactions: Saga, eventual consistency।
  • Debugging: Cross-service trace কঠিন।
  • Testing complex: End-to-end test challenging।
  • DevOps requirement: CI/CD, K8s, observability tooling।
  • Initial cost high: Infrastructure + organizational effort।

কখন কোনটা?

Monolith ভালো যখন:

  • Startup/MVP — দ্রুত launch।
  • Small team (~১০ এর কম)।
  • Application boundary unclear।
  • Domain simple।
  • Limited scale need।
  • Strong ACID transaction requirement।

Microservice ভালো যখন:

  • Application large + complex domain।
  • Big team (multiple teams)।
  • Different feature-এ different scaling need।
  • Tech diversity দরকার।
  • High availability required।
  • Frequent deployment।

Migration Strategy

Monolith First (Recommended)

Martin Fowler-এর advice — monolith দিয়ে শুরু, পরে extract করুন।

কারণ: domain boundary প্রথমে clear না; wrong split disastrous।

Strangler Fig Pattern

Old monolith-এ ধাপে ধাপে নতুন service add — পুরাতন code "strangle" করে।

  1. Identify bounded context।
  2. One module extract — service বানান।
  3. Traffic redirect (proxy)।
  4. Repeat — until monolith empty।

Modular Monolith — Middle Ground

Monolith কিন্তু well-organized:

  • Single deployment।
  • Internal module boundary strict।
  • Each module-এর own DB tables।
  • Easy to extract later।

অনেক ক্ষেত্রে — modular monolith microservice-এর চেয়ে ভালো।

বাস্তব উদাহরণ

Monolith-এ থাকা successful

  • Stack Overflow: Famous monolith — high traffic, simple architecture।
  • GitHub: Rails monolith (initially)।
  • Basecamp: Rails majestic monolith।

Microservice-এ গেছে

  • Netflix: Pioneers — 700+ microservice।
  • Amazon: Hundreds of services।
  • Uber: 2200+ microservice (পরে কিছু consolidate)।
  • Spotify: Squad-based microservice।

সাধারণ ভুল ধারণা

  1. "Microservice always better": না — small project-এ disaster।
  2. "Microservice = scalable": Monolith ও scale করা যায় (Stack Overflow proof)।
  3. "Big company microservice": Big company microservice কারণ তাদের team scale problem।
  4. "Microservice migration easy": Years of effort + many failures।

Best Practices

  • Start with monolith (or modular monolith)।
  • Domain-Driven Design (DDD) দিয়ে boundary identify।
  • Microservice-এ যাওয়ার আগে — DevOps maturity verify।
  • Strangler fig — gradual migration।
  • Microservice = team autonomy + scale; না হলে স্বার্থে যাবেন না।
  • Observability (logging, tracing, metrics) — microservice-এ critical।

📌 চ্যাপ্টার সারমর্ম

  • Monolith: single codebase + single deployment। Simple, fast, but scaling/team-এ challenge।
  • Microservice: small independent service। Flexible, scalable, কিন্তু complex।
  • Start monolith → extract পরে (strangler fig)।
  • Modular monolith অনেক ক্ষেত্রে best balance।
  • Choose-এর basis: team size, domain complexity, scale need।