Software Engineering - Architecture and Microservices Books
This book collection deals with all things architecture, from design to implementation, with a focus on microservices.
Microservices, what a topic! Everybody seems to be developing microservices, but if you ask a hundred people to describe their approach you will most likely get as many deviating answers. The reasons are many, but it all boils down to proper education.
Blog posts and YouTube videos can be valuable sources of information, but I’ve found the signal-to-noise ratio to be quite low so I don’t spend much of my time there. On the other hand, I’ve realized that peer-reviewed work that has gone through a publishing process has a much better chance of offering a high return on investment.
Having survived a few years of designing, developing, shipping and operating numerous cloud-native microservices at scale makes me truly appreciate the books that have helped me stepping up my engineering game. I’m confident that this collection will help you get your architecture skills to the next level.
Clean Architecture: A Craftsman's Guide to Software Structure and Design
Uncle Bob strikes again! I had been waiting for this book for about a year, and had set high expectation. It ended up exceeding my expectations and providing value in areas of technical architecture I was completely oblivious about.
Discover what architecture is really about, and most importantly what it is not about. Learn the difference between architecturally critical elements and mere details. Get to know how important are layers and boundaries, and how to successfully define them. Brush up on numerous design principles for tackling function, component separation, and data management. Finally, become familiar with common architectural failures of the Industry, and figure out how prevent or face them.
Whether you are tasked with designing a new architecture or executing a design that someone else came up with, Clean Architecture is where you want to start from. It’s a pleasant read that I was able to finish cover to cover within just a few days. If you haven’t already, also check out the the other two book of the series, Clean Code and The Clean Coder (not prerequisites for reading Clean Architecture).
|Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems|
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
This is an extremely valuable read, not only for architects, but also for those who work with microservices or any distributed application that revolves around data.
Today, data is in the heart of most challenges related to systems design. Architects have plenty of data-centric challenges to tackle, including scalability, consistency, reliability, efficiency, and maintainability. On top of that there are numerous platforms and tools that can be leveraged to achieve each project’s design goals, including relational / document / graph databases, stream / batch processors, web APIs and message brokers.
Martin Kleppmann not only helps you make sense of all the buzzwords, but also guides you through this diverse landscape by doing deep dives of how each piece of technology works under the hood, what are their pros and cons, and under which circumstances it is a good idea to use them. Apart from the theory, the book comes with plenty of practical advice you can start leveraging on your day to day work right away.
As of today, this is the most well-written, comprehensive and modern book about working with data. It’s destined to become a classic.
Microservice Patterns: With examples in Java
This has been one of my favorite reads, and by far the best book about microservices out there. Chris Richardson has done a fantastic job combining theory with practical examples, while covering a wide range of patterns for Microservices from conception to execution.
Although the code examples are in Java, they can easily be mapped to whatever stack you happen to be working with. As a matter of fact I’ve already utilized many of the illustrated patterns in .NET Core.
If you can only pick one book about microservices, this is it.
.NET Microservices: Architecture for Containerized .NET Applications
Despite being targeted to .NET Core, I found the theory in this book to be exceptionally well presented and mostly independent of the stack.
Now if you happen to work with .NET Core and/or the Azure cloud platform, this is a must-read as you have the additional benefit of using the code examples directly and learn new things about the platform.
It is also free to download, so you can easily skim through it and verify whether the content looks valuable to you.
Building Microservices: Designing Fine-Grained Systems
Sam Newman has put together an excellent guide which is now considered a classic, explaining all the ins and outs of moving from monolithic systems to smaller, fine-grained and self-contained services.
I highly recommend this book, especially for those who haven’t worked with microservices before or have just gotten a taste and would like to see the bigger picture.
It is a relatively short book, and I managed to finish it in less than a week. It doesn’t focus on code but rather makes the case about the new set of practices, challenges and plenty of potential pitfalls that come with this given architectural style.
The Tao of Microservices
This book presents a fresh approach on architecting microservices-based systems, in a succinct, honest and concise way that cuts right to the chase.
The detailed case study of the nodezoo.com system, including source code and documentation and accompanied by many great ideas one can utilize in the real world, makes this book stand out and worth exploring, even if you have already read every other book in the topic.
Microservices: Flexible Software Architecture
This was actually the first book I read about microservices, a couple of years ago.
Although a bit dated now, it still includes a ton of useful information, and can be proven quite valuable especially for anyone who’s interested in working with the AWS cloud platform and the Netflix Java stack.
Domain-Driven Design: Tackling Complexity in the Heart of Software
Domain-Driven Design has been proven to be an effective approach for splitting a problem domain into smaller parts and tackling those parts independently. It doesn’t just boost our problem solving abilities, but also helps us better match the mental model of a problem domain to the design of our software.
Although the book was published long before microservices were a thing, it turns out that the DDD methodology is a natural fit for designing microservices. Hence, this is an essential read for anyone who works with microservices-based systems or intends to do so.
Building Evolutionary Architectures
We conceived software as a vehicle for making the behavior of computers and machines easy to change. By producing software that’s hard to change we essentially beat the purpose of its very existence.
This book is a collection of patterns, anti-patterns, and advice, all emerged from years of Industry experience. It can help you not just to guide the evolution of software systems, but also contribute to their longevity.
Microservices Development on Azure with Java [Video Course]
Time for some shameless self-promotion. If you enjoy video courses I have just the thing for you.
I published this course with the intend to make it easier for people to get started with microservices, and demonstrate a number of hands-on examples that put many of the underlying concepts into perspective.
Although the code examples are in Java, you can easily map them to another stack you might be confident in (eg. .NET Core). The focus is primarily on the design of microservices, and also on the Azure cloud platform, which I honestly find extremely valuable.