Service-Oriented Architecture (SOA) is an architectural style that supports service-orientation.
Service-orientation is a design paradigm that creates self contained and reusable services that are composed to form the overall system.
A service is a logical representation of a repeatable business activity (e.g., order processing, check customer credit, etc.) and:
- Is self-contained and can evolve independently of other services.
- May be composed of other services.
- Is a “black box” to consumers of the service.
- Are not always distributed. Services can exist in the same process.
One of the biggest misconceptions with SOA is that a service is an endpoint communicating to other services using a network protocol. While this is an option, services can also be composed in-process alongside each other and you should only distribute services when the situation calls for it. SOA principles apply equally to in-process and out of process compositions.
Because of these misconceptions, attempts at an SOA approach sometimes result in a system composed of too fine grained of services (Nano Services anti-pattern) and due to excessive network boundaries suffer from increased latency.
SOA Principles include