SOA ou autre, a-t-on tant besoin de "distribution" ?
Contexte : monde de la gestion....
Une petite réflexion sur tout ces moyens d'appel à distance : RMI, IIOP, WebServices, EJB, Corba,....
As-t-on réellement besoin de tout ça ? Pourquoi parle t-on toujours de distribution/appel distant quand on parle de SOA ?
Plus j'y pense et plus je me dis que tout cela ne sert peut-être pas tant que ça.
Bon, ok il faut expliquer un peu...
L'idée est : "quand a t-on vraiment besoin de distribution ?"
1- Ben quand une IHM doit appeler un serveur "métier". Dans des cas simple ou on fait du Web et que tout est sur le même serveur, ce n'est même pas nécessaire. Mais, ok, pour des question de sécurité et donc d'architecture, partons du principe qu'une IHM doit toujours faire appel à des services "distants" pour dialoguer avec le "métier".
Dans ce cas, quelle est la nature des "services" appelés par l'IHM ?
Si on a des règles d'architecture correctes, c'est à dire que l'on a pas de métier côté IHM et que l'on se doit de minimiser les aller/retour entre IHM et métier (pour les perfs !), eh bien ces "services" sont forcément des services dédiés à l'IHM. Ce que je veux dire c'est que ces services ne sont pas fondamentalement "métier" ou tout au moins pas réutilisables dans un autre contexte que cette IHM. Alors ok, comme on fait de la bonne conception, ces "services" font s'appuyer, "derrière", sur des composants de plus bas niveau qui eux seront indépendant de l'IHM et seront plus "métier".
Ces "services IHM" sont-ils alors des services au sens "SOA" ? Est-ce que ce ne seraient pas plutôt les composants de "derrière" qui sont les services au sens SOA ? Mais si oui, alors ces composants n'ont pas besoin de distribution car ils sont sur le serveur.
2- Bon, ok, toujours avec cette idée que les services "SOA" sont les composants de "derrière". Ces composants peuvent avoir besoin d'appeler des services d'autres applications. Ah bon ? Lesquels réellement ? Dans un SI, les applications ont des responsabilités claires et il est rare que le métier "transactionnel" soit beaucoup réparti entre plusieurs applications. Au "pire", on a des référentiels communs ou des "mécanismes généraux" qui sont partagés. Pour ces référentiels ou mécanismes, on peut très bien se passer de distribution en déployant les "librairies" qui les constituent sur les différents serveur métier. On a alors des composants locaux qui doivent simplement être déployés correctement sur plusieurs serveurs.
En dehors de ces "applications particulières", la communication avec d'autres applications est souvent asynchrone. Soit via des évènements temps réel soit via des fichiers et là il n'y a pas besoin de distribution.
Bref, je me demande si on ne devrait pas limiter l'importance des technos de distribution dans nos approches d'architecte et plus réfléchir à la modularité de nos applications et à leur mode de déploiement dans les serveurs d'application en fonction des liens qu'elles peuvent avoir.
Et au final, plus se concentrer sur des problématiques comme celles qui tournent autour d'OSGI (modularité, versioning) et des "nouveaux serveurs d'applications" (où la distribution n'est pas le coeur du discours)
Des avis ?
nb : j'ai mentionner que ces réflexions étaient faites dans le contexte d'un SI "Gestion" mais je me demande si ce n'est pas vrai dans l'absolu.
SOA vocabulaire commun/applications composites/distribution
Ce thread est très intéressant et pose de bonnes questions.
Avant de répondre sur certains points (je suis architecte dans l'équipe JOnAS),
est-ce qu'on peut partager un vocabulaire commun sur la SOA et l'architecture du système d'information ?
La SOA est un paradigme architectural.
Les gens utilisent le terme SOA pour désigner* différentes choses :
- SOBA (Service Oriented Business Architecture)
- SOA integration (par exemple utiliser un ESB pour intégrer des applications)
- SOA modernization (par exemple donner un accès Web Service à une application existante, ou mettre en place un serveur déchange qui permet de gérer des flux hétérogènes entre applications)
Seul le SOBA relève «*véritablement*» de la SOA.
Dans ce cas, il s'agit d'écrire de nouvelles applications avec une architecture SOA. A partir de l'analyse des processus de l'entreprise, sont déterminés successivement :
- les services fonctionnels correspondants aux activités
- les services applicatifs
- les services techniques
Pour développer l'architecture adaptée dans une organisation, un cadre architectural comme le TOGAF identifie bien* les niveaux suivants :
Business architecture (Process)
Information Systems ( data and application architecture)
Technology Architecture
OSGi (la SOA dans* une VM) apporte la modularité à Java
au même titre que la SOA apporte la modularité à l'Enterprise Architecture.
Celà étant dit, je suis d'accord avec ego, une chose importante c'est bien la capacité à réaliser les "services de derrières" sous forme d'applications (services ) composites.
Même si les problèmes de distributions font dépenser beaucoup d'énergie, il ne faut pas perdre de vue que ce n'est pas une finalité et que l'important c'est bien ces fameux services qui doivent bien tourner quelque part, et le serveur d'application de nouvelle génération est une place de choix.
Et c'est bien là tout l'enjeu de nos travaux, la modularité, le versioning, et la composition. Nous le faisons avec iPOJO mais notre obsession est bien de le faire de manière la plus* standard possible (dans une approche best of breed), le meilleur des deux mondes Java EE et OSGi (et pas l'inverse).
Nous regardons aussi avec attention la distribution OSGi qui va dans le sens d'une simplification de toute cette couche protocolaire "legacy".
OSGi permet de gérer correctement dynamisme (mise à jour à chaud, substitution, lazy loading) et l'aggrégation de briques open source. Dans JOnAS sont intégrés "facilement" CXF (pile Web service et routage), la médiation Camel, la gestion des règles avec Drools, et tout autre composant OSGi.
Je suis d'accord que tout ça ne concerne pas que le SI Gestion mais tout système (industriel, embarqué, etc).
Pour revenir à la distribution, la distribution vient de l'architecture. Quand on répond à certaines questions d'EA on arrive à de la distribution.
Si on prend les questions du Framework Zachmann
What ? How ? When ? Who ? bien souvent elles conduisent à une architecture distribuée mais effectivement SOA ne veut pas forcément dire distribution (OSGi en est le premier exemple). Ensuite comment est faite cette distribution et à quel niveau, c'est une autre question.
Il y a eu dans le passé une vision homogène de la distribution, et je pense que c'est cette vision là de la distribution qui n'est pas la bonne.
Il y a donc des besoins de distribution, cela va encore s'accentuer avec le cloud. JavaEE ou D-OSGi permettent de masquer cette distribution à l'application.
SCA offre aussi un modèle de programmation qui permet de masquer cette distribution.
Comment va évoluer SCA par rapport à Java EE et D-OSGi, pour l'instant on ne sait pas trop.
Pour revenir aux objectifs de la SOA, même si aujourd'hui, la tendance est plus à la flexibilité du système d'information plutôt qu'à la réutilisation des services, dans les deux cas le repository de bundle OSGi apporte une vraie valeur.