I had been testing an Akka based application for more than a month now. But, if I reflect upon it, I have following conclusions:
- Akka actors alone can achieve lot of concurrency. I have reached more than 100,000 messages/sec. This is fine and it is just message passing.
- Now, if there is netty layer for connections at one end or you end up with akka actors eventually doing DB calls, REST calls, writing to files, the whole system doesn't make sense anymore. The actors' mailbox gets full and their throughput(here, ability to receive msgs/sec) goes slow.
- From a QA perspective, this is like having a huge pipe in which you can forcefully pump lot of water and it can handle. But, if the input hose is bad, or the endpoints cannot handle the pressure, this huge pipe is of no use.
I need answers for the following so that I can suggest or verify in the system:
- Should the blocking calls like DB calls, REST calls be handled by actors? Or they good only for message passing?
- Can it be like, lets say you have the need of connecting persistently millions of android/ios devices to your akka system. Instead of sockets(so unreliable) etc., can remote actor be implemented as a persistent connection?
- Is it ok to do any sort of computation in actor's
handleMessage()
? Like DB calls etc.
I would request this post to get through by the editors. I cannot ask all of these separately.