Tag Archives: architecture

Impedance Mismatch

Que ceux qui travaillent en mémoire avec des objets et qui persistent ces mêmes objets dans une base de données relationnelles lèvent le doight…

Hibernate et Toplink avant lui sont des “messies” pour résoudre le fameux problème du mapping objet relationnel. Mais utiliser ces frameworks pour résoudre le problème ne garantit pas le succès. Il faut comprendre la différence entre la conception orienté objet et le monde des bases de données relationnelle, le fameux “Impedance mismatch”. Je vous recommande donc la lecture de cette publication : Modèles relationnel et objet qui fait très bien le tour de la question.

Si il n’y avait qu’une seule chose à retenir:
Dans le monde relationnel on calcul (jointures, indexes…) l’accès aux données alors que dans le monde objet on parcours un model (pointeurs). Les conséquences? L’objet permet d’obtenir un modèle plus proche de la réalité et donc utile pour traiter des problèmes complexes. Par contre il est beaucoup plus dur de mettre à jour une données dans un modèle objet que dans un modèle relationnel.

Je veux travailler avec une base de données objet !!!!

SOA: la vision d’IBM

J’ai assisté à un séminaire d’IBM sur le thème: Mettre en oeuvre aujourd’hui une Architecture Orientée Services

J’ai trouvé les interventions très pertinentes et je suis d’accord avec cette vision. Voici une retranscription de mes notes. En italique mes réflexions perso.

Pour introduire le séminaire la directrice Websphere nous a parlé d’évolutions imposées par la compétition et de l’exigence du marché: la flexibilité. Mon dieu j’ai bien cru qu’on allait enchaîner sur le traité constitutionnel! Mais non, ouf, c’est le système d’information qui doit être flexible… Quoi que, une architecture orienté citoyen pour notre nouveau gouvernement, ça serait une idée 😉 Désolé, je m’égare. Les intervenants ont ensuite abordé la question sous différents angles. SOA, la notion de Service elle-même, Web services, BPEL et ESB sont les thèmes qui sont revenus. J’ai donc regroupé mes notes selon ces thèmes.

SOA

Soa est un style d’architecture
Les standards sont un élément clé d’une SOA, ils assurent l’interopérabilité.
On mesure le succès de la mise en place d’une SOA par le % de réutilisation des services.

Le but d’une SOA est de raccourcir les cycles de développement.
Le but d’une SOA est l’alignement de l’informatique sur le métier. Flexibilité dans le métier et dans le SI
Il faut augmenter le recouvrement entre le métier et l’informatique.
Il faut revisiter le métier pour le modéliser. Ce model doit être accepté et compris par les gens du SI et du métier.

SOA est une évolution technologique et une révolution dans la relation fonctionnel/ technique.
Un projet SOA doit être rattaché à la stratégie de l’entreprise sinon il n’a aucune chance de succès.

Le point départ de la démarche SOA est le constat suivant:
Les systèmes d’informations actuels sont trop souvent organisés par silos produits. Cette organisation offre peu de possibilités de réutilisation et ne permet pas de faire évoluer suffisamment rapidement le SI.

Principes fondamentaux derrière l’architecture SOA:
– Les ressources doivent être indépendantes de qui les utilisent
– Les évolutions technologiques ne doivent pas remettre en cause l’existant
– Découplage entre fournisseur et consommateur de services.

Il n’existe pas une recette pour garantir le succès de la mise en place d’une SOA mais des principes à respecter:
discussion entre IT et métier
se baser sur des use case métier
s’appuyer sur les standards

Bref rien de nouveau par rapport à un développement sans SOA.

Service

Un service n’est pas technologique mais métier (Importance des uses case). On trouvera la technologie dans l’implémentation du service métier.
Les services peuvent être combinés pour satisfaire à des processus. Ce qui permet de casser les silos.
Un service peut être appelé et peut appeler lui-même d’autres services

Un service est caractérisé par :
Neutralité vis-à-vis des protocoles de transport
Couplage faible entre consommateur et fournisseur
Une granularité importante

Identifier les services

C’est sans doute le problème central pour mettre en œuvre une SOA.

Seul les business analysts sont capables d’identifier un service réutilisable.

2 approches sont à considérer: (voir ce billet)

– Approche top-down:
La mise en place d’une SOA doit s’inscrire dans le cadre d’un plan directeur et d’une démarche d’urbanisation.

