System Design: Enterprise Service Bus (ESB)

An Enterprise Service Bus (ESB) is an architectural pattern whereby a centralized software component performs integrations between applications. It performs transformations of data models, handles connectivity, performs message routing, converts communication protocols, and potentially manages the composition of multiple requests. The ESB can make these integrations and transformations available as a service interface for reuse by new applications.

enterprise-service-bus

Advantages

In theory, a centralized ESB offers the potential to standardize and dramatically simplify communication, messaging, and integration between services across the enterprise. Here are some advantages of using an ESB:

  • Improved developer productivity: Enables developers to incorporate new technologies into one part of an application without touching the rest of the application.
  • Simpler, more cost-effective scalability: Components can be scaled independently of others.
  • Greater resilience: Failure of one component does not impact the others, and each microservice can adhere to its own availability requirements without risking the availability of other components in the system.

Disadvantages

While ESBs were deployed successfully in many organizations, in many other organizations the ESB came to be seen as a bottleneck. Here are some disadvantages of using an ESB:

  • Making changes or enhancements to one integration could destabilize others who use that same integration.
  • A single point of failure can bring down all communications.
  • Updates to the ESB often impact existing integrations, so there is significant testing required to perform any update.
  • ESB is centrally managed which makes cross-team collaboration challenging.
  • High configuration and maintenance complexity.

Examples

Below are some widely used Enterprise Service Bus (ESB) technologies:

This article is part of my open source System Design Course available on Github.