Hello,

I am redesigning a system that takes in messages on zmq and has to make 
certain decisions and return responses. As the system scaled we started to 
have performance bottle necks. Hence we turned to akka for handling all our 
concurrency needs. 
My system gets around 100 transactions[shopping basket] per minute. On each 
of such basket I create an Actor that handles a basket for individual 
customer. This actor has to call back end systems to see if the customer 
qualifies for something. So it creates a child actor
called Targeting actor which handles the http calls. Right now what i see 
if the http calls take around 1 second. So over all performance of my 
system has gone down. We backed traced it to the service that services the 
http call and it responds within 200 milliseconds. So I am not able to 
account for the additional 800 milliseconds that the targeting actor is 
taking. Each targeting actor for a Shopping basket can make several calls 
to targeting services. So our one minute for calling targeting service 
overall is 560 per minute. I have isolated the Targeting actor with its own 
dispatcher. Below are the config. We run on 16 core servers. Am I missing 
something. 

// This dispatcher is for ShoppingBasketActors which also are parent of 
targeting actor. They tell targeting actor to make the http call to backend 
services. 
blocking-io-dispatcher {
          type = Dispatcher
          executor = "thread-pool-executor"
          thread-pool-executor {
            fixed-pool-size = 200
          }
          
          throughput = 4
        }
        

      // This dispatcher is for the targeting actors. 
        blocking-io-dispatcher-targeting {
          type = Dispatcher
          mailbox-type = "some mailbox"
          executor = "thread-pool-executor"
          thread-pool-executor {
            fixed-pool-size = 200
          }

          throughput = 1
        }


Question is - 
1. Can I use work steal or balancing dispatchers to increase throughput. 
What happens when a thread is waiting on network i/o [like finishing 
http call]. is that thread swapped out to do something else 
2. Is there better configuration ? Is creating 200 threads for block i/o 
tasks safe ? 






-- 
>>>>>>>>>>      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 akka-user+unsubscr...@googlegroups.com.
To post to this group, send email to akka-user@googlegroups.com.
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