Improve async design
Use separate channels for all and online users
Remove dedicated update channel and call update from collect-readers loop
Add try/catch logic in update