Cover of Fundamentals of Software Architecture by Mark Richards, Neal Ford - Business and Economics Book

From "Fundamentals of Software Architecture"

Author: Mark Richards, Neal Ford
Publisher: O'Reilly Media
Year: 2020
Category: Computers

🎧 Free Preview Complete

You've listened to your free 10-minute preview.
Sign up free to continue listening to the full summary.

🎧 Listen to Summary

Free 10-min Preview
0:00
Speed:
10:00 free remaining
Chapter 17: Microservices Architecture
Key Insight 1 from this chapter

Core Principles and Design Philosophy of Microservices

Key Insight

Microservices architecture is profoundly influenced by Domain-Driven Design (DDD), particularly the concept of 'bounded context'. This concept dictates a strong decoupling style where each domain, encompassing its entities and behaviors (like code and database schemas), is self-contained and never coupled to anything outside its context. This prioritization of high decoupling means favoring duplication over reuse to avoid coupling, fundamentally driving the architecture's design. Topologically, microservices are distributed, with each service running in its own process, originally implying physical computers but quickly evolving to virtual machines and containers. This extreme decoupling solves problems associated with multitenant infrastructure, such as resource contention and improper isolation.

A significant challenge in microservices design is determining the correct service granularity, as the term 'microservice' is a label, not a strict size commandment. Services should ideally capture a domain or workflow, contributing one significant, functionally cohesive behavior. Guidelines for identifying appropriate boundaries include focusing on the service's purpose (domain), analyzing transaction boundaries (as cross-service transactions are discouraged due to inherent distributed architecture issues), and considering choreography—bundling services that require extensive communication to avoid overhead. Iteration is crucial for refining service design. Complementing this, data isolation is a core requirement, moving away from shared databases or schemas to avoid coupling, allowing each service to choose the most appropriate persistence tool independently, despite the complexity this introduces for unifying values across the system.

The architecture characteristics are rated on a scale where a 1-star indicates poor support and a 5-star signifies a strong feature. Scalability, elasticity, and evolutionary characteristics receive high ratings, making it suitable for modern businesses requiring rapid change and automated operations. While fault tolerance is generally high for independent, single-purpose services, extensive interservice communication can impact reliability. Performance is often an issue due to numerous network calls and security checks, requiring careful design and patterns like caching and replication. Microservices is a domain-centered architecture, exemplifying the 'quantum' measure due to its distinct deployment units, with architects needing to balance extreme decoupling's benefits and complexities.

📚 Continue Your Learning Journey — No Payment Required

Access the complete Fundamentals of Software Architecture summary with audio narration, key takeaways, and actionable insights from Mark Richards, Neal Ford.