Software Architecture · Cluster
Architectural Styles
Layered, event-driven, and plugin designs.
- 01 Layered Architecture and the Cost of Strict Layer Isolation How an allowed-to-use relation constrains a layered system to one dependency direction, what sink layers permit, and what every pass-through boundary charges in mapping code.
- 02 Ports and Adapters and the Direction of the Dependency Arrow Why a hexagonal boundary is an interface owned by the application core rather than by the framework, and how driving and driven adapters differ in who initiates the call.
- 03 Event Notification and Event-Carried State Transfer Compared Two events can carry the same name and different obligations: one says a fact changed and leaves the state behind, the other carries the state. The choice sets coupling, ordering needs, and deduplication cost.
- 04 Microkernel Architecture and the Stability of Plugin Extension Points A plugin system is a contract that outlives the code on both sides of it. Extension-point shape, discovery, lifecycle ordering, and isolation determine what can change without breaking installed extensions.
- 05 Pipes and Filters and the Contract Between Stages A filter knows its input and its output and nothing else. Record framing, bounded buffering, end-of-stream propagation, and error policy are what make that independence real or nominal.
- 06 CQRS and the Consistency Window Between Writes and Read Models Separating the write model from query models buys shape and contention relief, and pays for it with a lag the user can observe. Checkpoints, version tokens, and read-your-writes routing decide whether that lag is tolerable.
- 07 Event Sourcing and the Append-Only Log as System of Record Storing the sequence of facts instead of the current state changes what a write has to prove, how a snapshot is defined, and why an event schema cannot be changed once it has been written.
- 08 Actor Mailboxes, Supervision, and the Limits of Location Transparency An actor owns its state and processes one message at a time, which removes data races but not unbounded queues. How supervision trees, delivery guarantees, and selective receive shape real behaviour.
- 09 Space-Based Architecture and the In-Memory Data Grid Removing the shared database removes the contention and makes memory the capacity limit. Replication windows, eviction, and write-behind persistence decide how much data loss the style concedes.
- 10 Serverless Execution and the Per-Event Invocation Model When the unit of deployment is a single event handler, lifecycle, concurrency, and retries stop being operational details and become the architecture. What the invocation model gives and what it takes away.