What's Scalable Modeling?
This page introduces a modeling technique for designing scalable systems. Any system aiming for growth should be designed with scalability in mind, as early consideration of scalability is often essential for long-term success. Scalable Modeling helps to design in a way that enables future growth, even if you're not scaling yet.
With Scalable Modeling, you can embed scalability into your system design from the beginning. Influenced by Clean Architecture, Event-Driven Architecture (EDA), Domain-Driven Design (DDD), EventStorming, and CQRS, this approach remains flexible and avoids rigid adherence to any one methodology. That’s why this event-centric architectural approach has a distinct name: CEQS – Command-Event-Query Separation.
Your implementation doesn’t need to scale from day one. But when the model is designed with scalability in mind and follows CEQS, the system can evolve, adapting to rising demands for resilience and responsiveness, so that growth becomes an advantage rather than a challenge.
Justification for the red arrows in sections: Queries & Time Travel.
High Level Overview
There are three opportunities and three challenges in scalability and understanding them takes you far already. Combining the opportunities & challenges with an upfront and iterative modeling technique provides a solid foundations for modeling reliable and scalable systems.
Three Opportunities
- Decomposition - scale by splitting different things
- Duplication - scale by cloning
- Partition - scale by splitting similar things
Immutability (of messages/events) plays key role in each aspect.
Software Engineering Flow
Software is ultimately a model, a conceptual solution that, while invisible, solves real-world challenges. In software engineering, three aspects are critical:
- Understanding: WHY the software is needed and by who (understanding the purpose and the problem it should address).
- Designing: WHAT is the conceptual model for the solution.
- Developing: HOW the solution is implemented.
Scalable Modeling serves as an opinionated bridge from WHY to HOW, with a primary focus on the WHAT.
Iteration is naturally much cheaper when it is done on the conceptual model rather than on the implementation level.
Three Challenges
- Deduplication - as exactly-once delivery is impossible in distributed systems
- Tailoring Consistency - as strong consistency is the wrong default
- Time Travel - as distribution causes eventual consistency
Summary of Components
License For Using the Pictures
See License.