выбор транка
изменение последовательность выбора транков
Сообщений: 147
|
Re: выбор транка
1. Вы надеетесь на рандом, думая что он будет рандомить абсолютно по статистике
2. Вы предлагаете обьеденить линии в группы и селектить по группам, при этом обьем кода настроек увеличивается пропорционально количеству групп
3. Ваш алгоритм сложнее, при этом не имеет видимых преимуществ (например универсальность)
Я все правильно перечислил ? )
сам перебирает линии в потоке
Ссылку на информацию, где написано что * перебирает линии в группе по порядку а не от 1 по возрастающей с переходом по занятости.
|
Сообщений: 1573
|
Re: выбор транка
iye, если хватает знаний, то прочитайте мой конфиг ... (при возможности размышлять виртуально, не сложно добавить столько транков - сколько нужно)
С чего вы взяли, что нужно перебирать линии в потоке (Е1)? Кроме вас - это никому и в голову не придет ... (не без исключений)
У вас похоже сервер с потоком - отсюда такое направление мышления.
Обычно таким образом нужно перебирать IP-транки, а не каналы в потоке. Каналы перебираются и так, заданием параметров команды Dial ...
По поводу алгоритма - он соответствует условию - "начинать не (обязательно) с первого и прогонять по кругу" ... Что в конечном итоге - распределяет (более равномерно) нагрузку. Алогоритм обкатан годами ...
iue: Ссылку на информацию, где написано что * перебирает линии в группе по порядку а не от 1 по возрастающей с переходом по занятости.
Я вам выше дал описание возможных алгоритмов ... А теперь, опять, включайте "виртуализацию" и к этим возможностям добавьте "тонкое группирование каналов" ... (если вам такое нужно)
Мне всегда хватало - g(n),G(n)
|
Сообщений: 147
|
Re: выбор транка
Да что же вы мне все пеняете недостатком знаний ? ) В каком посте я показал неинформированность в каком - либо плане ? )
С чего вы взяли, что нужно перебирать линии в потоке (Е1)?
Ответ:
исходящии линии по кругу
В заголовке треда транк, в теле стартового сообщения про линии. Из этого и исходил. В воипных каналах понятие линии разве что распространяется на количество одновременных подключений ... Приведенный мной код будет работать на всех DAHDI устройствах (не только Е1).
|
Сообщений: 1573
|
Re: выбор транка
))) iye, поймите, ваш алгоритм делает тоже самое, что обычная команда:
exten => _X.,n,Dial(DAHDI/g1/${EXTEN}))
Объясню дальше:
Допустим - у вас есть три транка (IP или FXO), которые вы хотите нагрузить более менее - равномерно.
При простом, "тупом", переборе, первый в списке - всегда будет более нагруженным (более использованным).
По этому используется рандомайзер!
По большому счету - получается кластеризация ...
|
Сообщений: 147
|
Re: выбор транка
Нет. Не то же самое. Еще раз попрошу: приведите ссылку где написано что линии в транкгруппе выбираются круговым перебором а не по возрастающей от 1 и выше с переходом на линию с более высоким порядковым номером по состоянию занято.
Ваш алгоритм понятен. При использовании глобальных переменных и необходимости _гарантированно_ распределять звонки между n-ным количеством транков я бы сделал так:
[globals]
OPER=0
[main]
exten=> _X.,1,Set(GLOBAL(OPER)=$[${OPER} + 1])
exten=> _X.,n,GotoIF($[${OPER} >= ${MAX_VALUE}?:not_max])
exten=> _X.,n,Set(GLOBAL(OPER)=1)
exten=> _X.,n(not_max),Dial(SIP/oper_${OPER}/${EXTEN},60)
exten=> _X.,n,Hangup()
Отказоустойчивость можно организовать макросом с переходом по состоянию после диала, если оно надо.
|
Сообщений: 1573
|
Re: выбор транка
exten => _X.,1,Set(GATE=${RAND(1|30)})
exten => _X.,n,Set(COUNT=30)
exten => _X.,n,Set(RET=1)
exten => _X.,n(start),GotoIf($["${RET}" > "${COUNT}"]?hangup)
exten => _X.,n,Set(RET=$[${RET} + 1])
exten => _X.,n,Dial(SIP/peer${GATE}/${EXTEN})
exten => _X.,n,Set(GATE=$[${GATE} + 1])
... ; Здесь можно анализировать DIALSTATUS (что бы не перезванивать по BUSY и т.д.)
exten => _X.,n,Set(GATE=${IF$[${GATE} > 30]?1)})
exten => _X.,n,Goto(start)
exten => _X.,n(hangup),Hangup
Вот сжатый вид того же самого. (менее понятный для объяснения)
У вас пока нет отказоустойчивости и ограничения от зацикливания ...
|
Сообщений: 147
|
Re: выбор транка
Последняя строка моего предыдущего сообщения .. думаете мне слабо или вам интересно как я это сделаю ? )
|
Сообщений: 1573
|
Re: выбор транка
iye: Последняя строка моего предыдущего сообщения .. думаете мне слабо или вам интересно как я это сделаю ? )
Ну уж напишите, а там посмотрим ... (я это за вас уже сделал. "Отвлекают" работой - некогда дискутировать ...)
iye: На поток Е1 будете писать 30 условий ? )
весь тред, после этого "умозаключения" ...
|
Сообщений: 147
|
Re: выбор транка
[globals]
OPER=0
[main]
exten=> _X.,1(start),Set(GLOBAL(OPER)=$[${OPER} + 1])
exten=> _X.,n,GotoIF($[${OPER} >= ${MAX_VALUE}?over:not_max])
exten=> _X.,n,Set(GLOBAL(OPER)=1)
exten=> _X.,n(not_max),Dial(SIP/oper_${OPER}/${EXTEN},60)
exten=> _X.,n,GotoIF($[${DIALSTATUS} == CHANUNAVAIL]?start)
exten=> _X.,n(over),Hangup()
Как то так.
весь тред, после этого "умозаключения" ...
Каждый понимает прочитанное в своем контексте. Я объяснил выше, почему я так отреагировал на ваш код ). И, возможно, кому то будет полезна наша переписка ).
|
Сообщений: 1573
|
Re: выбор транка
Нет-нет-нет ... )
OPER=0
[main]
exten=> _X.,1(start),Set(GLOBAL(OPER)=$[${OPER} + 1])
exten=> _X.,n,GotoIF($[${OPER} >= ${MAX_VALUE}?over:not_max])
exten=> _X.,n,Set(GLOBAL(OPER)=1) ; сюда вызов не попадет никогда ...
exten=> _X.,n(not_max),Dial(SIP/oper_${OPER}/${EXTEN},60)
exten=> _X.,n,GotoIF($[${DIALSTATUS} == CHANUNAVAIL]?start)
exten=> _X.,n(over),Hangup()
Не рабочая схема ... ) А вы говорите ...
Даю подсказку - работая в данном случае с одной переменной - вы не достигнете нужного результата ... )
|
|