# Enterprise service bus

Een enterprise service bus (ESB) is een architecturale softwareconstructie (pattern) waarmee de communicatie tussen de afnemers van diensten (“service”) en aanbieders hiervan, vereenvoudigd wordt. De ESB biedt hiertoe aan de kant van de aanvrager een met de aanvrager afgesproken interface aan, dit kan een webservice zijn, maar bijvoorbeeld ook een SMTP (e-mail) interface. Aan de kant van de aanbieder zal de ESB via de interface die met de aanbieder is afgesproken communiceren. Zo kan het dus gebeuren dat een aanvrager van een dienst op een compleet andere wijze met de ESB communiceert dan de ESB met de aanbieder. Onderstaande figuur geeft dit schematisch weer.

## Werking

Door de toevoeging van de ESB-component binnen een software-architectuur kan de wijze waarop service-aanvragers communiceren met service-aanbieders gestandaardiseerd worden, immers is er alleen een afspraak tussen de ESB en de aanvrager of aanvragers die van dezelfde service gebruikmaken. Het is de taak van de ESB om de informatie die binnenkomt bij een aanvraag en daarbij behorende informatie op de juiste wijze te vertalen (transformeren) naar het formaat dat door de serviceaanbieder verwacht wordt.
De ESB-component is verantwoordelijk voor het op de juiste plaats afleveren van een aanvraag, dus bij de juiste aanbieder of wellicht aanbieders van services. Binnen de afhandeling van deze aanvragen zorgt de ESB verder voor de afhandeling van fouten en het eventueel prioriteren van de aanvragen met andere woorden, bepaalt welke aanvraag het eerst dient te worden afgehandeld, etc. Dit geheel van aanvraag afhandelen en de controles die hierbij komen kijken wordt aangeduid als orkestratie van serviceaanvragen.
Een volgend aspect van een ESB-component is de beveiliging van aanvragen en de gegevens die hiermee gemoeid zijn. Hierbij gaat het dus naast het beveiligen van het communicatie kanaal (bv. een beveiligde webservice via HTTPS) ook om wie (welke gebruiker of rol) mag een service aanvragen.
Een laatste veel voorkomende taak van een ESB-component is het monitoren van de aanvragen die gedaan worden en hiervan statistische gegevens bijhouden, zoals hoe vaak een service wordt aangeroepen, hoe vaak dit fout of juist goed gaat en hoelang een aanvraag duurt. Op basis hiervan kan later gerapporteerd worden, maar er kan ook direct gereageerd worden indien bijvoorbeeld binnen de orkestratie van een aanvraag een service aangeroepen wordt die een foutafhandeling uitvoert. Binnen monitoring valt ook het controleren op vooraf gestelde SLA’s voor een service, die in de ESB gedefinieerd zijn, met acties indien een SLA niet gehaald wordt. In het kort de kenmerken op een rij:
* Een ESB “bemiddelt” tussen serviceaanvragers en serviceaanbieders
* Een ESB zorgt voor standaardisatie van de communicatie met serviceaanvragers
* Een ESB handelt de transformatie van gegevens tussen aanvrager en aanbieder af
* Een ESB orkestreert de afhandeling van aanvragen en het doorsturen naar aanbieders
* Een ESB monitort de serviceaanvragen en rapporteert over het gebruik van aanvragen
* Een ESB zorgt voor beveiliging van het transport.

## Waarom een ESB?

Hier volgt een beknopte opsomming van de redenen waarom een ESB gebruikt zou kunnen worden en de voordelen die het oplevert.
* Compleet loskoppelen of gedeeltelijk ontkoppelen (loosely coupled) van serviceaanbieders en serviceaanvragers. → Aanvragers communiceren met de ESB en niet direct met de aanbieder.
* Versimpelen en standaardiseren van interfaces tussen aanbieders en aanvragers → één generieke manier van communiceren met de ESB, de ESB zorgt voor communicatie met de onderliggende systemen.
* Het stimuleren van hergebruik → doordat services beschikbaar zijn op een centraal niveau (binnen de ESB) en gemakkelijk toegankelijk, kunnen ze sneller worden toegepast in andere systemen.
* Centrale en generieke manier van servicemonitoring → binnen de ESB kunnen services gemonitord worden en gecontroleerd op afgesproken SLA’s op een generieke manier, de monitoring hoeft niet meer bij iedere serviceaanbieder te worden ingericht, maar gebeurt centraal in de ESB.
* Reduceren van “time-to-market” door hergebruik en minder implementatietijd → hierdoor kan uw organisatie (business) sneller inspringen op veranderingen in de organisatie of omgeving.
Bovenstaande figuur verduidelijkt nog eens de punten 1 en 2 van de lijst hierboven, nl: zonder gebruik te maken van een ESB hebben aanvragers en aanbieders zogenaamde “point-to-point” verbindingen en lopen deze kriskras door de organisatie. Door de toepassing van een ESB hebben aanvragers één gestandaardiseerde interface met de ESB en zullen aanvragen via de ESB afgehandeld worden.
Concluderend kan worden gezegd dat een ESB onmisbaar is als “enabler” in een organisatie waar een Service Oriented Architecture ontwikkeld wordt. De ESB zorgt voor de juiste infrastructuur waarop op hoger niveau, vanuit de functionele gedachte (business) naar processen wordt gekeken en hoe deze te verbeteren zijn binnen een organisatie.