Don’t Build a Distributed Monolith - Jonathan "J." Tower - NDC London 2023

Learn the benefits and drawbacks of distributed monoliths, microservices, and modular monoliths in this NDC London 2023 talk, exploring the trade-offs between scalability, performance, and complexity in software architecture.

Key takeaways
  • Don’t build a distributed monolith, as they can have significant overhead and scalability issues.
  • Microservices are inherently high availability, but a monolith can also be scalable.
  • A distributed monolith is a mix of distributed and monolithic approaches, often with a central data store.
  • Modular monoliths are a way to keep the benefits of a monolith while still allowing for some level of scalability.
  • A microservice is a single service with a well-defined interface, which can be scaled and updated independently.
  • There are four main problems with monoliths: understanding the data store, lowering the waterline, reducing coupling, and handling growth.
  • Monoliths can be essentially distributed monoliths, with multiple areas of the application being separate modules.
  • Microservices and distributed monoliths can both have benefits and drawbacks.
  • Scalability and performance can be better in a well-architected microservice, but in some cases, a monolith may be a better fit.
  • Modular monoliths can add complexity, but can also provide some benefits.
  • Domain-driven design and distributed transactional complexity can be challenges with microservices.
  • Event-driven architecture can be a good fit for microservices, but adding complexity.
  • Most applications do not need microservices and can be fine as a monolith.
  • Microservices are a solution that may not fit every problem, and monoliths can be a good fit in some cases.
  • Microservices require a good level of technical expertise, domain knowledge, and understanding of the codebase.
  • There are various tools and technologies that can help with microservices, including load balancing, API gateways, and event buses.
  • Monoliths can be a good fit for some applications, especially those with less complex requirements or smaller scale.
  • There are many different patterns and approaches to building software, and what is best will depend on the specific requirements and needs of the application.