Et ou situez-vous l'architecture orientee service dans tout ca ? :-).
Fab.
--
Mon ordinateur est ecologique, il ne consomme que du GPL.
fabien....@praxeme.org
Praxeme : http://www.praxeme.org
Blog : http://friends.praxeme.org
Photos : http://krohorl.free.fr
Certes. On a desormais assez d'outils de metrologie/management
des services pour etablir des priorites grace a des calculs
eventuellement complexes.
> Je suis beaucoup plus réservé sur l'emploi de services SOA dans les
> applications batch sur gros volumes. Personnellement j'aime qu'un
> batch au vrai sens du terme (gros volume-traitement différé) attaque
> le plus directement possible les dbs sans passer par une "pyramide" de
> services.
Il faut relativiser. Meme en C, un code bien structure passe
par une pyramide de fonctions. Si les intermediaires sont bien dessines
(des services plutot que des fonctions), l'overhead et peu ou prou le
meme.
> Evidemment on peut vouloir appeler un service décisionnel par exemple
> (les règles métier). Au risque de paraître old school je préfére pour
> un vrai batch emporter le code dans l'application plutôt que de faire
> appel à un service.
Le fait de mettre le code dans le batch ne casse pas
forcement l'approche service. Que tu invoques le service par un
appel de methode, un web service avec la stack complete ou tout
intermediaire (proxy/factory, aop...) ne change pas le fait que
tu invoques un service (et que tu n'appelles pas une fonction :-).
Mais ca reste dangereux pour la raison que tu evoques :
> Si l'outil de gestion de règles peut générer du
> code on peut éviter la double maintenance (s'il le fait vers Cobol et
> Java c'est encore mieux [et ça existe]). Attention dans ce cas aux
> tests de non régression ;-).
On retombe dans le risque classique : redondance, branches
d'evolutions separees, doc incompletes et incompatibles, perte de
maitrise et donc de controle.
Ah ! Ca faisait longtemps que ce forum n'avait pas connu ca ! :-).
Fab.
--
Now, I have to change my biometrics every 90 days...
Je suis persuade du contraire :-).
Ils ne se justifient comme tu l'as dit que pour des raisons
qui sont de plus en plus fallacieuses. La vraie raison est probablement
plus proche de la resistance au changement culturel. Dans pas mal de
cas, des aujourd'hui, et sans pour autant mettre la SOA en avant, on arrive
a les eliminer rien qu'en reconstruisant des acces aux bases corrects,
par une activite de conception. On voit meme des traitements STP bien
construits (penses) qui les absorbent car ils sont ainsi plus eficaces.
Et c'est une des vertus de la SOA de refonte de favoriser cette
reconception efficace.
Fab.
--
Un systeme (serveur, service, daemon unix,...) recoit les
evenements correspondants aux mouvements declencheurs d'impressions,
prepare les requetes de creation des info d'impression du compte,
voire cree le resultat au format adequat. Il conserve les references,
triees au fur et a mesure (un tri dans ces conditions ne coute presque
rien). Il recoit aussi l'evenement declencheur de la transmission (un
tick d'horloge, mais aussi potentiellement une autorisation d'envoi
fournie par le systeme de la poste si cette derniere avance vers le
B2B) et invoque le service de transmission eventuellement fourni par
un autre sous-systeme.
L'avantage est de ne plus avoir de traitement lourd a un
moment donne, voire meme de ne plus avoir d'acces a la base vivante
si les evenements declencheurs portent les donnees suffisantes. La,
tout depend de l'effort consenti vis-a-vis des transformations de
l'existant. A l'extreme, ce probleme est a integrer dans un traitement
STP, en annexe, qu'on ne place pas sur le chemin critique.
Le fait est que l'approche fonctionnaliste, qui nous plombe
depuis 10 ans, entraine souvent la confusion entre separer les
preoccupations/competences (qui est un bon principe d'architecture)
et regrouper les transactions (qui est une technique d'optimisation).
C'est perturbant quand on reflechit aux avantages du traitement au
fil de l'eau.
Fab.
--
A classic is something that everyone wants to have read and nobody
wants to read. (Mark Twain, "The Disappearance of Literature")
Comment les obtient-on ?
Je vois bien plusieurs choses, certes, mais pas tres excitantes :
- Un batch est encore ecrit le plus souvent comme un gros
bloatware spaghetti meem dans les langages modernes. C'est l'endroit
ou il semble qu'on puisse encore se permettre de ne meme pas structurer
le code, par exemple quand les batches sont ecrits dans des lanagages
interpretes :-). Ca semble etre moins couteux a ecrire (quoique) mais
la maintenance et surtout, comme l'evoquait William, le control des
kyrielles de bouts de batches, prouve le contraire.
- Le regroupement des transactions metier en transactions
techniques moins nombreuses. Il y a la un reel pouvoir d'optimiation.
Mais negligeable par rapport au gain d'une bonne conception des bases
et des acces aux donnees. Et rien n'empeche de faire un regroupement
de cet ordre au fil de l'eau en bufferisant certains evenements.
En revanche, le traitement batch est resoluement caracteriel
vis-a-vis du parallelisme et de la distribution. Passer un traitement
batch sur une grosse machine aujourd'hui (un multi-coeur) puis celles
de demain (beaucoup de coeurs :-) ne l'accelere pas. L'utilisation des
grilles de calcul et des grilles de donnees est quasiment prohibe. Le
decoupage que certains tentent (sur le perimetre) est le plus facile
a mettre en oeuvre (souvent c'est le seul qui vient a l'esprit), mais
c'est le pire, il n'est pas scalable. Non, decidement, le principe du
batch est obsolete, il va falloir s'y faire :-).
Fab.
--
J'ai tout bon, j'en mettrais mon main() à compiler !
Oh ! :-)
Le placement d'un code postal dans une liste ? Il faut une BD
relationnelle avec table et index pour faire ca ?
> Ce qui pour moi est une meilleure solution pour allèger le programme
> batch est d'utiliser un service pour formatter les extraits de compte
> au lieu de développer cette fonctionnalité dans le programme batch lui-
> même.
> C'est toujours une architecture SOA mais on ne supprime pas les
> batchs, on les rend juste plus légers.
Jusqu'a ce qu'il ne reste plus rien dedans. Dans ton exemple, il
reste quoi ? Le tri ?
Allons jusqu'au bout de la reflexion, on est un peu la pour ca
aussi :-) :
Pourquoi ce tri ? C'est le sous-traitant qui l'impose. En fait
c'est pour lui simplifier la vie que tu compliques la tienne. Mais
tu payes un services, non ? Donc, on en arrive a la situation suivante :
un probleme de negociation commerciale (j'ai achete un service qui n'est
pas tout-a-fait le bon), a des impacts sur l'architecture logicielle
(batch versus fil de l'eau), et sur l'infrastructure (le batch ne tournera
pas sur n'importe quelle machine a cause des problemes de scalabilite).
Moi, ca me choque.
Solution : changer de sous-traitant ? Tu payeras peut-etre le
service plus cher, mais si ca te coute moins pour l'invoquer... Non ?
Fab.
Elle est determinante, Pierre ! :-). Car le raisonnement batch
a tendance a occulter d'autres solutions. Par exemple pourquoi se
donner les moyens de changer par simple reconf si le batch est le seul moyen
d'arriver a ses fins ?
Mais oui, je suis d'accord, on peut concevoir 99% du systeme
sans se poser la question batch/fil de l'eau et passer d'une vision a
l'autre quand on veut.
Fab.
--
Les problèmes complexes ont des solutions simples, faciles
à comprendre, et fausses.
Oui, j'ai evoque ca dans le mail que tu cites (parallelisation
par decoupage du perimetre). Ce n'est pas scalable. Ca permet tout
juste de decouper en quelques gros morceaux, mais pas de paralleliser.
Ca n'exploite pas bien le multi-threading qui lui-meme n'exploite pas
bien les multi-coeurs (meme peu nombreux), et encore moins les possibilites
de parallelisation massives du grid.
> En général, en batch, l'élément déterminant pour la performance n'est
> pas la vitesse du processeur mais plutôt la vitesse et la latence des
> contrôleurs I/O. En effet, on manipule des volumes importants de
> données. C'est pourquoi on trouve des processeurs si peu rapides sur
> certains mainframes.
C'est pourquoi il faut travailler a supprimer les IO. Une bonne
IO est une IO qu'on evite :-). Et le fil de l'eau permet bien sur de
faire ca puisque les traitements sont faits au moment ou le besoin s'en
fait sentir, c'est-a-dire au moment ou les donnees sont presentes.
Fab.
--
Un organigramme réussi : chacun dans sa case et
les cases seront bien gardées.
A combien evalues-tu la difference de taille ?
Quant aux IO : un fichier de 100 000 ordres, en tant que fichier,
est stocke sur disque, donc IO ecritures/lectures, nombreuses car les
batches passent leur temps a lire et ecrire ces gros machins. A l'inverse,
100 000 ordres traites quand ils arrivent ne sont pas representes par
100 000 fichiers. Le fichier n'a plus de sens, de ce point de vue. Chaque
ordre est traite directement. Les IO de persistence (ou plus exactement
d'archivage qui est seul necessaire d'un point de vue metier) sont
desynchronisees par rapport aux traitements, les IO ne sont pas payees
par le traitement. Bref, il faut repenser tout ca en sortant *vraiment*
du mode batch.
> est dans un format XML. Je suis vraiment surpris de devoir justifier
> celà ici.
C'est parce qu'il faut en permanence remettre en cause les
idees qui prennent de l'age, pour voir si elles tiennent encore la
route :-).
> Toutefois, il me semble vraiment utopique aujourd'hui de penser qu'on
> peut complètement se passer de ce genre de traitement.
Certes, mais d'autres vont neanmoins continuer de les
eliminer completement :-).
Fab.
--
Les donnees biometriques presentent 2 problemes qui les rendent inaptes
a securiser des acces : elles sont irrevocables, et elles sont publiees
publiquement des que leur proprietaire sort de chez lui.
Ce genre d'erreur est principalement due a la mauvaise
separation des environnements (voire a leur absence dans certains
cas extremes). L'architecture logicielle applicative n'a que peu
d'impact. Dans l'exemple, un traitement au fil de l'eau serait
accompagne de simulateurs d'evenements charges d'injecter des
masses de solicitations pour les tests. Ces injecteurs pourraient
tres bien injecter dans un systeme de prod par erreur si les
environnements ne sont pas assez bien separes (une erreur d'URI
dans une topologie reseau mal cloisonnee, par exemple).
Px insiste bien sur ce probleme des environnements en
faisant apparaitre clairement dans l'aspect physique le mapping
du logiciel sur le materiel, avec un decouplage dans lequel se
logent aisement les dispostifs de separation des environnements.
Evidemment ITIL est aussi une bonne force de separation et de
test de son efficacite.
Fab.
Managed file transfer for SOA
WebSphere MQ File Transfer Edition provides an enterprise-class platform for managed file transfer operations. This article shows you how to use File Transfer Edition to implement a managed file transfer system that enables you to issue file transfer commands simply by placing messages onto a queue and invoking a Web service.