Skip to content

What is a Microservice

Definition

A microservice is an architectural approach to software development where an application is structured as a collection of small, independent, and loosely coupled services. Each microservice:

  • Is focused on a single business capability or domain
  • Runs in its own process
  • Communicates via lightweight mechanisms, typically HTTP/REST or messaging
  • Can be developed, deployed, and scaled independently
  • Usually has its own data storage

Key Characteristics

1. Independence

Each microservice can be developed, deployed, updated, and scaled independently, without affecting other services. This allows for:

  • Faster development cycles
  • More frequent and lower-risk deployments
  • Granular scalability (scaling only the services that need more resources)

2. Technological Specialization

Different microservices can use different technologies, programming languages, and frameworks, allowing for:

  • Choosing the best tool for each specific job
  • Adopting new technologies incrementally
  • Experimenting with new approaches without compromising the entire system

3. Resilience

The isolation between microservices increases the resilience of the system as a whole:

  • Failures in one service do not necessarily affect other services
  • It's possible to implement fault tolerance mechanisms, such as circuit breakers
  • Faster recovery, as only the affected service needs to be restarted

4. Organization by Business Domain

Microservices are typically organized around business capabilities, not technical layers:

  • Alignment with business domains (following Domain-Driven Design principles)
  • Cross-functional teams responsible for specific services
  • Better understanding of the code and the purpose of each service

Comparison with Monolithic Architecture

mmd

Monolithic

  • Simplicity: Easier to develop initially
  • Deployment: A single deployment unit
  • Scalability: Scales as a single unit, even if only parts need more resources
  • Consistency: Simpler transactions within the same process
  • Development: Can become complex and difficult to maintain as it grows

Microservices

  • Complexity: More complex to develop and manage initially
  • Deployment: Multiple independent deployment units
  • Scalability: Scales per service, optimizing resources
  • Consistency: Requires strategies for eventual consistency between services
  • Development: Easier to maintain and evolve individual services

Challenges of Microservices

1. Distributed Complexity

  • Communication between services introduces latency
  • Need to handle network failures
  • More complex debugging in distributed systems
  • Need for distributed monitoring and tracing

2. Data Consistency

  • Distributed transactions are difficult to implement
  • Need to adopt patterns like Saga for operations involving multiple services
  • Eventual consistency instead of strong consistency

3. Governance

  • Standardization of APIs and contracts
  • Service versioning
  • Documentation and service discovery

4. Operational

  • Need for automation for deployment and monitoring
  • Infrastructure complexity (containers, orchestration)
  • Greater operational overhead

Common Patterns in Microservices

1. API Gateway

A component that acts as a single entry point for all clients, routing requests to the appropriate services.

mmd