Dipendenze tra i servizi nella pipeline [chiuso]

0

Sto lavorando alla creazione di un nuovo sistema di elaborazione dati, in cui vi sono più passaggi ciascuno soddisfatto da diversi servizi. Ad esempio, esiste un servizio di pianificazione che dà il calcio a qualcosa, un servizio di analisi che esegue l'elaborazione e un servizio di notifica che riassume e invia i risultati. I dati fluiscono in quell'ordine

La mia domanda principale su quale progettazione sarebbe meglio se il servizio di analisi dovesse conoscere il servizio di notifica? O il servizio di notifica dovrebbe conoscere l'analisi?

Il mio pensiero iniziale è che utilizzando un bus di servizio, il servizio di notifica può semplicemente essere sottoscritto a tutti i risultati di analisi che vengono trasmessi. In tal modo, se il servizio di notifica viene sostituito o modificato, non è necessario apportare alcuna modifica al servizio di analisi. Ciò significa anche che un cliente che desidera avviare un'analisi e ricevere una notifica dovrebbe chiamare prima il servizio di notifica per dirgli come gestire il risultato che alla fine otterrà prima di dare il via all'analisi effettiva.

L'idea opposta è che il servizio di analisi debba semplicemente chiamare direttamente nel servizio di notifica, quindi il servizio di analisi deve sapere cosa fare per creare una chiamata in notifica. Ciò significa che il cliente dovrà raggruppare le istruzioni specifiche per la notifica che verranno passate nel servizio di analisi per poterle successivamente consultare per sapere cosa passare alla chiamata di notifica.

Sembra che l'approccio al bus di servizio del servizio di notifica che ottiene e che elabora i risultati dell'analisi sarebbe migliore perché potremmo anche aggiungere altri servizi in futuro che poi fanno qualcosa con un risultato senza dover cambiare il servizio di analisi per chiamarlo esplicitamente .

Qualcuno può fornire alcune informazioni su quale approccio potrebbe funzionare meglio per essere più facile da sviluppare, mantenere, supportare?

    
posta BrandonAGr 11.07.2013 - 00:39
fonte

1 risposta

3

Vorrei sostenere una terza opzione per il tuo progetto architettonico.

Hai una raccolta di servizi (analisi, notifiche, trasformazioni di dati, raccolta di dati, ecc.) che ciascuno prende il suo input da una fonte astratta in un formato particolare (che può differire tra i servizi) e produce output in un abstract destinazione, con un formato potenzialmente diverso. Collegando insieme questi servizi, puoi creare una pipeline di elaborazione.

Accanto a questi servizi di elaborazione dati, il sistema dispone anche di un PipelineManager che può creare e configurare una pipeline di servizi di elaborazione dati, in base alle richieste del client, e un servizio di pianificazione per avviare l'elaborazione in momenti specifici.

L'idea alla base di PipelineManager è che ogni singolo servizio non è a conoscenza del servizio che lo fornisce con i dati e il servizio che consuma i suoi dati, ma che esiste un componente che conosce i servizi disponibili e le loro caratteristiche di input e output e quello può legarli insieme. PipelineManager non ha nemmeno bisogno di sapere esattamente cosa fa il servizio di notifica, purché sappia che il servizio esiste, prende i dati nel formato A e non produce nulla che possa essere ulteriormente elaborato.

    
risposta data 11.07.2013 - 09:28
fonte

Leggi altre domande sui tag