1
votes

One question on vert.x event bus scalability. I am planning to use vert.x in smart device (small form facor) application and a remote management application. Initial estimate is that there will be close to 100K smart devices and 3/4 servers hosting management application. In this case, can you please advise using event bus between the smart device and web application (in cluster mode). My primary requirement of using event bus is to send dynamic notifications originated from device to the management servers and take corrective steps in case of system failure.

I posted another query recently and one of the users pointed me that internally vert.x uses the netsockets for event bus backed by hazelcast for cluster mode discovery. If that is the case, my assumption is that the scalability will be limited by the number of sockets that can be handled by the management server. Is this right ?

Also appreciate if anyone can point me to any benchmark test done on the vert.x eventbus in terms of msg processing performance.

1
Hi, any new insights with this? - rayman
I would not recommend using a potentially brittle cluster connection between 100K devices and 3-4 servers. The clients can use SockJS to listen to events on the event bus, but prepared to handle fail-over and re-tries on the device side. - Jochen Bedersdorfer

1 Answers

0
votes

My primary requirement of using event bus is to send dynamic notifications originated from device to the management servers and take corrective steps in case of system failure.

No, use regular HTTP requests for this. EventBus, and indeed every concurrent two-way networking model, is fundamentally unsuitable for this use case. Absolutely do not use Hazelcast on the clients; using a SockJS EventBus bridge is possible but so error-prone that you will certainly waste more time doing that correctly than writing a simple HTTP endpoint for this heartbeat behaviour.

my assumption is that the scalability will be limited by the number of sockets that can be handled by the management server. Is this right ?

No. Your scalability will be limited by however you'll be persisting the data you receive from the device. Hazelcast's maps are fine for this (accessed via vertx.sharedData()), but it really depends if you 100% understand what you want.