Hello all, little and fast context, we have 8 docker swarm clusters (4 nodes each) where there are deployed as global service 4 kamailio per cluster. Each cluster runs 8 replicas of a call processing service/app (for the sake of this question we’ll assume the performance of this app is ok, no problems on what it does and how much it consumes in cpu/memory).
kamailio is configured to use http_client module to query the processing app (those queries are load balanced by the docker swarm cluster) in a very simple way, added below in this email.
Everything goes well, there’s an average of ~450 caps on each kamailio on peak hours.
Question and reason of this email is: Is this the best approach i can take? (the http_client) or maybe there’s a more efficient one for this scenario? maybe kemi, or other?
The processing app is written in golang.
We’re planning to add more traffic (significantly more) to this instances and i would like to know if there’s a better scenario, to explore it before this migration.
Thanks, regards
—
request_route { route(AF_SL); }
route[AF_SL] { if(is_method("ACK")){ exit; } if(is_method("REGISTER")){ sl_reply("200", "OK"); exit; } if(is_method("OPTIONS")){ sl_reply("200", "OK"); exit; } if(is_method("CANCEL")){ sl_reply("200","OK"); sl_reply("487","Request Terminated"); exit; }
if(is_method("INVITE")){ if ($hdr(X-Carrier-In)!="" && $hdr(Organization)!="" && $hdr(X-SBC-Type)!="") { sl_reply("100","Trying"); $var(retCode) = http_client_query("http://cbrcre:3001/cbrcre/v1/callHandler%22,%27xsbct=$(hdr(X-SBC-Type)%7Bs.e...)', "$var(result)"); xlog("L_INFO", "*************** RESULT: $var(result)\n\n"); jansson_get("response_code", "$var(result)", "$var(rc)"); switch($var(rc)){ case "200": if jansson_get("contact", "$var(result)", "$var(ct)") == true { append_branch("$var(ct)"); } if jansson_get("callinfo", "$var(result)", "$var(cinfo)") == true { append_to_reply("Call-Info: $var(cinfo)\r\n"); } if jansson_get("pai", "$var(result)", "$var(pai)") ==true { append_to_reply("P-Asserted-Identity: $var(pai)\r\n"); } if jansson_get("xfrom", "$var(result)", "$var(xfrom)") ==true { append_to_reply("X-From: $var(xfrom)\r\n"); } if jansson_get("identity", "$var(result)", "$var(identity)") ==true { append_to_reply("Identity: $var(identity)\r\n"); } append_to_reply("X-Handled: ServiceBroker\r\n"); sl_send_reply("302", "Redirect"); break; default: jansson_get("reason","$var(result)","$var(reason)"); jansson_get("sbReason","$var(result)","$var(sbreason)"); append_to_reply("X-SBReason: $var(sbreason)\r\n"); sl_send_reply("$var(rc)", "$var(reason)"); } exit; } xlog("L_ERR","missing xci or org or sbct"); sl_send_reply("608", "SBK Rejected"); } }