Overview

Microservices architecture decomposes applications into small, independent services that communicate through APIs, enabling scalability, flexibility, and maintainability.

Core Principles

Single Responsibility

  • Each service has one specific purpose
  • Clear boundaries and responsibilities
  • Independent deployment and scaling

API-First Design

  • Services communicate through well-defined APIs
  • Contract-driven development
  • API versioning and compatibility

Decentralized Data Management

  • Each service manages its own data
  • Database per service pattern
  • Eventual consistency over transactions

Independent Deployment

  • Services can be deployed independently
  • No shared codebase or dependencies
  • Rolling updates and canary deployments

Service Communication Patterns

Synchronous Communication

  • REST APIs: Request-response pattern
  • GraphQL: Flexible query interface
  • gRPC: High-performance RPC

Asynchronous Communication

  • Message Queues: RabbitMQ, Apache Kafka
  • Event Streaming: Publish-subscribe pattern
  • Event Sourcing: State changes as events

Service Discovery

  • Client-side: Eureka, Consul
  • Server-side: Load balancers, API gateways
  • Service Mesh: Istio, Linkerd

API Design for Microservices

Service Boundaries

  • Bounded Context: Domain-driven design
  • API Composition: Aggregate data from multiple services
  • Backend for Frontend (BFF): Client-specific APIs

Cross-Service Communication

// REST API call between services
const response = await fetch('http://user-service/users/123', {
  headers: {
    'Authorization': `Bearer ${serviceToken}`,
    'X-Request-ID': requestId
  }
});

API Gateway Pattern

  • Single Entry Point: Unified API interface
  • Request Routing: Route to appropriate services
  • Cross-cutting Concerns: Authentication, logging, rate limiting

Data Management

Database per Service

  • Polyglot Persistence: Different databases for different services
  • Data Ownership: Each service owns its data
  • Data Replication: Event-driven data synchronization

Event-Driven Architecture

// Event publishing
eventBus.publish('user.created', {
  userId: '123',
  email: 'user@example.com',
  timestamp: Date.now()
});
 
// Event consumption
eventBus.subscribe('user.created', async (event) => {
  await emailService.sendWelcomeEmail(event.email);
});

Saga Pattern

  • Choreography: Services coordinate via events
  • Orchestration: Central coordinator manages flow
  • Compensation: Rollback on failure

Service Decomposition Strategies

Business Capability

  • Group by business functions
  • Align with organizational structure
  • Independent business value

Subdomain Decomposition

  • Core Domain: Main business value
  • Supporting Domain: Supporting capabilities
  • Generic Domain: Common functionality

Technical Decomposition

  • Size-based: Keep services small and focused
  • Team-based: Align with team boundaries
  • Technology-based: Group by technology stack

Resilience Patterns

Circuit Breaker

class CircuitBreaker {
  async call(serviceCall) {
    if (this.state === 'OPEN') {
      throw new Error('Circuit is open');
    }
    
    try {
      const result = await serviceCall();
      this.recordSuccess();
      return result;
    } catch (error) {
      this.recordFailure();
      throw error;
    }
  }
}

Bulkhead Isolation

  • Resource Isolation: Prevent cascade failures
  • Thread Pools: Separate thread pools per service
  • Connection Pools: Limit connections per service

Retry & Timeout

const axiosRetry = require('axios-retry');
 
axiosRetry(axios, {
  retries: 3,
  retryDelay: axiosRetry.exponentialDelay,
  retryCondition: (error) => {
    return axiosRetry.isNetworkOrIdempotentRequestError(error);
  }
});

Observability

Distributed Tracing

  • Trace Context: Request correlation across services
  • Jaeger/Zipkin: Trace visualization
  • OpenTelemetry: Standardized tracing

Centralized Logging

  • Correlation IDs: Track requests across services
  • Structured Logging: Consistent log format
  • ELK Stack: Elasticsearch, Logstash, Kibana

Health Checks

  • Readiness Probes: Service ready to accept traffic
  • Liveness Probes: Service healthy and running
  • Dependency Checks: External service health

Deployment & Scaling

Container Orchestration

  • Kubernetes: Container orchestration platform
  • Service Deployment: Rolling updates, scaling
  • Configuration Management: ConfigMaps, Secrets

Service Mesh

  • Traffic Management: Load balancing, routing
  • Security: mTLS, authorization
  • Observability: Metrics, tracing, logging

Blue-Green Deployment

  • Zero Downtime: Switch between versions
  • Instant Rollback: Quick reversion capability
  • Testing: Validate new version before switching

Testing Strategies

Unit Testing

  • Test individual service components
  • Mock external dependencies
  • Fast feedback loop

Integration Testing

  • Test service-to-service communication
  • Contract testing between services
  • End-to-end workflow testing

Chaos Engineering

  • Failure Injection: Simulate service failures
  • Network Latency: Test resilience to delays
  • Resource Exhaustion: Test under resource constraints

Common Challenges

Distributed Transactions

  • Two-Phase Commit: Complex coordination
  • Saga Pattern: Event-driven compensation
  • Eventual Consistency: Accept temporary inconsistency

Service Coordination

  • Service Discovery: Dynamic service location
  • Load Balancing: Distribute requests evenly
  • Circuit Breaking: Handle service failures gracefully

Data Consistency

  • CAP Theorem: Choose consistency, availability, partition tolerance
  • Eventual Consistency: Accept delayed consistency
  • CQRS: Separate read and write models

Tools & Frameworks

Development Frameworks

  • Spring Boot/Cloud (Java)
  • Express.js + Moleculer (Node.js)
  • FastAPI + Nameko (Python)
  • ASP.NET Core (.NET)

Infrastructure

  • Docker: Containerization
  • Kubernetes: Orchestration
  • Istio: Service mesh
  • Kong/Apigee: API gateway

Communication

  • RabbitMQ/Kafka: Message queues
  • gRPC: High-performance RPC
  • GraphQL: Flexible API layer

0 items under this folder.