Building Evolutionary Architectures
The book brings the idea that, like the code, the architecture can be changed and it is inevitable. Then it develops the learning to live and work with that reality, making the architecture area aware of the organic growth.
One of the keys to building evolutionary architectures lies in determining natural component granularity and coupling between components to fit the capabilities they want to support via the software architecture.
The three evolutionary criteria mention in the book are:
- Incremental change: continuous delivery practices and modular architecture allowing small modifications without breaking the application.
- Fitness functions: quantifiable function used to summarise how close a given design solution is to achieving the set aims.
- Appropriate coupling: independence of service
Evolutionary point of view in the Architecture Style
- Layered: Monolith architecture with the advantage of isolation and separation of concerns, then any change in one layer will not affect another layer. Thinking in terms of evolving system it shows difficulties in terms of incremental changes. The changes that cross the layers can be a big challenge. However, the isolation is a positive point in terms of guided change with fitness functions. This architecture have advantages in terms of evolving system
- Microkernel: Monolith architecture style where there are the core and external parts, plugins. Considering the Incremental change characteristic, it is a good choice if the plugins are independent and can evolve. The same way, the isolation between the core and plugin is a advantage cosidering the guided change with fitness functions Characteristic. In terms of Appropriate coupling it can be desadvantage if the plugins are dependents.
- Event-Driven Architecture (EDA): Distributed architecture style that uses events to communication. It can be using brokers, without a central element, and mediators, with a central element. Both cases have advantages in the three characteristics. However, the mediator has facilities related to tests and to identifies causes of errors due to the presence of a coordinator. The broker has more advantages in terms of Approriate coupling for having more independent components.
- Service-Oriented Architecture (SOA): Distributed architecture style that use a service bus (ESB) as coordinator. It doesn't has good points when we talk about the three point used to validate the architecture ( incremental change, guided change and appropriate coupling). Any changes need a good coordination and the tests are a challenge.
- Service-Based Architecture (SBA): It is similar to microservice but with less granularity. In terms of incremental change it has good points like microservices because most part or changes happens by domain. The characteristic guided change with fitness functions and Appropriate coupling it has a negative point comparing with microservice.
- Microservice: distributed architecture designed around some directions as Continuous Delivery + logical partitioning, modeled around business domain, isolate features. It has positive points in all aspects of a evolutionary architecture.