57 votes

Dans quels domaines les intergiciels orientés message comme AMQP sont-ils utiles ?

Quel problème les MOM (Message Oriented Middleware) résolvent-ils ? L'évolutivité ? L'intégration ?

Dans quel domaine sont-ils généralement utilisés et dans quels domaines sont-ils généralement pas utilisé ?

Par exemple, disons que Google utilise une telle solution pour son principal moteur de recherche ou pour alimenter GMail ?

Qu'en est-il des grands sites web tels que Walmart, eBay, FedEx (plutôt une boutique Java) et buy.com (plutôt une boutique MS) ? Est-ce que MOM répond à un besoin là-bas ?

Cela a-t-il un sens lorsque vous écrivez une application Web où vous contrôlez le côté serveur et disposez d'un environnement homogène (disons des dizaines d'instances Amazon EC2 exécutant toutes Linux + JVM Java) et où les clients sont, eh bien, des navigateurs Web ?

Cela a-t-il un sens pour les applications de bureau qui doivent communiquer avec un serveur ?

Ou bien est-ce "seulement" pour les grandes entreprises où l'on a généralement un mélange heureux d'innombrables systèmes différents qui doivent communiquer d'une manière ou d'une autre ?

Je ne sais pas trop à quoi ils servent et je pense qu'avec des exemples de cas où ils sont appropriés et où ils ne le sont pas, je pourrais mieux comprendre leur utilisation.

33voto

alexis Points 1099

C'est une excellente question.

Les principales utilisations de la messagerie sont : la mise à l'échelle, le déchargement du travail, l'intégration, la surveillance, le traitement des événements, le routage, la mise en réseau, le push, la mobilité, la mise en mémoire tampon, la mise en file d'attente, le partage des tâches, les alertes, la gestion, la journalisation, le traitement par lots, la livraison de données, le pubsub, le multicast, l'audit, l'ordonnancement, ... et plus encore. En gros, tout ce dont vous avez besoin de données sans avoir à faire une demande à une base de données. (La mise en cache est une autre histoire, plus longue).

Une autre façon de voir les choses est de remarquer que de nombreuses applications ont été construites en supposant que les utilisateurs (personnes) effectueraient des actions qui seraient accomplies en exécutant une transaction sur une base de données (y compris les lectures, les écritures). Mais aujourd'hui, de nombreuses actions ne sont pas initiées par l'utilisateur. Elles sont plutôt initiées par l'application. Par exemple, "dites-moi quand le livre que je veux acheter est en stock". La meilleure façon de résoudre cette catégorie de problèmes est d'utiliser une sorte de messagerie. Que vous l'appeliez middleware, web push ou salade en temps réel n'a pas d'importance. Il s'agit toujours de messagerie.

Lorsque vous permettez aux applications d'initier ou de réagir à des événements, il est beaucoup plus facile de les faire évoluer car votre architecture peut être basée sur des composants faiblement couplés. Il est également beaucoup plus facile d'intégrer ces composants si votre messagerie est basée sur un outil stable, évolutif et utilisable, utilisant de préférence des API et des protocoles standard ouverts.

J'espère que cela vous aidera. Nous essayons de maintenir une liste de liens utiles sur la messagerie. aquí

N'hésitez pas à nous contacter si vous avez des questions ou des commentaires à ce sujet. Nous sommes très faciles à trouver.

14voto

alexis Points 1099

Pour répondre à vos questions spécifiques :

Dans quel domaine sont-ils généralement utilisés et dans quel domaine ne le sont-ils pas ?

Comme les bases de données, les systèmes de messagerie apparaissent partout.

Par exemple, disons que Google utilise une telle solution pour son principal moteur de recherche ou pour alimenter GMail ?

Google utilise beaucoup de technologies maison, mais un grand nombre de ses contributions open source et de cas d'utilisation connus suggèrent que la messagerie est (ou devrait être) au cœur de certains des principaux services.

Qu'en est-il des grands sites web tels que Walmart, eBay, FedEx (plutôt une boutique Java) et buy.com (plutôt une boutique MS) ? Est-ce que MOM répond à un besoin là-bas ?

Tout à fait.

Un exemple de cas d'utilisation est la mise à l'échelle des demandes de pages Web. Lorsque l'utilisateur effectue une requête web, le serveur web la place dans une file d'attente pour un traitement en arrière-plan. Cela signifie que le serveur web peut continuer à travailler pendant que la demande est traitée. Cela signifie également que le serveur web n'a pas besoin de savoir comment la demande est traitée, ce qui simplifie considérablement la maintenance, la mise à niveau et le retour en arrière du système, car les parties principales sont "découplées".

