Distributed Systems

Microservices

Microservices is an architectural pattern that arranges an application as a collection of loosely coupled, fine-grained services, communicating through lightweight protocols.

Abstract

An approach to developing a single application as a suite of small services, each running in its own process and communicating with a lightweight mechanism, often an HTTP resource API.

The above is not intuitive. Think about the traumatic experience of developing monolithic experience. Things don’t scale very well. Everything is too tightly coupled.

  • from netflix guide to microservices

Microservices encourage

  • Separation of concerns (modularity, encapsulation)
  • Scalability (horizontally scaling, workload partitoning)
  • Virtualization and elasticity (automated operations, on-demand provisioning)

Resources

Connection to Microkernel

While both microservices and microkernel are modular architectures, they apply to different domains: software application development and operating system design, respectively. Microservices focus on decomposing application functionality into small, independent services, while microkernels provide a minimal core for operating systems with additional functionalities implemented in user space.

Analogy

Just had this serendipity moment watching this netflix guide to microservices, thinking about how microservices breaking down things into components, as opposed to 1 tightly coupled architecture, is like modular vs end-to-end robotics. End-to-end is really hard to debug because everything is so tighly coupled.

Some more ideas in Production Environment.