Il blocco o il non blocco riguarda la possibilità o meno di attendere il completamento di una chiamata. Le chiamate non bloccanti di solito funzionano su un altro thread, quindi il thread che lo richiama può riprendere a fare altre cose. Le chiamate di blocco sono più comuni. Un motivo per effettuare una chiamata di blocco è assicurarsi che la chiamata sia riuscita senza errori prima di continuare con la prossima operazione.
Non posso dirti di usare node.js o no. Non credo che la tecnologia sia importante, potresti farlo con la maggior parte degli ambienti di programmazione.
Ciò che descrivi fondamentalmente è il buffering. Lo farei senza bloccare a meno che qualcosa sia davvero costoso (forse l'analisi della chiamata rpc è). In questo modo garantisci di non perdere nessuna chiamata.
Se lo fai senza bloccare, perché c'è un lavoro significativo, userei un pool di thread per questo, in genere finiscono per bloccare se il pool non può tenere il passo.
Dovrai sincronizzarti con qualche blocco per consentire a più thread di archiviare cose nel tuo buffer (è per questo che preferirei farlo bloccando su un singolo thread) e perderai l'ordine delle tue chiamate che potrebbero o meno essere importante.
Utilizzando un doppio buffer è possibile svuotare il buffer nel DB mentre continuano a ricevere nuove chiamate. Potrebbe essere necessario bloccare brevemente durante l'inserimento dei buffer dopo un flush.