Microservices architecture has become a highly successful pattern in modern software design, enabling developers to build scalable, maintainable, and flexible systems. In this post, I want to highlight some key references that have helped me the most in understanding the underlying concepts and technologies behind microservices.
Architecture
Many discussions around microservices begin with the seminal blog post Microservices by Martin Fowler and James Lewis, published in March 2014. In this article, the authors outline the key characteristics of the microservices architectural style and the underlying principles that make it effective for modern software development.
For a quick overview of the microservices architecture, consider checking out the book Fundamentals of Software Architecture by Mark Richards and Neal Ford. This book provides a succinct yet comprehensive explanation of the most important patterns and trade-offs in software architecture, all condensed into a single chapter.
For a more in-depth exploration, Building Microservices by Sam Newman is a must-read. Newman dives deeper into the practical aspects of designing, building, and deploying microservices, making it an essential resource for developers.
A common question when working with microservices is determining how large or small each service should be. In the second part of his book Microservices, Eberhard Wolff offers valuable guidance on the constraints and considerations that influence the size and scope of a microservice.
Building the Application
As you begin your journey with microservices, one key concept to explore is the *12 Factor App±, a methodology that outlines best practices for building modern, scalable applications. Understanding and applying these principles is crucial for the success of your microservices-based systems.
If you choose Spring as your framework for developing microservices, Cloud Native Java by Kenny Bastani and Josh Long is a fantastic resource. This book covers all the necessary information to get started with building cloud-native applications using Spring.
APIs
Securing your APIs is an essential aspect of building a robust microservices ecosystem. If you’re working with Spring and need to implement OAuth2 for API security, Marko Behler’s tutorial, Spring Security & OAuth 2.0 - In-Depth, is an excellent guide for securing your services and ensuring proper authentication and authorization flows.
Operations
Once your microservices application is up and running, managing its operations and ensuring smooth deployment becomes paramount. For comprehensive coverage on deploying and managing microservices with Kubernetes, check out the book Production Kubernetes by Josh Rosso, Rich Lander, Alex Brand, and John Harris. It provides a detailed look at how to build a Kubernetes-based platform for running microservices in production environments.
Often Cited, Never Read…
In addition to the resources mentioned above, there are some classic works that are frequently cited in discussions about software architecture and microservices but are often overlooked. These are foundational papers that provide deep insights into the principles of system design:
Conway’s Law: How Do Committees Invent?* by Melvin E. Conway (1968)
Roy Thomas Fielding’s Dissertation on REST: Representational State Transfer (REST) (2000)
Both of these works have had a lasting impact on the way we think about system design, but they are often underappreciated in practical applications.