knowledge-base

« Back To Overview

Architecture Style: Orchestration-Driven Service-Oriented

Orchestration-Driven Service-Oriented Architecture Style Image

Description

Topology

Why It’s bad

This is a historical anti-pattern architectural style which is worth documenting as one might find these in the wild. It helps to understand historically why the emerged, why they were made, and why it made sense at that point in time. We can also draw some insights from this.

This style of service-oriented architecture appeared just as companies were becoming enterprises in the late 1990s: merging with smaller companies, growing at a breakneck pace, and requiring more sophisticated IT to accommodate this growth. Computing resources were scarce, precious, and commercial. Distributed computing had just become possible and necessary, and many companies needed the variable scalability and other beneficial characteristics.

External drivers forced architects towards distributed architects with significant constraints. OSS was not properly accepted by enterprise, OS’s and licenses were expensive. Due to the insane pricing, architects were forced to reuse anything. Reuse became the dominant philosophy in this architecture. This extensive reuse philosophy and technical partitioning results in strong coupling which made change excruciating over time.

When a team builds a system primarily around reuse, they also incur a huge amount of coupling between components. By reusing and centralizing everything, domains became bloated. A “entity-driven-design” approach emerged, where the CustomerProfile service would contains also the DrivingLicenseInfo while 9/10 the business services would not care about such information. However this DrivingLicenseInfo exposed to all other services. So the size and the technical nature of partitioning cause strong coupling across the entire architecture.

Reuse Example 1 Reuse Example 2

This architecture thought us, that a extreme focus on technical partitioning and reuse does not scale.

When To Use

Never

When NOT To Use

This always applies, do not use it.

Considerations

Characteristics

Characteristic Rating
Partitioning Type Technical
Number of quanta 1
Deployability
Elasticity ⭐⭐⭐
Evolutionary
Fault Tolerance ⭐⭐⭐
Modularity ⭐⭐⭐
Overall cost
Performance ⭐⭐
Reliability ⭐⭐
Scalability ⭐⭐⭐⭐
Simplicity
Testability

Resources

None