– Approche bottom-up:
La SOA est un moyen de réutiliser l’existant, on part des morceaux, on rassemble les bouts.
Mais une application legacy qui n’a pas été conçu dans le cadre d’une SOA est rarement réutilisable telle quelle. Il faut la modifier ou l’encapsuler.

IBM s’appuie sur 2 méthodologies pour mettre en place une SOA (c’est-à-dire identifier les services réutilisable):
– Component Business Modeling (CBM)
Le but est d’obtenir une cartographie du métier de l’entreprise.
A partir de cette carte on peut identifier les composants critiques selon les critères suivants:
Composant normal, compétitif ou différenciateur
Composant source de coûts ou de bénéfices

Un composant métier est délimité par les services qu’il consomme et ceux qu’il expose.

Cartographier le SI et faire correspondre cette cartographie avec celle du métier (urbanisation)

– Service Oriented Modeling & Architecture SOMA
Permet de faire le lien entre le métier et le SI

Décomposition en domaine (avec CBM)
Analyse de l’existant
Constitution d’un portefeuille de services candidats
Sélection et tri des services
Analyse des messages échangés

IBM recommande une approche MDD Model Driven Developpement pour la mise en place d’une SOA.

Ces méthodologies ne sont viables qu’en utilisant des outils. Les outils Rational bien sûr.

Granularité des services

La granularité des services est fondamentale dans une SOA. C’est elle qui va en grande partie déterminée la réutilisabilité des services. Il faut éviter une granularité trop fine car cela entraîne beaucoup d’interaction et donc des problèmes de performance en mode distribué. On recommande donc des services à “gros grain” (coarse grain) pour une SOA. Mais attention une granularité trop “épaisse”, un service qui fait trop de chose, risque de ne pas être réutilisable. Tout est question d’équilibre, il faut trouver le juste milieu.

Web Services
Une SOA peut se mettre en œuvre sans Web Services mais c’est aujourd’hui la meilleure solution disponible.
On peut utiliser les Web Services sans faire de SOA. Il s’agit alors d’une architecture point à point sans réutilisation.

Les Web service s’articule autour de 3 éléments: WSDL, SOAP, UDDI.
Seul WSDL est indispensable pour mettre en œuvre une SOA. Car c’est WSDL qui décrit le service

UDDI permet un binding dynamique des services (Le consommateurs découvre dynamiquement les services et leur fournisseurs). En pratique c’est très peu utilisé, la plus part des services sont consommés de manière statique: le consommateur connaît à l’avance le fournisseur.

BPEL
Norme permettant de décrire en xml des processus
Un processus est le résultat d’une orchestration de service. Le processus peut lui-même être accessible en tan que service.

On peut mettre en place une SOA sans orchestration de service. Mais à mon avis c’est passer à côté d’une grande partie de la valeur ajoutée d’une SOA.

ESB
Couche d’infrastructure qui optimise les échanges entre consommateurs et fournisseurs de services.
Le but d’un ESB est de permettre de communiquer de manière simple et standardisé entre des applications disparates.

C’est l’ESB qui fourni le service end-point. C’est le point d’entrée vers un service. Il doit être normalisé mais on ne sait pas qui fourni le service et comment il le fourni. On peut comparer le service end-point à une prise électrique. On peut brancher n’importe quel appareil qui respecte la norme (220 Volt, format de prise…) et la prise fournira du courant (le service) mais on ne sait pas d’où vient ce courant (centrale nucléaire, hydrolyque…)

Infrastructure SOA = middleware = ESB = Web Service + messaging (JMS) + integration Bref c’est de l’EAI

Mais il y aurait une différence avec l’EAI:

Dans un EAI on trouve une architecture en hub ou en étoile autour de connecteurs propriétaires liés au moteur d’intégration.
L’ESB est un EAI mais de part l’utilisation des web services les connecteurs sont dissociés du moteur d’intégration. On a donc plus de souplesse et d’ouverture. Je ne suis pas très convaincu, pour moi l’ESB reste un rebranding de l’EAI

Divers
On nous a aussi rapidement parlé de SDO, ça ressemble à du JDO ça a le goût de de JDO mais ce n’est pas du JDO…

IBM veut aussi faire un lien entre SOA et portails… Hum je ne vois pas bien… SOA pour accéder au contenu… Bof, REST ne serait pas plus adapté pour de la lecture de donnée??

