Hi All,
I'm testing carrierroute module on version: kamailio 1.5.4-notls (i386/linux).
I'm distributing calls to a group of Asterisk servers, all in the same carrier and domain, wanted to load balance the calls and I'm curious how this works. I see the 'probability' parameter in the carrierroute table and set it to equal value across all servers, I have 4 servers I'm sending calls to, so I set each prob value to '0.25'. I'm testing with sipp and hashing over call_id so this is the same for every call. I send 40 calls and the distribution of calls to the asterisk servers are 11, 12, 6, 11, pretty close to even but not 100%.
How does the distribution algorithm work for carrieroute? Does it statefully track all active calls and load balance across each server in destination group? Is there another algorithm that can offer that can get closer to a round robin effect?
Another question is do I need to include the record_route() and the t_check_trans() functions prior to calling the carrierroute functions? I see in the debug "DBG:core:forward_reply: found module tm, passing reply to it" and dialogs seem to process fine, so does the carrierroute module handle those requirements for stateful processing?
Thanks.
JR
JR Richardson wrote:
Hi All,
I'm testing carrierroute module on version: kamailio 1.5.4-notls (i386/linux).
I'm distributing calls to a group of Asterisk servers, all in the same carrier and domain, wanted to load balance the calls and I'm curious how this works. I see the 'probability' parameter in the carrierroute table and set it to equal value across all servers, I have 4 servers I'm sending calls to, so I set each prob value to '0.25'. I'm testing with sipp and hashing over call_id so this is the same for every call. I send 40 calls and the distribution of calls to the asterisk servers are 11, 12, 6, 11, pretty close to even but not 100%
How does the distribution algorithm work for carrieroute? Does it statefully track all active calls and load balance across each server in destination group? Is there another algorithm that can offer that can get closer to a round robin effect?
Hello JR,
The distribution algorithm works by doing a CRC32 on the Call_id(I suppose you use cr_route not cr_prime_route), and dividing than number so it reflects the probability you gave . Your data sample is too small to show the correct distribution; if you can test with a 2000 calls scenario, and the Call-Id is randomized as it should, then the distribution will be uniform. The carrierroute module does not keep track of balanced calls.
Another question is do I need to include the record_route() and the t_check_trans() functions prior to calling the carrierroute functions? I see in the debug "DBG:core:forward_reply: found module tm, passing reply to it" and dialogs seem to process fine, so does the carrierroute module handle those requirements for stateful processing?
Thanks.
AFAIK, the decision to call record_route() is orthogonal with the carrierroute module. The same for stateful / stateless processing (you can use carrierroute module both stateless or statefull depending on what you want)
JR
Cheers Marius
On Wed, May 26, 2010 at 2:23 AM, marius zbihlei marius.zbihlei@1and1.ro wrote:
JR Richardson wrote:
Hi All,
I'm testing carrierroute module on version: kamailio 1.5.4-notls (i386/linux).
I'm distributing calls to a group of Asterisk servers, all in the same carrier and domain, wanted to load balance the calls and I'm curious how this works. I see the 'probability' parameter in the carrierroute table and set it to equal value across all servers, I have 4 servers I'm sending calls to, so I set each prob value to '0.25'. I'm testing with sipp and hashing over call_id so this is the same for every call. I send 40 calls and the distribution of calls to the asterisk servers are 11, 12, 6, 11, pretty close to even but not 100% How does the distribution algorithm work for carrieroute? Does it statefully track all active calls and load balance across each server in destination group? Is there another algorithm that can offer that can get closer to a round robin effect?
Hello JR,
The distribution algorithm works by doing a CRC32 on the Call_id(I suppose you use cr_route not cr_prime_route), and dividing than number so it reflects the probability you gave . Your data sample is too small to show the correct distribution; if you can test with a 2000 calls scenario, and the Call-Id is randomized as it should, then the distribution will be uniform. The carrierroute module does not keep track of balanced calls.
Hello,
I am using cr_route, not cr_prime_route. I tested with large call samples, 2K and 10K, the call distribution was within 1% accross all servers, very nice.
Another question is do I need to include the record_route() and the t_check_trans() functions prior to calling the carrierroute functions? I see in the debug "DBG:core:forward_reply: found module tm, passing reply to it" and dialogs seem to process fine, so does the carrierroute module handle those requirements for stateful processing?
Thanks.
AFAIK, the decision to call record_route() is orthogonal with the carrierroute module. The same for stateful / stateless processing (you can use carrierroute module both stateless or statefull depending on what you want)
JR
Cheers Marius
Thanks.
JR