La presenza di un messaggio bidirezionale accoda un odore di design?

4

Ho un'architettura con 1 server di backend e più server di frontend.

I server di frontend sono collegati in una connessione bidirezionale (web socket) ai client in modo che possano inviare messaggi ai client.

Il frontend e il backend sono connessi tramite un bus dei messaggi. C'è una coda per i messaggi di frontend to backend e un'altra coda per i messaggi di backend in frontend.

Ad esempio, quando un client richiede un'operazione, il frontend invia la richiesta al back-end e riconosce al client che la richiesta è stata inviata.

A volte, quando il backend termina la gestione di una richiesta, invia un messaggio di stato al frontend che lo inoltra al client che ha richiesto l'operazione.

Non ho mai visto nulla di simile. Di solito le comunicazioni vanno solo in un modo: dal frontend al backend.

Sono preoccupato, sto facendo qualcosa di bizzarro?

Mi è venuta in mente questa architettura a causa della natura bidirezionale delle prese per il web. In questo modo il server può notificare i client non appena viene elaborata una richiesta.

    
posta daramasala 27.01.2015 - 14:02
fonte

1 risposta

4

Le comunicazioni non di solito vanno solo in un modo. Le parti comunicano solitamente utilizzando coppie di richieste-risposte, che sono chiaramente non a senso unico. Presumo che tu lo sappia già, quindi quello che probabilmente stai pensando quando dici "a senso unico" non è il modo in cui le informazioni fluiscono, ma chi avvia le richieste.

Quindi, sì, il modo in cui solitamente facciamo le cose è che solo una delle parti avvia richieste. Ciò significa che l'altra parte invia sempre risposte.

Ma c'è un'eccezione: il "callback", altrimenti noto come pattern "notifier-observer". È perfettamente corretto che una parte invii una richiesta di "registratore di osservazioni" a cui l'altra parte risponderà immediatamente con una risposta "osservatore registrato" e quindi, in futuro, con una o più risposte di "osservazione dell'evento".

La terminologia con "server front-end" e "server back-end" e altre entità non collegate che chiamate "client" confondono solo le cose e non dovreste averlo portato nella discussione. Le cose sono molto semplici: nel contesto di una sessione di comunicazione tra due parti, la parte richiedente viene sempre chiamata un client e la parte che risponde è sempre chiamata server. Nel tuo caso, il tuo server è quello che chiami "server back-end" e il tuo client è quello che chiami "server front-end".

EDIT:

Naturalmente, per realizzare comunicazioni a due vie è necessario utilizzare due code. Ho lavorato su un sistema su larga scala che utilizzava due code per ogni coppia di moduli che comunicavano (una coda per ogni "via" nella "bidirezionale"), quindi fidati, non è qualcosa di bizzarro.

    
risposta data 27.01.2015 - 15:26
fonte

Leggi altre domande sui tag