Enterprise Service Bus
Enterprise Service Bus (ESB in short) is an architectural pattern which is used to integrate heterogeneous systems by using service-oriented architecture. The systems could be different in various aspects as listed below:
- Built on different technology stacks, like Java, .Net, PHP etc.
- Support different communication protocols like SOAP, REST and FTP etc.
- Support different message formats like XML, JSON etc.
- Support different mode of communication like synchronous, asynchronous.
An ESB is a centralized hub where we can integrate various service end points, implement message transformations, apply security rules etc.
- Loose coupling of systems and ease of integration irrespective of how the systems are built. Let’s say we have systems A, B, C, D which are all built using different technology stack and which support different message formats. Now, if each of these systems has to communicate with each other, we would need 6 end points in total, if we establish point to point communication.
Also, this approach would pose the following challenges:
- Implement message transformations in every individual system
- Every system should know the location of every other system
- Every system has to deal with interoperability issues
- Every system may have to implement different security mechanisms, matching that of the destination system
If we use an ESB (as in the above diagram) and connect all these systems to the ESB, then we can address all the above challenges. Each system needs to communicate only with the ESB and be ignorant of the destination system’s location, message formats etc. The message format transformation/security can be implemented on the ESB. The advantage of this approach is that we can add more systems to the mix, without much effort. Also any change to the service interface could be addressed at the ESB layer.
- Use of a centralized hub like ESB acts as a single point of failure and might bring down the entire eco system. The ESB scalability and its support for distributed computing are very crucial and will have a major impact on the overall scalability of the entire system.
- Development on ESB requires specific skills like XML, XSLT, and XQUERY and is generally managed by a single team. This might act like a bottleneck, especially if several teams are dependent on one single team which works on ESB. Differing project priorities might cause potential clashes due lack of bandwidth. This is more of an organizational challenge.
Mule ESB is a very popular service bus; similarly other vendors like Oracle, IBM have their own service bus implementations.