Donc, de toute façon, la requête web est traitée par un service back-end, ou éventuellement par plusieurs services, par exemple "chercher des titres de livres", "dessiner un panier", "obtenir une publicité", "vérifier le compte utilisateur"... Enfin, tous les résultats sont placés dans une autre file d'attente, prêts à être collectés et à recevoir une réponse de l'utilisateur par le serveur web. En général, le système prévoit un délai d'attente d'environ 100 ms pour que les demandes tardives soient simplement rejetées. L'utilisateur voit tout ce qui a été traité dans cet intervalle de temps. C'est l'une des raisons pour lesquelles certains grands sites de commerce électronique ont des pages qui semblent se charger par étapes.

Il existe de nombreux autres cas d'utilisation...

Cela a-t-il un sens lorsque vous écrivez une application Web où vous contrôlez le côté serveur et disposez d'un environnement homogène (disons des dizaines d'instances Amazon EC2 exécutant toutes Linux + JVM Java) et où les clients sont, eh bien, des navigateurs Web ?

Absolument. Si vous avez un nombre inconnu ou illimité d'utilisateurs, d'instances côté serveur et de latences d'application, il est logique d'utiliser la messagerie, ne serait-ce que comme substrat évolutif pour les RPC non bloquants.

Cela a-t-il un sens pour les applications de bureau qui doivent communiquer avec un serveur ?

Dans de nombreux cas. Un cas très fréquent est celui où le serveur envoie des événements à l'application de bureau, par exemple un événement de jeu, des tweets, des flux de prix dans la finance, des alertes système.....

Ou bien est-ce "seulement" pour les grandes entreprises où l'on a généralement un mélange heureux d'innombrables systèmes différents qui doivent communiquer d'une manière ou d'une autre ?

Il ne s'agit certainement pas uniquement de cas d'"intégration héritée", mais ils sont également importants. Chez RabbitMQ, les plus gros clients que nous avons en termes d'échelle pure ou de volume de messages sont les fournisseurs de nuages et les grands fournisseurs d'applications web.

6voto

t0mm13b Points 21031

Je vais répondre une seule réponse, à partir de l'expérience préalable de prendre un coup d'oeil à ce middle-ware qui est utilisé par de grandes entreprises là - middle-ware a qu'un seul but - de la colle dis-systèmes connectés (écrit dans différentes langues) de telle sorte qu'ils peuvent interagir les uns avec les autres et de rationaliser les processus d'affaires - Entera que j'ai de l'expérience avec, crée une couche du milieu dans lequel la zone d'unix à l'aide de procédés écrit en C, d'interagir avec le système central (DB2, COBOL) par l'intermédiaire d'un avant la fin de l'écrit dans PowerBuilder (je ne suis pas de nommage de l'entreprise!).

À partir de la description que j'ai donné, Entera est un middle-ware, qui héberge un certain nombre de choses - intégration en douceur des flux de données, indépendamment de la endian format, la capacité pour les différentes langues pour parler de la middle-ware broker (courtier est un CORBA ou DCE comme processus, qui est conforme à " L'Open Group) qui écoute sur un port particulier) et est spécifiée par un IDL qui permet un processus semblent être locale - si vous comprendre la terminologie utilisée dans l'accès distant en vertu de Microsoft .NET Framework, vous n'êtes pas loin de la marque! Le middle-ware génère des talons qui sont liés au moment de la compilation et de gérer la création du processus, l'hébergement outre d'un port, multi-threading au moment de l'exécution, et aussi, les modernes front-end (tels que .NET, Java, PowerBuilder, même l'indicible VB6...ok...VB.NET pour les puristes) peuvent interagir par l'ouverture d'une connexion vers le port spécifié sur une adresse IP particulière, et en utilisant les bouchons générés, peut interagir directement avec elle.

De toute évidence, à partir de ce qui a été décrit, vous pouvez voir comment les systèmes existants peuvent avoir une nouvelle vie respirait en elle et donc l'évolutivité du processus, l'inconvénient majeur de ce est le coût de facteur qui peut s'exécuter en thousdands de dollars. Les grandes entreprises qui utilise des mainframes que de leurs systèmes de traitement de facturation, qui génèrent un énorme chiffre d'affaires peut évidemment se permettre un tel produit cher - pour eux, il semblerait que de jeter quelques centimes dans une piscine de l'eau...à cause de l'utilisation de la middle-ware qui prolonge le processus de l'entreprise, et de respirer une nouvelle vie, peut s'étendre de l'entreprise par un bon nombre d'années dans le futur sans se soucier d '"héritage" étiquette attachée à elle.

