Microservices Fundamentals
Microservices Fundamentals¶
Difficulty: βββ
Overview¶
Microservices architecture is a design approach that structures an application as a collection of small, independent services. In this chapter, you will learn the difference between monolith and microservices, service boundary definition, data management principles, and inter-service communication methods.
Table of Contents¶
- Monolith vs Microservices
- Characteristics of Microservices
- Defining Service Boundaries
- Database per Service
- Inter-Service Communication
- Microservices Adoption Strategy
- Practice Problems
1. Monolith vs Microservices¶
Monolithic Architecture¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Monolithic Architecture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Monolithic Application β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β User β β Order β β Product β β β
β β β Module β β Module β β Module β β β
β β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β β
β β β β β β β
β β ββββββββββββββββββΌβββββββββββββββββ β β
β β β β β
β β βΌ β β
β β βββββββββββββββββββββββ β β
β β β Shared Library β β β
β β β (Common Utils) β β β
β β ββββββββββββ¬βββββββββββ β β
β β β β β
β β βΌ β β
β β βββββββββββββββββββββββ β β
β β β Single Database β β β
β β βββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Characteristics: β
β - Single codebase, single deployment unit β
β - Direct function calls between modules β
β - One shared database β
β - Same technology stack β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Microservices Architecture¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Microservices Architecture β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ β
β β User Service β β Order Service β βProduct Serviceβ β
β β βββββββββββ β β βββββββββββ β β βββββββββββ β β
β β β API β β β β API β β β β API β β β
β β βββββββββββ β β βββββββββββ β β βββββββββββ β β
β β βββββββββββ β β βββββββββββ β β βββββββββββ β β
β β β Logic β β β β Logic β β β β Logic β β β
β β βββββββββββ β β βββββββββββ β β βββββββββββ β β
β β β β β β β β β β β
β β βΌ β β βΌ β β βΌ β β
β β βββββββββββ β β βββββββββββ β β βββββββββββ β β
β β β DB β β β β DB β β β β DB β β β
β β β(Postgresβ β β β (MySQL) β β β β (Mongo) β β β
β β βββββββββββ β β βββββββββββ β β βββββββββββ β β
β βββββββββ¬ββββββββ βββββββββ¬ββββββββ βββββββββ¬ββββββββ β
β β β β β
β ββββββββββββββββββββΌβββββββββββββββββββ β
β β β
β Network Communication β
β (REST/gRPC/MQ) β
β β
β Characteristics: β
β - Independent deployment units β
β - Network communication between services β
β - Independent database per service β
β - Various technology stacks possible β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Pros and Cons Comparison¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Monolith vs Microservices β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββ¬ββββββββββββββββββββ¬ββββββββββββββββββββ β
β β Aspect β Monolith β Microservices β β
β ββββββββββββββββββΌββββββββββββββββββββΌββββββββββββββββββββ€ β
β β Early Dev β Fast β Slow β β
β β Deployment β Full redeploy β Independent β β
β β Scaling β Scale all β Selective scaling β β
β β Failure Impact β Entire system β Affected service β β
β β Tech Stack β Single β Various β β
β β Team Structure β Single team β Team per service β β
β β Transactions β ACID possible β Distributed txn β β
β β Testing β Simple β Complex β β
β β Debugging β Easy β Difficult β β
β β Ops Complexity β Low β High β β
β β Network β None β Required (latency,β β
β β β β failures) β β
β ββββββββββββββββββ΄ββββββββββββββββββββ΄ββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Problems with Monolith¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Common Monolith Problems β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. Big Ball of Mud β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β βββββ βββββ βββββ βββββ β β
β β β A ββββββΊβ B ββββββΊβ C ββββββΊβ D β β β
β β βββ¬ββ βββ¬ββ βββ¬ββ βββ¬ββ β β
β β β β² β β± β β² β β β
β β β β² β β± β β² β β β
β β βΌ β² βΌ β± βΌ β² βΌ β β
β β βββββ βββββ βββββ βββββ β β
β β β E ββββββΊβ F ββββββΊβ G ββββββΊβ H β β β
β β βββββ βββββ βββββ βββββ β β
β β β β
β β β Module boundaries disappear and become entangled β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 2. Deployment Fear β
β - Full redeploy even for small changes β
β - "No Friday deployments" culture β
β - Release cycles lengthen (monthly β quarterly) β
β β
β 3. Scaling Inefficiency β
β - Order service traffic increases β Must scale entire system β
β - Resource waste β
β β
β 4. Technical Debt Accumulation β
β - Difficulty upgrading frameworks/libraries β
β - Cannot adopt new technologies β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
2. Characteristics of Microservices¶
Core Characteristics¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Microservices Core Characteristics β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. Single Responsibility β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Each service focuses on one business function β β
β β - User Service: User management only β β
β β - Order Service: Order processing only β β
β β - Payment Service: Payment processing only β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 2. Independent Deployment β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β v1.0 v1.1 v1.2 β User Service updates β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β v2.3 β Order Service (no impact) β β
β β ββββββββββββββββββ β β
β β v1.5 β Product Service (no impact) β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 3. Technology Diversity (Polyglot) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β βUser Service β βOrder Serviceβ β ML Service β β β
β β β (Java) β β (Node.js) β β (Python) β β β
β β β PostgreSQL β β MySQL β β MongoDB β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β β
β β Can choose optimal technology for each service β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 4. Fault Isolation β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Payment Service β (failure) β β
β β β β
β β User Service β Order Service β Product Service β β β
β β (continues) (limited func) (continues) β β
β β β β
β β β Graceful Degradation possible β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Service Size¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β "How Small is Micro?" β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Qualitative criteria rather than quantitative: β
β β
β β Ownable and manageable by one team β
β - Amazon's "Two-Pizza Team" (6-8 people) β
β β
β β Can be rewritten in a few weeks β
β - Too big makes refactoring/replacement difficult β
β β
β β Focus on a single business function β
β - "Order Service" shouldn't handle user management β
β β
β β Independently deployable β
β - Deploy without changing other services β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Too small: (Nano-service) β
β - Excessive network calls β
β - Exploding operational complexity β
β - Distributed system overhead β
β β
β Too large: (Distributed Monolith) β
β - Loses microservice benefits β
β - High coupling β
β - Cannot deploy independently β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3. Defining Service Boundaries¶
Domain-Driven Design (DDD)¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DDD and Microservices β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Core Concept: Bounded Context β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β E-Commerce Domain β β
β β β β
β β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ β β
β β β Sales Context β βInventory Contextβ βShipping Context β β β
β β β β β β β β β β
β β β - Order β β - Product β β - Shipment β β β
β β β - Customer β β - Stock β β - Delivery β β β
β β β - Shopping Cartβ β - Warehouse β β - Carrier β β β
β β β β β β β β β β
β β ββββββββββ¬βββββββββ ββββββββββ¬βββββββββ ββββββββββ¬βββββββββ β β
β β β β β β β
β β βΌ βΌ βΌ β β
β β Order Service Inventory Service Shipping Service β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Bounded Context = Good candidate for microservice boundary β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Ubiquitous Language¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Language Differences by Context β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β "Customer" means different things in each Context: β
β β
β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ β
β β Sales Context β βSupport Context β β Billing Context β β
β βββββββββββββββββββ€ βββββββββββββββββββ€ βββββββββββββββββββ€ β
β β β β β β β β
β β Customer: β β Customer: β β Customer: β β
β β - Purchase β β - Ticket β β - Payment β β
β β history β β history β β methods β β
β β - Preferences β β - Satisfaction β β - Billing β β
β β - Cart β β - Inquiries β β address β β
β β β β β β - Payment β β
β β β β β β history β β
β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ β
β β
β Same term, different meanings β Each Context maintains its own model β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Anti-pattern: Shared "God Customer" model across all Contexts β
β β
β class Customer { β
β // Sales attributes β
β purchaseHistory, preferences, cart... β
β // Support attributes β
β tickets, satisfaction, inquiries... β
β // Billing attributes β
β paymentMethods, billingAddress, invoices... β
β // ... endlessly growing model β
β } β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Context Mapping¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Relationships Between Contexts β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββ Upstream ββββββββββββββββ β β
β β β Order β ββββββββββββββΊ β Inventory β β β
β β β Context β (depends on) β Context β β β
β β ββββββββββββββββ ββββββββββββββββ β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Relationship Patterns: β
β β
β 1. Customer-Supplier β
β - Upstream reflects Downstream's requirements β
β - Collaborative relationship β
β β
β 2. Conformist β
β - Downstream uses Upstream's model as-is β
β - Upstream refuses change requests β
β β
β 3. Anti-Corruption Layer (ACL) β
β βββββββββββββββ βββββββ βββββββββββββββ β
β β Legacy βββββΊβ ACL βββββΊβ New β β
β β System β βββββββ β Service β β
β βββββββββββββββ (translation βββββββββββββββ β
β layer) β
β β
β 4. Open Host Service β
β - Provides well-documented public API β
β - Supports multiple consumers β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Service Decomposition Strategies¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Service Decomposition Strategies β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. By Business Capability β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Reflect organizational structure (Leverage Conway's Law) β β
β β β β
β β Marketing Team βββΊ Marketing Service β β
β β Order Team βββΊ Order Service β β
β β Shipping Team βββΊ Shipping Service β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 2. By Subdomain β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Core Domain: Core business competitiveness β β
β β β Develop in-house, highest quality β β
β β β β
β β Supporting Domain: Supports the core β β
β β β Internal development or customization β β
β β β β
β β Generic Domain: General functionality β β
β β β External solutions or standard implementation β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 3. By Change Frequency β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Frequent change ββββββββββββββββββββββββββββΊ Rarely changes β β
β β β β
β β Promotion Order Inventory User Auth β β
β β Service Service Service Service β β
β β β β
β β β Separate things with different change frequencies β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4. Database per Service¶
Principle¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Database per Service Principle β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Rule: Each service has its own database β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β βUser Service β βOrder Serviceβ βProduct Svc β β β
β β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β β
β β β β β β β
β β βΌ βΌ βΌ β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β User DB β β Order DB β β Product DB β β β
β β β (PostgreSQL)β β (MySQL) β β (MongoDB) β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β β
β β β Direct DB access forbidden! β β
β β β β
β β Order Service ββββββΊ User DB (forbidden) β β
β β Order Service ββββββΊ User Service API (allowed) β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Reasons: β
β - Maintain loose coupling β
β - Independent schema changes possible β
β - Optimal DB selection per service β
β - Independent scaling possible β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Data Sharing Patterns¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Inter-Service Data Sharing Patterns β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. API Call (Synchronous) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Order Service User Service β β
β β β β β β
β β βββGET /users/123 βββββββββββββββββΊβ β β
β β ββββ{ name: "Kim", ... } βββββββββββ β β
β β β β β β
β β - When real-time data is needed β β
β β - Creates dependency β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 2. Event-Based (Asynchronous) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β User Service Event Bus Order Service β β
β β β β β β β
β β Create user β β β β
β β βββUserCreatedβββββΊβ β β β
β β β βββUserCreatedββββββΊβ β β
β β β β β Store local copy β β
β β β β β β β
β β - Data replication β β
β β - Eventual consistency β β
β β - Loose coupling β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β 3. CQRS (Command Query Responsibility Segregation) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β βββββββββββββββ Events ββββββββββββββββββββββββββ β β
β β βCommand Side ββββββββββββββββΊβ Read Model β β β
β β β(Each service)β β(Joined views, search β β β
β β βββββββββββββββ β optimized) β β β
β β ββββββββββββββββββββββββββ β β
β β β β
β β - Read/write separation β β
β β - Complex query optimization β β
β β - Combined with event sourcing β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Distributed Transaction Handling¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Distributed Data Consistency β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Problem: Need to deduct inventory when creating order β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β Order Service Inventory Service β β
β β ββββββββββββββββ ββββββββββββββββ β β
β β β Create order β β Deduct stock β β β
β β β (success) β β (failure!) β β β
β β ββββββββββββββββ ββββββββββββββββ β β
β β β β
β β β Data inconsistency! (order exists but stock not deducted) β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Solutions: β
β β
β 1. Saga Pattern (Compensating Transactions) β
β - Choreography: Event chain β
β - Orchestration: Central control β
β (Details in 10_Data_Consistency_Patterns.md) β
β β
β 2. Accept Eventual Consistency β
β - Allow temporary inconsistency based on business requirements β
β - Background reconciliation process β
β β
β 3. Outbox Pattern β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Order Service β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β BEGIN TRANSACTION β β β
β β β INSERT INTO orders (...) β β β
β β β INSERT INTO outbox (event: OrderCreated) β β β
β β β COMMIT β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β β
β β βΌ β β
β β Background Worker: outbox β Message Queue β β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
5. Inter-Service Communication¶
Synchronous Communication¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Synchronous Communication: REST vs gRPC β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β REST (HTTP/JSON) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Order Service Product Service β β
β β β β β β
β β βββGET /products/123 ββββββββββββββΊβ β β
β β β Content-Type: application/json β β β
β β β β β β
β β βββ{ "id": 123, "name": "...", β β β
β β β "price": 1000 } βββββββββββββββ β β
β β β β β β
β β Pros: Simple, easy debugging, universal β β
β β Cons: Text-based (overhead), lacks type safety β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β gRPC (HTTP/2 + Protocol Buffers) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Order Service Product Service β β
β β β β β β
β β βββGetProduct(id: 123) ββββββββββββΊβ β β
β β β (Binary, HTTP/2 multiplexing) β β β
β β β β β β
β β βββProduct { id, name, price } βββββ β β
β β β (Strongly typed) β β β
β β β β β β
β β Pros: Fast, type-safe, bidirectional streaming β β
β β Cons: Binary (hard to debug), limited direct browser calls β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββ¬ββββββββββββββββββββββ¬ββββββββββββββββββββββ β
β β Feature β REST β gRPC β β
β ββββββββββββββββΌββββββββββββββββββββββΌββββββββββββββββββββββ€ β
β β Protocol β HTTP/1.1 or 2 β HTTP/2 β β
β β Format β JSON (text) β Protobuf (binary) β β
β β Performance β Moderate β Fast (~7x) β β
β β Type Safety β Runtime β Compile time β β
β β Streaming β Limited β Bidirectional β β
β β Browser β Direct possible β Needs gRPC-Web β β
β β Use Case β External APIs β Internal services β β
β ββββββββββββββββ΄ββββββββββββββββββββββ΄ββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Asynchronous Communication¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Asynchronous Event-Based Communication β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Order β β Message β β Inventory β β
β β Service β β Broker β β Service β β
β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β
β β β β β
β Create order β β β
β β β β β
β βββOrderCreatedβββββΊβ β β
β β βββOrderCreatedβββββΊβ β
β (Return immediately) β β Deduct stock β
β β β β β
β β βββStockReservedβββββ β
β βββStockReservedβββββ β β
β β β β β
β β
β Advantages: β
β - Loose coupling between services β
β - Messages preserved during service failure β
β - Easy load distribution and scaling β
β β
β Disadvantages: β
β - Increased complexity β
β - Difficult debugging β
β - Eventual consistency β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Communication Pattern Selection Guide¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Communication Pattern Selection β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β When to use Synchronous Communication: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - When immediate response is needed (queries, validation) β β
β β - When request-response pattern is natural β β
β β - Simple inter-service calls β β
β β β β
β β Examples: Login auth, product info lookup, balance check β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β When to use Asynchronous Communication: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β - When task completion takes time β β
β β - When fault isolation is important β β
β β - When event broadcast is needed β β
β β - When load leveling is needed β β
β β β β
β β Examples: Email sending, notifications, log collection, β β
β β analytics β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Hybrid: β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Client ββRESTβββΊ API Gateway ββEventβββΊ Internal Services β β
β β β β
β β - External: REST (simple, universal) β β
β β - Internal: Event/gRPC (performance, loose coupling) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
6. Microservices Adoption Strategy¶
Strangler Fig Pattern¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Strangler Fig Pattern β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Stage 1: Proxy in front of monolith β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β βββββββββββ β β
β β Client βββββΊβ Proxy ββββββΊ Monolith (100%) β β
β β βββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Stage 2: Extract some features to microservices β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β βββββββββββ βββββββββββββββββββ β β
β β Client βββββΊβ Proxy βββββΊβ User Service β (10%) β β
β β β β βββββββββββββββββββ β β
β β β β βββββββββββββββββββ β β
β β β βββββΊβ Monolith (90%) β β β
β β βββββββββββ βββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Stage 3: Gradual migration β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β βββββββββββ βββββββββββββββββββ β β
β β Client βββββΊβ Proxy βββββΊβ User Service β β β
β β β βββββΊβ Order Service β β β
β β β βββββΊβ Product Service β (70%) β β
β β β β βββββββββββββββββββ β β
β β β βββββΊβ Monolith (30%) β β β
β β βββββββββββ βββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Stage 4: Monolith removal complete β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β βββββββββββ βββββββββββββββββββ β β
β β Client βββββΊβ Proxy βββββΊβ User Service β β β
β β β βββββΊβ Order Service β β β
β β β βββββΊβ Product Service β (100%) β β
β β β βββββΊβ Payment Service β β β
β β βββββββββββ βββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Microservices Readiness Checklist¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Microservices Readiness Check β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Organization/Culture: β
β β Is DevOps culture established? β
β β Is the team ready to own and operate services? β
β β Do you have automated CI/CD pipelines? β
β β Is there an on-call/incident response process? β
β β
β Infrastructure: β
β β Do you have container/orchestration experience? (Docker, K8s) β
β β Is monitoring/logging infrastructure ready? β
β β Can you operate a service mesh or API Gateway? β
β β Do you have distributed tracing tools? β
β β
β Development: β
β β Are domains clearly defined? β
β β Do you have API design/versioning standards? β
β β Is test automation level sufficient? β
β β Do you understand distributed system patterns? β
β β
β β οΈ If the above items are not ready, microservices may β
β only increase complexity and cost. β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
7. Practice Problems¶
Practice 1: Service Decomposition¶
Decompose an online bookstore system into microservices: - Identify core Bounded Contexts - Define each service's responsibilities - Design relationships between services (Context Mapping) - Database separation strategy
Practice 2: Communication Method Selection¶
Choose the appropriate sync/async communication method for the following scenarios: 1. Stock check when loading product detail page 2. Email sending after order completion 3. Inventory deduction after payment processing 4. User profile lookup 5. Login event logging
Practice 3: Migration Plan¶
Create a plan to transition an existing monolith e-commerce system to microservices: - Apply Strangler Fig pattern - Choose the first service to separate and explain why - Step-by-step migration roadmap
Next Steps¶
Learn about Service Discovery, Circuit Breaker, Service Mesh, and other microservices operational patterns in 14_Microservices_Patterns.md!
References¶
- "Building Microservices" - Sam Newman
- "Domain-Driven Design" - Eric Evans
- "Microservices Patterns" - Chris Richardson
- Martin Fowler's Microservices Guide
- Netflix Tech Blog
- Uber Engineering Blog