Qu’est-ce qu’un ESB et à quoi cela sert-il?

Lors d’un précédent travail, il y avait beaucoup de discussions sur “Enterprise Service Bus” (ESB). J’ai lu des parties d’un livre conceptuel à ce sujet, mais je n’ai jamais vraiment compris comment vous l’implémenteriez / l’intègreriez concrètement. Je suis familier avec SOA / files d’attente / services d’annuaire / etc. mais je ne comprends pas exactement ce qu’est un ESB.

Est-ce une chose concrète (service / serveur / courtier / etc.) Que vous ne faites que combiner toutes vos applications de manière différente, ou est-ce simplement une façon conceptuelle de concevoir des systèmes?

Toute explication ou lien vers de bons exemples serait grandement apprécié. Merci.

    C’est un concept d’assez haut niveau d’abstraction. Le concept central est que l’ESB fournit le middleware et les interfaces permettant aux entresockets de connecter leurs applications sans écrire de code.

    Cela pourrait inclure la médiation pour réconcilier des protocoles, des données et des interactions incompatibles.

    L’idée d’un bus central sur lequel tout passe est propice à des couches d’abstraction supplémentaires. L’utilisation des normes de l’indussortinge pour «twigr» d’autres applications, clients et autres dans ce bus fait en sorte qu’il est relativement facile de connecter de nouveaux services, des sources de données, des clients aux besoins disparates.

    Implémentations réelles

    En ce qui concerne les implémentations réelles, c’est le domaine des très grandes entresockets d’assistance aux entresockets. Bien qu’il s’agisse d’un mot à la mode, l’objective est un idéal qui, à un niveau réduit, peut être compris par comparaison avec Internet:

    Similitude avec internet

    Un grand bus de communication avec des utilisations et des données très différentes, mais tous exécutant des protocoles standardisés.

    On peut en effet écrire un connecteur HTTP vers FTP qui permettrait aux navigateurs d’accéder aux sites FTP sans invoquer un client FTP (généralement intégré au navigateur).

    Mashups

    Les mashups démontrent une implémentation intéressante: prenez des données sur les itinéraires de bus des autorités de San Francisco, des cartes de google et des bars à sushi de yahoo avec des évaluations et exécutez une requête simple qui vous donne la barre de sushi la plus proche. prêt à voyager un peu plus loin pour un meilleur bar.

    Tous les services complètement différents, incompatibles par eux-mêmes, mais utilisant des connecteurs standard (yahoo pipes, par exemple), ils peuvent être rassemblés dans un ensemble cohérent et utile.

    -Adam

    Clause de non-responsabilité: Je travaille pour IBM et je consulte WebSphere ESB, un produit IBM conçu pour créer des ESB. Ce qui suit sont mes opinions et ne reflètent pas nécessairement la position d’IBM.

    Malheureusement, un ESB est différent pour différentes personnes.

    Pour moi, un ESB est une technologie que vous pouvez insérer dans une architecture SOA (Service-Oriented Architecture), ce qui vous permet de connecter des systèmes disparates. Il effectue souvent les fonctions de transformation de protocole, de modification de message, de routage, de journalisation, en tant que passerelle de sécurité, etc. Par exemple, vous pouvez utiliser un ESB pour exposer un service auparavant uniquement disponible en tant que service Web en tant que service JMS.

    À cet égard, les implémentations ESB (ou, plus précisément, les logiciels vendus pour construire des ESB avec lesquels je consulte) sont souvent technologiquement similaires à ce qu’on appelait autrefois un courtier de messagerie ou de file d’attente, bien que le but soit quelque peu différent. , car (comme les acronymes l’impliquent) il est orienté autour des services plutôt que de déplacer des messages d’un endroit à un autre. L’importance de la distinction technologique est une question d’opinion.

    Mon expérience avec ESB commercial est une technologie exagérée et coûteuse qui crée autant de problèmes qu’elle résout. L’ESB établira un lien entre les nouveaux systèmes et les anciens systèmes, les messages circuleront sur le bus et tout sera en mesure de communiquer avec tout le rest de manière transparente. Ajoutez de la résilience, de l’orchestration et vous disposez d’un logiciel d’application très puissant.

    Le problème vient quand vous essayez de les utiliser pour de vrai, la surcharge de l’écriture pour le bus, la création des structures de messages et ainsi de suite peut surpasser les avantages. En tant qu’élément à coût élevé, l’ESB est considéré comme la panacée pour tous les problèmes techniques, ce qui n’est pas le cas, trop de temps passé sur le bus et non sur les applications / données connectées. Il arrive souvent que de multiples normes concurrentes se battent pour la suprématie dans la même organisation, ce qui conduit aux silos classiques dominés par la technologie que ces systèmes devraient en fait résoudre.

    IMHO il est de loin préférable d’utiliser créer un petit nombre d’interfaces spécifiques, en utilisant généralement des services Web entre uniquement les systèmes qui en ont besoin.

    C’est fondamentalement une façon conceptuelle de concevoir un système – les éditeurs de logiciels essaient de vous vendre davantage en restant fidèle à l’autocollant «ESB» et aux gestionnaires, car un ESB semble bien d’un «niveau supérieur».

    Un ESB est essentiellement un MOM (middleware orienté message) avec un modèle de données et une gestion de la définition de structure supplémentaires. Vous avez une définition de données commune pour toutes les applications et tous les adaptateurs de ce bus (peut-être XML avec un XSD partagé). Tout ce qui se connecte DOIT envoyer ses informations en respectant cette définition de données. L’ESB prend en charge le chargement, le partage et la gestion des versions de cette définition de données commune. Lorsque vous connectez un nouveau composant à un ESB, vous pouvez vous attendre à plus de compatibilité lorsque vous le connectez à un MOM. Chaque composant de ce bus est traité conceptuellement comme une «ressource» – il existe donc une abstraction supplémentaire pour séparer l’expéditeur du récepteur.

    Exemple: supposons que vous souhaitiez connecter l’application A à l’application B dans un middleware standard orienté message, prenons JMS. Vous parlez à vos collègues travaillant sur l’application B, convenez d’un sujet, d’un type de message et de champs et envoyez-le (pseudo code): sendJms (“TRADE.MSFT”, {MapMessage trader = “pete” price = 101.4 vol = 100})

    Si vous faites la même chose dans une architecture orientée services, vous devez

    1. installer un logiciel supplémentaire
    2. apprendre beaucoup de nouveaux concepts
    3. définir votre nouveau composant Java dans l’interface d’administration de l’ESB
    4. implémenter des interfaces contrôlées par l’ESB
    5. sendJms (getDestination (), {MapMessage trader = “pete” prix = 101,4 vol = 100}) – notez que la destination est injectée depuis l’ESB

    La première fois, c’est probablement un peu pénible, mais je suppose que vous pouvez vous y habituer, tout comme vous pouvez vous habituer aux EJB 😉

    On pourrait dire qu’un système MOM est «non typé» (structure dynamic) alors qu’un ESB est «typé» (structure statique). Les compromis entre messagerie brute et ESB sont similaires aux autres choix non typés / typés:

    • REST vs. SOAP
    • XML non validé contre XML validé avec un XSD
    • Groovy vs. Java
    • langage interprété vs. langage compilé

    Pour les projets plus petits, il est intéressant de hacher rapidement les fonctionnalités (par exemple, le code Groovy), mais pour les projets plus importants, il est conseillé d’avoir un débogueur (Java par exemple). projet.

    Donc, si votre projet souffre d’un trop grand nombre de personnes qui brisent le système en enregistrant des modifications non validées, passez à davantage de structure (ESB au lieu de MOM). Si vos projets ne sont pas suffisamment rapides, choisissez la solution plus simple et sans type de texte. Si c’est les deux – demandez un consultant (je plaisante 😉

    Eh bien, cela dépend de qui vous demandez … Beaucoup diraient que c’est un morceau de “middleware” qui relie différents morceaux de “logique métier” pour éliminer le codage de la messagerie entre ces modules. Je pense que c’est une définition assez générale, mais je suis sûr que vous êtes déjà arrivé via Wikipedia et ainsi de suite.

    Ceux qui voudraient que le grand ESB sauve le monde le voient le plus souvent présenté, un hub pour tout faire. La plupart des implémentations ESB s’efforcent d’encapsuler toutes les tâches répétitives que nous voyons dans les logiciels d’entreprise. Cela signifie que la plupart des ESB prennent en charge le transfert de données, la sécurité, la journalisation, la traduction de protocoles, les systèmes d’événement, l’exposition d’api via des services Web, etc.

    Je pense que c’est aussi clair que possible. J’espère que ça aide.

    Jetez un oeil à ma présentation ” Spoiled for Choice – Comment choisir le bon ESB “.

    J’explique quand utiliser un ESB, Integration Suite ou juste un framework d’intégration (tel qu’Apache Camel). Je discute également des différences entre les ESB Open Source et propriétaires.

    Au-delà d’une définition standard, vous pouvez obtenir de Wikipedia . Je trouve que c’est un excellent outil pour connecter un ensemble de systèmes existants sur plusieurs plates-formes et technologies. C’est également un bon outil pour créer des workflows dissortingbués et des systèmes de gestion d’état (tels que le grand livre général).

    Cependant, il est plutôt coûteux, complexe et peu commode à entretenir et à étendre, ce qui en fait un choix technologique médiocre en tant qu’outil à usage général pour la mise à l’échelle de vos applications.