Traditional assumptions about the way we build systems are challenged today; one of them is that a large system must have a single environment, often with a one-to-one mapping between a project’s scope and the system built, resulting in 1 project = 1 system, Stefan Tilkov explains in a presentation looking into characteristics of systems, applications and microservices.
Tilkov, co-founder and principal consultant at innoQ, sees the idea of splitting large systems into smaller applications appearing everywhere and for him the key reason for this is Isolation; when introducing a boundary between different parts in a large system it becomes harder to couple and communicate between parts that should be independent. Other advantages he sees are the possibility of individually scaling specific parts depending on their load and that decisions can be localized allowing for a team to make their own choices as long as they are kept within the boundary.
Looking into ways of building a logical system made up of smaller parts Tilkov compares three styles:
- Microservices are small, each running in their own process, using lightweight communication mechanisms and built around business capabilities.
- Applications (Apps) are larger but still small, separate, runnable processes, using a share-nothing model that share many characteristics with microservices..
- Self-Contained System (SCS) was the name Tilkov and his colleagues came up with trying to avoid the generic System for naming a more specific set of rules. A SCS is a significantly larger autonomous web application including data and logic, owned by one team, using no synchronous remote calls, optionally with a service API.
Comparing some figures and characteristics of these three styles, Tilkov emphasizes that there is still no consensus what the right style is, instead his intention is to show the breadth and options available:
SCS | Apps | Microservice | |
---|---|---|---|
Size (kLoC) | 1-50 | 0.5 - 10 | 0.1 - ? |
State | Self-contained | External | Self-contained |
# per Logical system | 5 - 25 | >50 | >100 |
Communication between units | No, (if possible) | ? | Yes |
User Interface, UI | Included | Included | External (?) |
UI Integration | Yes (web-based) | ? | ? |
The most interesting parameter for Tilkov is the number of parts building a logical system because it’s an indication of the first level of decomposition of a large system. Self-contained system is what he is advocating, noting that although small services are simple many of them together creates a higher degree of complexity in other layers, but he emphasizes that he’s not trying to sell one specific model but highlighting the discussions going on at various levels.