Application Design Patterns that scale service oriented architectures (SOA)

 Quoting Wikipedia,

In software engineeringservice-oriented architecture (SOA) is an architectural style that supports service orientation.[1] By consequence, it is as well applied in the field of software design where services are provided to the other components by application components, through a communication protocol over a network


SOA is now being widely adopted across the software industry. This post is not about what SOA is and why is it useful. We will discuss various common application design patterns that must be followed to build scalable and resilient micro-services based architectures, irrespective of what language the services are programmed in.


Bulkhead




Bulkhead allows you to isolate parts of your application so that regression in one doesn't affects the other. For example, if your service makes API calls to a set of backend services using a thread pool, increase in latencies of one of the dependent service might exhaust the thread pool, eventually causing degradation of the complete service and cascading cross service failures. 

To resolve this, you would define dedicated thread pools with a single pool responsible for managing connections to a specific backend service. In this way, the increase in latency will only cause that specific thread pool to exhaust and not let the complete service to go down.

For more complete discussion on Bulkhead, refer [0]


Circuit Breaker


Queue Based Load Levelling




Retry



Rate Limiting and Throttling


No comments:

Post a Comment