Hi all,
I recently wrote an application in AKKA and it works well. Now it's time to think about scaling it and eliminating the single point of failure.
Application is pretty simple. It consumes and stores two types of data: M and F in actors (MActor and FActor). It consumes also D (in DActor) which results in looking up appropriate M and F and producing DR (DResponse).
M and F are stored in Maps (inside the actors, maps are of type <Key, ActorRef>).
1) My current strategy is to deploy application on two servers every message is processed by both servers. It's not critical to synchronize state between different nodes, but would be nice to have if cheap.
Problem is when I scale out every additional node increases amount of output messages and adds redundant processing.
4) I was thinking if the design of the system is wrong and maybe MActor and FActor should be routers instead and then Distributed Router could be used to scale out the system but this actor has some logic inside regarding the routing itself and expiry of the entries (actors). And then again how would be the state handed over when one of the nodes fail and actors have to be recreated on the other node?
To sum it up. There are some clustering strategies available. But how they deal with the state in case of node failure. Is any of them appropriate for a given use case?
I hope my explanations are clear. Shout if more info is needed.
Thanks for help!