2014-04-10 17 views
5

Sto costruendo un semplice server reattivo che dovrebbe consumare messaggi protobuf/protostuff in arrivo da più client, eseguire su di essi alcune logiche di business ed eventualmente inviare messaggi fire-and-forget ad altri utenti. Voglio implementare la parte di trasporto e decodifica in Netty. La mia domanda è: c'è qualche motivo per pubblicare i messaggi decodificati sul ring buffer di Disruptor in termini di prestazioni o le prestazioni extra offerte da Disruptor verrebbero annullate dalla pianificazione interna di Netty? Devo fornire a Netty due thread (uno per "accetta" e altri per il gruppo "connect") o solo uno è meglio? Forse, dovrei semplicemente dividere i messaggi per il campo della lunghezza nei gestori di Netty ed eseguire la decodifica in quelli di Disruptor?C'è qualche motivo per usare Netty con Disruptor in termini di prestazioni?

risposta

5

Dipende;)

Il disgregatore permette di disaccoppiare varie azioni differenti, e, potenzialmente, li esegue in parallelo. Quindi la domanda è: quanto è costosa la tua logica di business e quanto è scarso il tuo carico di lavoro? Il Disruptor viene utilizzato per trasferire dati tra thread, in particolare thread potenzialmente in esecuzione a velocità di messaggio diverse. Cioè consente al thread di produzione di generare una serie di messaggi mentre il thread di consumo è occupato a gestire l'ultimo messaggio.

Ad esempio, se si desidera mantenere il messaggio nel database e inviare il risultato in avanti, è possibile pubblicare il messaggio su un ringbuffer "in uscita" e utilizzare il codice non elaborato da questo e un DB persister.

Meno tempo spendi a fare cose in Netty's eventloop più client puoi gestire, o volumi di messaggi più grandi a livello di trasporto.

+0

Grazie! Sembra che Disruptor si adatterebbe in quanto la gestione delle scoppi di messaggi e il giornalismo sono una parte importante. – wyrd