D'ailleurs, je l'ai réalisée dans le cadre de ma thèse, pour ma BSc. dans les Systèmes d'Information qui couvrait cette commerciale avant la fin de l'. Il y avait une version open source de la middle-ware disponible sur sourceforge appelé FreeDCE, mais les efforts de développement ont diminué ou arrêté.

Edit: @cocotwo: c'est exactement ce Que middle-ware fait comme vous avez dit c'est un outil de plomberie...message oriented middle-ware n'est pas vraiment entendu parler de autant que je sache, parce que j'imagine, le processus (fonctions) aurait besoin d'être appelée que si elles sont localement visibles dans le domaine d'application de l'avant-fin pour le rendre facile pour interagir avec.

À l'aide de messages peut avoir ses avantages par rapport à des appels RPC en ce que les messages sont en attente dans une zone d'attente dans le cas où un réseau de déconnexion se produit - il peut y avoir de mise en cache des données au sein de cet aspect pour permettre le front-end pour continuer, quel que soit...il pourrait être utile dans le cas de "mise à jour d'un statut particulier d'une facturation/numéro de facture" d'un chemin de données en écriture à la fin en passant par le moyen-vaisselle.

Ok, les grandes entreprises auraient avancé des systèmes d'infrastructure que les techniciens sont en permanence autour de l'horloge pour garantir une livraison de flux de données, de sorte que devrait être pris en compte. La société que j'ai travaillé avec IBM Global du contrat de Soutien à remplir afin d'assurer un maximum de disponibilité de 99% avec 6 neuf après la virgule...avec hot-swapping/équilibré-clusters/mise en miroir des systèmes en place...

Tandis qu'avec la RPC, si la déconnexion se produit, le front-end devrait être redémarré ou aurait pour gérer la déconnexion de l'événement. Ça dépend vraiment de si le message-la mise en attente du middle-ware poignées de chaque message en temps réel et de transmettre les résultats à l'avant-fin immédiatement...

C'est là que chacun (Message en attente et les RPC liées middle-ware) ont leurs forces et leurs faiblesses...et aussi le coût de facteur d'atténuation, telles que le soutien, le temps, les efforts de développement et de formation - c'est un biggie ici en tant que middle-ware sont vraiment de propriété (en dépit de la "Le Groupe" mise en page/normes) et complexes à configurer et à coller le tout ensemble via des scripts.

5voto

user378411 Points 31

De bonnes réponses et une bonne discussion ici. Notre équipe de consultants a deux solutions de "messagerie" préférées : RabittMQ et NXTera un middleware RPC à haute vitesse, la version contemporaine d'Entera mentionnée ci-dessus. Mes partenaires et moi-même avons développé plusieurs solutions utilisant RabittMQ, qui est le meilleur outil disponible dans ce domaine à l'heure actuelle. De plus, il se trouve que je travaille pour la société qui fabrique NXTera/Entera.

Par expérience, je peux dire clairement que ces deux produits répondent aux besoins de fiabilité et de faible maintenance évoqués plus haut. Il y a des situations où un service de messagerie, comme RabittMQ, est le bon choix - lorsque Publish and subscribe, certified delivery, Queuing ou store-and-forward sont nécessaires.

Dans d'autres cas, les RPC (appels de procédure à distance) sont les solutions les meilleures et les plus rapides pour le traitement transactionnel et distribué des applications d'entreprise ou basées sur le cloud. Lorsqu'il est nécessaire d'utiliser un RPC, mais que SOAP/.NET (oui, ce sont des implémentations RPC) sont trop lents, trop chers ou trop complexes, un middleware RPC léger et rapide comme NXTera/Entera est le bon choix pour nous.

Il existe un certain chevauchement des cas d'utilisation entre les intergiciels RPC et les intergiciels orientés message, et là où il y en a, vous pouvez utiliser l'un ou l'autre avec succès. Mais les deux sont des choix solides et fiables.

Les grandes entreprises avec lesquelles je travaille utilisent côte à côte RPC et MoM. En ce qui concerne les sociétés Internet, Google (Protocol Buffers) et Facebook (Thrift) montrent que les RPC ont un rôle à jouer dans le développement moderne du web et du cloud.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X