Good to hear, I’ll start increasing the children to see what happens. It’s a 
good start point.

On the other hand, we have different Kamailio implementations where no http or 
any kind of ‘external integration’ is involved and we get a lot more calls, 
it’s very clear where the problem is :)

Thanks for you help (again) 

Enviado desde dispositivo móvil 

> El 25 ago 2024, a la(s) 1:47 a. m., Alex Balashov via sr-users 
> <[email protected]> escribió:
> 
> A few hundred CPS per node is impressive, but especially so when anything 
> with HTTP is involved! Kamailio has HTTP client modules, but there's no 
> pretending that being an HTTP client is natural or particularly performant 
> for Kamailio.
> 
> Since most--not all, but most--of the workload is I/O wait, you could get 
> away with just adding more children. The general principle that children 
> should not exceed CPUs, because they'd just fight for CPU, applies when the 
> workload is CPU-bound, or computational in nature. However, if most of the 
> time is spent waiting on something to come across a socket, e.g. from a 
> database or an HTTP server, you can overbook quite a bit relative to the CPUs.
> 
> You still don't want too many child processes, and I would be hard-pressed to 
> say exactly how many is too many, but 2:1 or 3:1 should be safe.
> 
> -- Alex
> 
>> On Aug 24, 2024, at 10:35 PM, Alexis Fidalgo <[email protected]> wrote:
>> 
>> it is. im dealing with this issue since a few weeks, i can push and add more 
>> cpu’s and more children and play with queues, timeouts, etc etc. but i know, 
>> im pretty sure that there’s a limit i can't surpass.
>> 
>> at this point im struggling on how to modify the http part (the api server) 
>> it would be great (and easy for me) if the execution pipelines can at least 
>> have some part where in can execute in parallel, but … a pipeline, why to 
>> execute following steps if not needed vs ‘execute and discard’ (and worst, 
>> some consumed webservices in the pipeline are transactional charged).
>> 
>> im happy, more that that, a docker swarm with 4 nodes with 10cpu/children 
>> each are handling ~1300 call attempls (invite,100,302,ack) per second, thats 
>> more than ok (and cpu/mem are low, really low, problem is the wait, no the 
>> power), but we need more (ill move to more cores/childrens and appeal to 
>> brute force by now to gain some time)
>> 
>> still seeing there’s no point to start using TM for a 100% stateless flow
>> 
>> 
>>>> On 24 Aug 2024, at 9:02 PM, Alex Balashov via sr-users 
>>>> <[email protected]> wrote:
>>> 
>>> Not overtly related to your most immediate question, but:
>>> 
>>> 1) "we're hitting a limit where all children become busy waiting for the 
>>> API to answer."
>>> 
>>> 2) "So i decided to move to http_async_client"
>>> 
>>> I'm not sure this is really going to solve your problem. You've hit 
>>> fundamental, thermodynamic kind of limits here. Using async here just 
>>> squeezes the balloon in one place and causes it to inflate in another.
>>> 
>>> It would be different if some of your workload were HTTP-dependent and 
>>> other parts of the workload were not. Doing the HTTP queries would free up 
>>> the core SIP workers to process other kinds of requests. That doesn't sound 
>>> like it's the case, so all you're really liberating is reply processing, 
>>> which, if this is a redirect server, is nonexistent anyway.
>>> 
>>> This matter might occasion some deeper reflection.
>>> 
>>> -- Alex
>>> 
>>>> On Aug 24, 2024, at 6:48 PM, alexis via sr-users 
>>>> <[email protected]> wrote:
>>>> 
>>>> Hello all, context first, we have an REST API that performs queries to 
>>>> external devices in the network (diameter to DRA's, REST to different 
>>>> servers) and based on n conditions returns the content for a Contact 
>>>> header to be used in a SIP 302.
>>>> 
>>>> Now we're consuming this API with http_client (synchronously) and as 
>>>> there's no way to speed up the API (pipeline executions, delays on 
>>>> external api's etc etc) we're hitting a limit where all children become 
>>>> busy waiting for the API to answer.
>>>> 
>>>> So i decided to move to http_async_client and started working on it on the 
>>>> lab with this first and base concept to test.
>>>> 
>>>> request_route {
>>>> 
>>>> 
>>>> #for testing purposes only
>>>> if(is_method("ACK")){
>>>> exit;
>>>> }
>>>>  $http_req(all) = $null;
>>>>  $http_req(suspend) = 1;
>>>>  $http_req(timeout) = 500;
>>>>  $http_req(method) = "POST";
>>>>  $http_req(hdr) = "Content-Type: application/json";
>>>>  jansson_set("string", "event", "sip-routing", "$var(cre_query)");
>>>>  xlog("L_INFO","API ASYNC ROUTING REQUEST: $var(cre_query)\n");
>>>>  $http_req(body) = $var(cre_query);
>>>>  t_newtran();
>>>>  http_async_query("http://192.168.86.128:8000/";, "CRE_RESPONSE");
>>>> }
>>>> 
>>>> http://192.168.86.128:8000/ receives the POST, randomly creates a delay 
>>>> between 0.5 and 1 second and responds (simulating the real api with an 
>>>> excess delay to probe the concept)
>>>> 
>>>> Then
>>>> 
>>>> route[CRE_RESPONSE] {
>>>>  if ($http_ok && $http_rs == 200) {
>>>>      xlog("L_INFO","CRE RESPONSE: $http_rb\n");
>>>> # for testing purpose, Contact content will be replaced from the received 
>>>> api response
>>>> append_to_reply("Contact: <sip:[email protected]>\r\n");
>>>>  send_reply(302,"Moved Temporarily");
>>>> exit;
>>>>  }
>>>>  send_reply(500, "Internal error");
>>>>  exit;
>>>> }
>>>> 
>>>> INVITE is received and processed, API is called, after API response, 302 
>>>> is replied and then an ACK (ignored by now).
>>>> 
>>>> Situation is that the 302 retransmitted
>>>> 
>>>> 37 1519.846253067 192.168.86.34 → 192.168.86.128 SIP/SDP 585 Request: 
>>>> INVITE sip:[email protected]:5060 |
>>>> 38 1519.848100380 192.168.86.128 → 192.168.86.34 SIP 318 Status: 100 
>>>> Trying |
>>>> 39 1520.094997642 192.168.86.128 → 192.168.86.34 SIP 407 Status: 302 Moved 
>>>> Temporarily |
>>>> 40 1520.102323728 192.168.86.34 → 192.168.86.128 SIP 453 Request: ACK 
>>>> sip:[email protected]:5060 |
>>>> 41 1520.591300933 192.168.86.128 → 192.168.86.34 SIP 407 Status: 302 Moved 
>>>> Temporarily |
>>>> 42 1521.591061065 192.168.86.128 → 192.168.86.34 SIP 407 Status: 302 Moved 
>>>> Temporarily |
>>>> 43 1523.591227956 192.168.86.128 → 192.168.86.34 SIP 407 Status: 302 Moved 
>>>> Temporarily |
>>>> 
>>>> 
>>>> 18(24) DEBUG: tm [t_reply.c:1703]: t_retransmit_reply(): reply 
>>>> retransmitted. buf=0x7f6d79745dc0: SIP/2.0 3..., shmem=0x7f6d75187fd8: 
>>>> SIP/2.0 3
>>>> 18(24) DEBUG: tm [t_reply.c:1703]: t_retransmit_reply(): reply 
>>>> retransmitted. buf=0x7f6d79745dc0: SIP/2.0 3..., shmem=0x7f6d75187fd8: 
>>>> SIP/2.0 3
>>>> 18(24) DEBUG: tm [t_reply.c:1703]: t_retransmit_reply(): reply 
>>>> retransmitted. buf=0x7f6d79745dc0: SIP/2.0 3..., shmem=0x7f6d75187fd8: 
>>>> SIP/2.0 3
>>>> 18(24) DEBUG: tm [timer.c:634]: wait_handler(): finished transaction: 
>>>> 0x7f6d75184cc8 (p:0x7f6d74f600c8/n:0x7f6d74f600c8)
>>>> 18(24) DEBUG: tm [h_table.c:132]: free_cell_helper(): freeing transaction 
>>>> 0x7f6d75184cc8 from timer.c:643
>>>> 
>>>> Any help to avoid the retransmission and make the transaction just finish 
>>>> right after the 302 will be appreciated.
>>>> 
>>>> regards
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> __________________________________________________________
>>>> Kamailio - Users Mailing List - Non Commercial Discussions
>>>> To unsubscribe send an email to [email protected]
>>>> Important: keep the mailing list in the recipients, do not reply only to 
>>>> the sender!
>>>> Edit mailing list options or unsubscribe:
>>> 
>>> --
>>> Alex Balashov
>>> Principal Consultant
>>> Evariste Systems LLC
>>> Web: https://evaristesys.com
>>> Tel: +1-706-510-6800
>>> 
>>> __________________________________________________________
>>> Kamailio - Users Mailing List - Non Commercial Discussions
>>> To unsubscribe send an email to [email protected]
>>> Important: keep the mailing list in the recipients, do not reply only to 
>>> the sender!
>>> Edit mailing list options or unsubscribe:
>> 
> 
> --
> Alex Balashov
> Principal Consultant
> Evariste Systems LLC
> Web: https://evaristesys.com
> Tel: +1-706-510-6800
> 
> __________________________________________________________
> Kamailio - Users Mailing List - Non Commercial Discussions
> To unsubscribe send an email to [email protected]
> Important: keep the mailing list in the recipients, do not reply only to the 
> sender!
> Edit mailing list options or unsubscribe:
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
To unsubscribe send an email to [email protected]
Important: keep the mailing list in the recipients, do not reply only to the 
sender!
Edit mailing list options or unsubscribe:

Reply via email to