The purpose of this post is just for wrapping up the best (at least above the mediocre ones) resources that i found on the internet (websites, blogs, books etc.). And i put effort into splitting them into parts according to the specific subjects related to scalability issues and mostly Microservice Architecture principles. I will be updating this post as much as possible.
Understanding the Fundamentals and More
- http://www.martinfowler.com/articles/microservices.html ****
- http://microservices.io/ (this website includes the architectural implementation details.) ****
- https://www.nginx.com/blog/introduction-to-microservices/ ***
- Some patterns on microservices; http://blog.arungupta.me/microservice-design-patterns/
- https://www.nginx.com/blog/building-microservices-inter-process-communication/ Building Microservices: Inter-Process Communication in a Microservices Architecture
- Netflix Service Discovery&Registration Component; Eureka http://techblog.netflix.com/2012/09/eureka.html
Tools & Architectural Implementation
- You can find everything you might need along your journey. https://github.com/mfornos/awesome-microservices
- Understanding Docker : https://www.docker.com/products/docker#/mac
For Java & Spring Folk
- This article might be a good tutorial on how to set up a microservice architecture using Spring Boot, Spring Cloud, Docker, and some of Netflix's open source tools https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do
Useful Readings on Scalability
- Follow absolutely: http://highscalability.com/
- Reactive Microservices Architecture by Jonas Boner (mini-free ebook only 54 pages, i strongly suggest you to read it.)
- Building Microservices by Sam Newman.
- Developing Reactive Microservices by Markus Eisele, Enterprise Advocate, Lightbend, Inc.
- Domain-Driven Design: Tackling Complexity in the Heart of Software (It is strongly suggested one in the ecosystem of Microservices to understand domain based thinking)
- Patterns of Enterprise Application Architecture by Martin Fowler
* Books are not ordered by the importance.
Very Useful Resources Given in Jonas Boner's Book, Reactive Microservices Architecture
For an insightful discussion on the problems caused by a mutable state, see John Backus’ classic Turing Award Lecture “Can Programming Be Liberated from the von Neumann Style?
Neil Gunter’s Universal Scalability Law is an essential tool in understanding the effects of contention and coordination in concurrent and distributed systems.
For a discussion on the use of bulkheads in ship construction, see the Wikipedia page https://en.wikipedia.org/wiki/Bulkhead_(partition).
For an in-depth analysis of what made Titanic sink see the article “Causes and Effects of the Rapid Sinking of the Titanic.”
Process (service) supervision is a construct for managing failure used in Actor languages (like Erlang) and libraries (like Akka). Supervisor hierarchies is a pattern where the processes (or actors/services) are organized in a hierarchical fashion where the parent process is supervising its subordinates. For a detailed discussion on this pattern see “Supervision and Monitoring.”
Our definition of a promise is taken from the chapter “Promise Theory” from Thinking in Promises by Mark Burgess (O’Reilly), which is a very helpful tool in modeling and understanding reality in decentralized and collaborative systems. It shows us that by letting go and embracing uncertainty we get on the path towards greater certainty.
The Unix philosophy is captured really well in the classic book The Art of Unix Programming by Eric Steven Raymond (Pearson Education, Inc.).
For an in-depth discussion on the Single Responsibility Principle see Robert C. Martin’s website “The Principles of Object Oriented Design.”
See Jay Kreps’ epic article “The Log: What every software engineer should know about real-time data’s unifying abstraction.”
Martin Fowler has done a couple of good write-ups on Event Sourcing and CQRS.
The quote is taken from Pat Helland’s insightful paper “Immutability Changes Everything.”
As brilliantly explained by Joel Spolsky in his classic piece “The Law of Leaky Abstractions.”
The fallacies of RPC has not been better explained than in Steve Vinoski’s “Convenience over Correctness.”
We are using Tyler Akidau’s definition of streaming, “A type of data processing engine that is designed with infinite data sets in mind” from his article “The world beyond batch: Streaming 101.”
Location Transparency is an extremely important but very often ignored and under-appreciated principle. The best definition of it can be found in the glossary of the Reactive Manifesto — which also puts it in context: http://www.reactivemanifesto.org/glossary#Location-Transparency.