У меня есть большая реализация IVR с использованием FastAGI (24 E1 все делают вызовы FastAGI, пиковые значения около 80%, так что почти 600 каналов Asterisk вызывают FastAGI). Я не нашел простого способа балансировки нагрузки, но в моем случае есть разные вызовы FastAGI: один в начале вызова для проверки пользователя в базе данных, затем другой, чтобы проверить баланс пользователя или его наиболее недавние транзакции и еще одна транзакция.
Итак, я отправил все проверочные и простые запросы одному приложению на одном сервере и все вызовы транзакций другому приложению на другом сервере.
Грубым способом балансировки нагрузки, если у вас много входящих вызовов на каналах zaptel / dahdi, было бы использование разных групп для каналов. Например, предположим, у вас есть 2 сервера FastAGI и 4 E1, принимающих вызовы. Вы можете установить 2 E1 в группе g1 и 2 других E1 в группе g2. Затем вы объявляете глобальные переменные следующим образом:
[globals]
serverg1=ip_of_server1
serverg2=ip_of_server2
Затем в вашем плане набора номера вы называете FastAGI следующим образом:
AGI(agi://${server${CHANNEL(callgroup)}}/some_action)
На каналах, принадлежащих группе g1, которые преобразуются в serverg1, которые преобразуются в ip_of_server1; на каналах, принадлежащих группе g2, CHANNEL (callgroup) преобразуется в g2, поэтому вы получаете $ {serverg2}, который преобразуется в ip_of_server2.
Это не лучшее решение, потому что обычно звонки начинают поступать с одного промежутка, а затем с другого и т. Д., Так что один сервер получит больше работы, но это что-то.
Чтобы получить реальную балансировку нагрузки, я думаю, нам нужно написать шлюз балансировки нагрузки FastAGI, это неплохая идея ...