Lua в нагруженных
телеком-системах
Борисов Дмитрий
Какие есть варианты?
FreeSWITCH
Стабильность Производительность
Интегрируемость Функциональность
Session Border Controller
Зачем?
• Пассивный SIP-трафик
• Необходимость
балансировки нагрузки
Какие варианты:
• kamailio
• opensips
heartbeat vs pacemaker
Split brain
Отказоустойчивость kamailio
Отказоустойчивость FreeSWITCH
Отказоустойчивость FreeSWITCH
MySQL 5.7
• Отказоустойчивость
• Репликация
• Хранение документов
• mysqlrouter
http://bit.ly/mysql-innodb-cluster
Конфигурация kamailio
route[REQINIT] {
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if(!sanity_check("1511", "7"))
{
xlog("Malformed SIP message from $si:$spn");
exit;
}
}
kamailio.cfg
Конфигурация kamailio
function ksr_route_registrar()
if KSR.pv.get("$rm")~="REGISTER" then return 1; end
if KSR.isflagset(FLT_NATS) then
KSR.setbflag(FLB_NATB);
-- do SIP NAT pinging
KSR.setbflag(FLB_NATSIPPING);
end
if KSR.registrar.save("location", 0)<0 then
KSR.sl.sl_reply_error();
end
KSR.x.exit();
end
route[REQINIT] {
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
}
if(!sanity_check("1511", "7"))
{
xlog("Malformed SIP message from $si:$spn");
exit;
}
}
kamailio.cfg
XML-конфигурация FreeSWITCH
<configuration name="hiredis.conf" description="mod_hiredis">
<profiles>
<profile name="default">
<connections>
<connection name="primary">
<param name="hostname" value="172.18.101.101"/>
<param name="password" value="redis"/>
<param name="port" value="6379"/>
<param name="timeout_ms" value="500"/>
</connection>
<connection name="secondary">
<param name="hostname" value="localhost"/>
<param name="password" value="redis"/>
<param name="port" value="6380"/>
<param name="timeout_ms" value="500"/>
</connection>
</connections>
<params>
<param name="ignore-connect-fail" value="true"/>
</params>
</profile>
</profiles>
</configuration>
XML-дерево конфигурации FreeSWITCH
Lua dialplan FreeSWITCH
ACTIONS = {}
...
if targetDst.prefix ~= '' then
bridgeStr = string.format("sofia/external/%s#%s@%s",
targetDst.prefix,
session:getVariable("destination_number"),
targetDst.gw)
else
bridgeStr = string.format("sofia/external/%s@%s",
session:getVariable("destination_number"),
targetDst.gw)
end
table.insert(ACTIONS,{"bridge",bridgeStr})
Доставка XML во FreeSWITCH
nginx/openresty
http://bit.ly/fs-xml-generator
Схема организации АТС
Интерфейс управления АТС
Расширение системы
Борисов Дмитрий
borik_ints
Dborisov@mail.ru
+7 (905) 723-97-18
http://bit.ly/fs-xml-generator
http://bit.ly/mysql-innodb-cluster
http://quasar-framework.org/
Я готов ответить на
вопросы

Lua в нагруженных телеком-системах / Дмитрий Борисов (ИП Борисов Дмитрий Николаевич)

Editor's Notes

  • #2 Добрый день! Повторюсь: зовут меня Борисов Дмитрий, я фрилансер и занимаюсь всякими АТС.
  • #3 Для того, что бы Вы поняли о чем я буду говорить, предлагаю представить себе ситуацию: обед, Вы расслабились за чашечкой чая и тут у Вас звонит телефон. Вы берете трубку и в ней приятнейший женский голос произносит что-то вроде: «Здравствуйте, Василь Петрович! Меня зовут Мария. Не уделите ли Вы мне минуточку Вашего внимания? Я хотела бы…