Il mio approccio alla creazione di middleware utilizzando una coda è un buon approccio?

1

Voglio creare un sistema middleware che la mia azienda possa utilizzare ed espandere per gestire i punti di integrazione tra i nostri vari sistemi personalizzati e di terze parti, nonché i nostri siti Web ospitati.

Ho qualche problema con il design / architettura e vorrei qualche consiglio (per favore fatemi sapere se c'è un sito migliore per porre queste domande).

Il middleware sarà fondamentalmente il broker tra il nostro ERP e gli altri nostri sistemi come il nostro sito web / i rivenditori di terze parti ecc. Tratterà principalmente le chiamate API e le esportazioni di file XML.

Stavo pensando a:

  • Uso di RabbitMQ come meccanismo di accodamento
  • Uso di Quartz.NET come programmatore contenuto in un servizio di Windows. Sarebbe molto leggero e caricherà semplicemente un elenco di lavori da un database, lasciandoli cadere in coda quando verrà raggiunta la loro pianificazione.
  • Uso di un servizio Windows (chiamerei questo l'agente) che sarebbe un utente della coda RabbitMQ. Controllerebbe la coda ed elaborerebbe i lavori come sarebbero entrati. Idealmente, vorrei essere in grado di eseguire lavori separati allo stesso tempo, in modo che un lavoro non vincoli necessariamente un altro lavoro dall'esecuzione. Possiamo sempre ridimensionare questa porzione, se necessario.

Qualcuno vede qualche problema con questo approccio? Non riesco a trovare molte implementazioni di esempio su Internet sull'utilizzo di RabbitMQ come servizio di lavoro in .NET (utilizzando più thread) e non sono sicuro che l'utilizzo di un servizio di pianificazione per il semplice rilascio di elementi in coda sia l'approccio giusto. / p>     

posta Lock 29.06.2017 - 05:01
fonte

1 risposta

1

Per elaborare un po 'di più sui nostri scambi di commenti.

Vantaggi del tuo approccio basato sulla coda

Il tuo approccio basato sulla coda ha in definitiva alcuni vantaggi:

  • I produttori ("i tuoi lavori di alimentazione db") e i consumatori (i tuoi agenti) sono disaccoppiati: non devono conoscersi gli internals. Devono solo conoscere la tua coda e la struttura dei dati al loro interno. Questo renderà la tua intera architettura più manutenibile.
  • È possibile ridimensionare il lato produttore e arricchire le origini dati collegando altre applicazioni alla coda.
  • Potresti far fronte ai picchi di produzione, quando il produttore proce i fastidi che i consumatori possono consumare, diffondendo l'elaborazione nel tempo grazie al comportamento asincrono consentito dalla tua coda.
  • Potresti scalare il lato del consumatore moltiplicando i nodi di elaborazione e distribuirli tra i server, se ci fosse una mancanza di capacità.
  • a seconda del sistema di accodamento, è possibile ridimensionare la coda attraverso la distribuzione (Con RabbitMQ è possibile configurare un'installazione distribuita , lo stesso vale per altri sistemi come ad esempio Kafka che mira specificamente ai big data).

Ecco un'immagine per evidenziare tutto questo: :

Svantaggio della coda

La coda aggiunge un livello di complessità alla tua architettura e ha alcuni impatti:

  • Il sistema di accodamento è un sistema aggiuntivo da installare, gestire e gestire.
  • Tutto dipende dalla coda. Le nuove versioni potrebbero richiedere l'aggiornamento di tutti i produttori e i consumatori. E potresti trovarti dipendente dal tuo fornitore di tecnologia di coda.
  • In termini di potenza di elaborazione, l'architettura di accodamento aggiunge un sovraccarico, aggiungendo più processi e richiedendo potenza di elaborazione per l'intermediario.

Conclusione

A mio parere, l'inconveniente è marginale rispetto ai benefici. La flessibilità e la scalabilità consentite dall'architettura di accodamento ne fanno un'opzione a prova di futuro in molti scenari.

Tuttavia, non sembra che tu possa approfittare realmente della messa in coda nel tuo sistema. Se la tua architettura è progettata per rimanere tale, ci si potrebbe chiedere perché si esegue l'elaborazione in batch caricando in batch la coda e non elaborando direttamente i record dal database senza sovraccarico aggiuntivo. Se tutto è guidato dal tuo db, il tuo db sarà comunque il collo di bottiglia.

    
risposta data 30.06.2017 - 21:16
fonte