Hello,


Sorry for the long post, but I want to provide some context. I am a CS PhD 
student at UIUC focusing on problems related to replication and distributed 
systems. We are exploring using Akka for a research problem related to 
automatically configuring Actor replication.

 

Actor frameworks have been extensively adopted for implementing shared 
nothing applications because they enable horizontal scaling. Scaling 
stateful actors through replication has an overhead of reconciliation for 
providing consistency guarantees. At one end, if the application requires 
eventual consistency, the overhead is minimal as the reconciliation can 
happen in the background, away from the fast path. On the other end, for 
strong consistency guarantees, every additional actor replica instance can 
slow the overall execution. The problem has similarities with storage 
systems where replication is necessary to scale read/write operations. 

 

We believe that the actor framework should flexibly tradeoff scalability 
for consistency based on the application's performance and/or consistency 
requirement.  There can be consistency guarantees enforced by the 
application for correctness. An application may not tolerate consistency 
below read-my-write. In this work, we want to explore the tradeoffs 
involved in building such a system that take in these application 
requirements and tries to decide the number of actors to create and what 
consistency to support. This is an online problem and the decisions can 
change based on incoming workload characteristic. Similar projects have 
addressed choosing consistency or the replica configuration, but to the 
best of our knowledge no prior work has addressed both or the issue in an 
actor-based framework. Pileus(http://dl.acm.org/citation.cfm?id=2991109) 
looks into the problem of infering consistency from latency SLA but they 
did not handle replica creation. "Take me to your leader"(
http://dl.acm.org/citation.cfm?id=2824047) handles replica creation but it 
does not guarantee latency SLAs.

 
To implement our prototype, we are utilizing three Akka modules --  Router 
with resizer, Cluster, and Distributed Data. Routers in Akka support actor 
scale out with load (using resizer). We want the routers to be 
cluster-aware because web applications, which is a typical use-case runs 
logic in a backend cluster. The distributed data library in Akka provides 
simple apis for state reconciliation among routees with different 
consistency guarantees (WriteLocal, WriteQuorum, etc). Pool based cluster 
aware routers typically can only manage a fixed number of routees specified 
programmatically or through config. They do not support on-demand resizing 
unlike normal routers. Enabling this can help us with our basic setup. If 
there are some fundamental limitations to doing this, it would be great if 
you can suggest another way in which we can create the same setup. The 
current code is hosted at 
https://github.com/mghosh4/actor-scaling/tree/master/MWMRAkka/akka-sample-distributed-data-java

Thanks and Regards,
Mainak

-- 
>>>>>>>>>>      Read the docs: http://akka.io/docs/
>>>>>>>>>>      Check the FAQ: 
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>>      Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups "Akka 
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to