Uno dei principali principi di progettazione del servizio SOA è il principio di compitabilità del servizio ( link ).
L'idea è che componendo nuovi servizi utilizzando quelli esistenti come elementi costitutivi, uno può sviluppare rapidamente nuovi servizi. Un po 'come per il modo in cui chiami metodi exising di oggetti quando si implementano nuovi metodi. Questo è il motivo per cui gran parte dell'aumento della produttività da SOA dovrebbe provenire.
Qualcunolofadavveronellapratica?Hovistoquestoripetutoall'infinitoinscrittotesto,manonhosperimentatopersonalmenteleimplementazionidelmondoreale.Lamaggiorpartedellaancheiltestoomettequalsiasimenzionedigestionedelletransazioni,chemisembraessereililpiùgrandeostacolonellarealizzazionediservizicomponibili.
Perprimacosa,devidavveroaffrontareilproblemadelletransazioniprimadipoternecomporreservizinonbanali.Certo,sel'esempiohaservizi"findCurrentTime ()" e "writeLogMessage ()" è facile non preoccuparsi delle transazioni, ma non quando si ha reale esempi mondiali come "depositMoney ()" e "withdrawMoney ()".
Conosco due opzioni:
- Implementa transazioni reali con WS-Atomic Transaction o simili
- Implementa una soluzione basata su compensazione che compensa la chiamata ad A con "cancelA ()" o somesuch se la chiamata a B fallisce
Entrambi sembrano molto problematici / quasi inutilizzabili per me:
- Transazione atomica WS
- un lotto di complessità, la maggior parte dei consigli che ho trovato avverte solo "dolore nel culo, non fallo " Il supporto
- è limitato, ad esempio se si utilizzano ESB open source, alternative principali ServiceMix, Mule o WSO2 non lo supportano
- compensazioni
- implementare la gestione delle compensazioni mi sembra molto complesso. Cosa facciamo se il servizio A ha successo e non otteniamo mai una risposta dal servizio B e non sappiamo se ha fallito o successo? Gestire manualmente tale logica (come implementatore di servizi di compositing) voglio tagliarmi i polsi - questo è il tipo di lavoro che uno strumento dovrebbe fare per me!
- Inoltre non vedo come si possano avere metodi di compensazione in servizi non banali. Dire il tuo servizio A è "depositMoney ()" e questo succede, qualche altra azione rapidamente trasferisce il denaro altrove, e poi riceviamo "compensateDepositMoney ()", cosa fare facciamo adesso? Sembra una grande lattina di worm.
Per me sembra che la composizione del servizio sia un principio SOA così fondamentale che tu davvero non ottengono i benefici di SOA se non puoi (convenientemente) comporre servizi . Qual è la realtà? Il 90% degli utenti SOA utilizza "SOA criptata" senza un vero servizio componsition? Oppure la maggior parte degli utenti utilizza effettivamente la composizione del servizio e io sto esagerando la difficoltà di questo?