An Enterprise Service Bus (ESB) is not an architecture or architecture style as often defined. It is a component that fit in an architecture or architecture style like SOA (Services Oriented Architecture) or Microservices. Yes it’s a component but a powerful component that can transforme easily and quickly the business when it’s well understood and well used.
An ESB or what ever called in some companies, like Enterprise Application Integration (EAI is the ancestor of the ESB), Middleware (it does the same or less than ESB), enables companies to build almost any type of architecture.
At the beginning the main idea about the ESB is that allows organizations to integrate different applications by enabling communication between them and the ESB instead between applications directly. This decouples systems from each other and allows them to communicate without dependency on other systems.
Why use an ESB?
So it’s very clear now that the concept of ESB come out of the need to integrate applications avoiding point-to-point integration. As reminder about point-to-point communication, it often refers to a "spaghetti architecture" and its problems and limitations.
But ESB is more than an issue of integration.
Using an ESB can improve a lot of in term of increasing agility of companies systems by reducing time to market when creating or changing an offers or services. This is done by implementing easily a pluggable system that scales well.
In addition an ESB enable companies to :
- Leverage the existing systems and legacy ones and expose them to other applications.
- Eliminate application silos by quickly integrating anything with everything
- Extend information and apps to employees, customers and partners anywhere
What the ESB does?
Let's take a look at what are the most common and important capabilities of an ESB :
- Orchestration: Integrating several components into a high end service. Systems involved are orchestrated to promote re-usability and manageability.
- Transformation: Data transformation between canonical data formats and specific data formats like CSV, XML or JSON.
- Transportation: Provide the flexibility to use multiple transports and protocols (HTTP, FTP, JMS, JDBC …).
- Mediation: Providing multiple interfaces for the purpose of supporting multiple versions of a service for backwards compatibility or alternatively and to allow for multiple channels to the same underlying component implementation.
- Non-functional consistency: ESB provides consistency around the way security and monitoring policies are applied. Additionally, the scalability and availability can be achieved by using multiple instances of an ESB to provide scalability and eliminate single-points-of-failure to build a highly available systems.