This repository was created to document the work made on an new algorithm for Kamailio dispatcher module as well as the tools used and some test results
relative weight based load distribution with congestion detection
Congestion detection is done using average AVG (normal gateway latency) and EWMA EST (current gateway latency estimator)
congestion_ms : The estimated congestion in ms is EST - AVG and always >= 0
A larger alpha will result in an estimator with a longer memory and slower reaction time
Default value is “900 => 0.9” # meaning a new sample will weight 10% of the current AVG
modparam("dispatcher", "ds_latency_estimator_alpha", 900)
In this example the GW wills support up to 50ms of estimated congestion, therefore 50 is also the Cut-Off value. However, the GW will still be used if all the other GWs are also above their congestion threshold, in such case, load distribution will now be based on the ratio of congestion_ms each GW is facing.
INSERT INTO "dispatcher" VALUES(1,1,'sip:1.1.1.1:5072',0,12,'weight=50;rweight=50','');
INSERT INTO "dispatcher" VALUES(2,1,'sip:1.1.1.1:5073',0,12,'weight=50;rweight=50','');
INSERT INTO "dispatcher" VALUES(3,1,'sip:2.2.2.2:5072',0,12,'weight=50;rweight=50','');
INSERT INTO "dispatcher" VALUES(4,1,'sip:2.2.2.2:5073',0,12,'weight=50;rweight=50','');
A voip_perf user agent is generating 600CPS to a Kamailio load balancer that is configured with the default settings documented above, it will try to distribute the traffic to the 4 GW (voip_perf servers) evenly 25%/25%/25%/25%
- GW 1 : will be affected by the stress command shell script
- GW 2 : will be affected by the stress command and is permanently receiving an extra 150CPS shell script
- GW 3 : is performaning normaly shell script
- GW 4 : is performaning normaly shell script
type | test# | AVG 180 ms | AVG 200 ms | TIMEOUT | RECEIVED |
---|---|---|---|---|---|
lb off | 3 | 135 | 1728 | 251 | 49749 |
lb off | 4 | 038 | 953 | 337 | 49663 |
lb on (congestion detection) | 3 | 80 | 980 | 0 | 50000 |
lb on (congestion detection) | 4 | 11 | 915 | 0 | 50000 |
lb off (test_yul2.ods) | 5 | 157 | 688 | 0 | 50000 |
lb on (congestion detection) | 5 | 149 | 660 | 0 | 50000 |
lb off (test_yul.ods) | 6 | 179 | 709 | 216 | 49784 |
lb on (congestion detection) | 6 | 147 | 662 | 0 | 50000 |
- on the left side : (lb off) relative weight based load distribution is used
- on the right side : (lb on) relative weight based load distribution with congestion detection is used