On a aussi eu droit à une démo de Rational software architecte Ca à l’air pas mal pour faire de la modélisation UML. Mais on n’a pas eu les caractéristiques de la machine sur laquelle cela tournait…
Bon et bien sûr pour chacun de ces nombreux acronymes et concepts il existe un produit IBM qui va bien…

Spring Framework

Juste pour vous signaler que Rod Johnson a mis à jour la présentation du framework Spring. Mais je m’aperçois que Benoit Moussaud a déjà donné toutes les bonnes ressources pour démarrer avec Spring. C’est donc une répétition mais ce framework le mérite bien. Si après la lecture de la présentation de Rod vous n’etes pas convaincu je ne sais pas ce que l’on peut faire de plus.

– Le but de Spring est de rendre J2EE plus facile à utiliser et d’encourager les “meilleurs pratiques” de programmation. Et il le fait bien.
– Spring répond à des problèmatiques qui sont rarement traitées par les autres frameworks. Par exemple Struts ne gère que la couche de présentation et de navigation d’une application, rien concernant la couche métier, la persistance, le transactionnel…
– Spring est modulaire. On peut introduire Spring progressivement dans un projet. On peut piocher dans les nombreuses fonctionnalités de Spring sans avoir à supporter la complexité de l’ensemble (à l’inverse des EJB par exemple)
– Spring permet de mettre en place des architectures testables (ce qui est quand même mieux qu’une architecture dé-testable)
– Spring est non intrusif. Vos objets métiers ne sont pas obligés d’avoir des dépendances avec le framework
– Spring permet de paramètrer l’ensemble des composants d’une application d’une manière unique
– Spring ne réinvente pas la roue et s’intégre avec la pluspart des frameworks importants: Struts, Hibernate, Toplink…

Comment utiliser les Design Patterns

Erich Gamma est l’un des co-auteurs du livre Design Patterns avec le “gang of four”, co-auteur de Junit avec Kent Beck ainsi que leader du projet eclipse sur la partie java… Eh oui ça le fait comme CV. Et quand Erich Gamma discute avec Bill Venners d’Artima ça donne un excellent papier.

“You really learn about polymorphism when you’ve understood the patterns. So patterns are good for learning OO and design in general”

100% d’accord. Il existe un fossé entre la programmation procédurale et la programmation objet qui est souvent bien difficile à franchir. Ce n’est tout simplement pas la même façon penser. Personnellement je ne connais pas de méthode 100% efficace pour faire “comprendre” l’objet. Mais la remarque d’Erich Gamma me semble tout à fait judicieuse. En y réfléchissant bien il me semble n’avoir vraiment eu le sentiment de bien maîtriser la “pensée” objet qu’après avoir découvert et appliqué les design patterns. Il est difficile de comprendre la puissance de l’objet car le polymorphisme, l’héritage, l’encapsulation… sont des concepts relativement abstrait. Appliquer un design pattern à un problème de code rend les principes de l’objet concrets.

D’autres remarques on ne peut plus pertinente sur les design patterns:
– Inutile de démarrer une conception en se disant je vais utiliser un maximum de pattern.
– Il vaut mieux adopter une démarche “refactoring to pattern”.
– Un design pattern, plusieurs implémentations possibles.
– La raison d’être des design patterns est la réutilisation et l’extensibilité
– Les design patterns fournissent un vocabulaire commun pour décrire et discuter d’une conception.

Il parle ensuite de la conception de Junit et de “pattern language”, et on attend la suite qui devrait être publié le 30 Mai…

Recette pour un échec avec une SOA

Via Tim Bray

John Crupri nous explique que prendre des composants logiciels déjà existant et rajouter par dessus une couche de web services est une parfaite recette pour un échec dans la mise en place d’une architecture orientée service.
En effets ces composants n’ont certainement pas été conçus dans le cadre d’une SOA. Il y a donc peut de chance qu’ils soient atomiques, indépendents d’autres composants, et conçus avec une granunalirité les rendant réutilisables dans le cadre d’une SOA.

Bien que l’approche bottom-up (partir de l’existant pour construire une SOA) soit la plus naturelle et la plus simple. Il ne semble pas que soit la bonne approche. Il vaut mieux adopter un approche top-bottom: partir du business et aller vers la technique. Bref, l’application d’un principe qui n’est pas prêt de s’user: C’est la technique qui est au service du fonctionnel et non le contraire.
Tout celà nous rappel qu’il est nécessaire d’adopter une démarche d’urbanisation avant de ce lancer dans la mise en place d’une SOA.