Can’t you use an async http client instead to avoid the blocking
altogether? E.g. Play WS or Akka HTTP.

/Patrik

lör 10 mars 2018 kl. 22:11 skrev Amit Chavan <achav...@gmail.com>:

> 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.
>

-- 
>>>>>>>>>>      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