Blocking or non-blocking is about whether or not you want to wait for a call to complete. Non-blocking calls typically do work on another thread so the thread invoking it can resume doing other stuff. Blocking calls are more common. One reason to make a blocking call is wanting to make sure the call succeeded without error before continuing on the next thing.
I can't tell you to use node.js or not. I don't think the technology matters, you could do this with most programming environments.
What you describe basically is buffering. I would do it non-blocking unless something is really expensive (maybe parsing the rpc call is). This way you guarantee you won't miss any call.
If you do it non-blocking, because there is significant work, I would use a thread pool for it, typically they end up blocking if the pool can't keep up.
You will need to synchronize with some locking to allow multiple threads to store stuff in your buffer (that's why I'd rather do it blocking on a single thread) and you will lose ordering of your calls which may or may not be important.
Using a double buffer you can flush your buffer to the DB while also still receive new calls. You may need to lock shortly while flipping buffers after a flush.