Яндекс.Метрика

Курс Zabbix: мониторинг Asterisk и VoIP

Курс Zabbix: мониторинг Asterisk и VoIP с 8 сентября по 12 сентября

Количество
свободных мест

8 Записаться

Дистанционные курсы по Asterisk

Дистанционные курсы по Asterisk с 18 августа по 24 августа

Количество
свободных мест

2 Записаться

Курсы по Mikrotik MTCRE

Курсы по Mikrotik MTCRE с 8 декабря по 11 декабря

Количество
свободных мест

6 Записаться
«Kонсистентное хеширование» в Kamailio
8
Мастер-класс
Антон Ершов
«Kонсистентное хеширование» в Kamailio
скачать презентацию

«Kонсистентное хеширование» в Kamailio

С 2014 года накоплен опыт работы с Asterisk, а также частично с Kamailio и OpenSIPS. Параллельно выполняются задачи по проектированию SIP-инфраструктуры и балансировке VoIP-трафика. Рассматривается практическая задача, возникшая в эксплуатации, и подход к её решению.

Тематика — балансировка входящих звонков от операторов связи, которые не умеют распределять вызовы по схеме Round Robin. В качестве примера — ВАТС Ростелекома, а также некоторые региональные операторы.

Постановка задачи

Исходная схема:

  • Две SBC (Session Border Controller), без Anycast.
  • Несколько Asterisk-серверов за SBC.
  • Подключённые клиенты и, возможно, WebRTC-шлюзы.
  • Два транка от оператора связи.

Ограничение: оператор связи не умеет распределять входящие вызовы по принципу Round Robin. Доступны лишь два варианта:

  1. Отправка всех вызовов на одну ноду.
  2. Стратегия «Ring All» — одновременная отправка вызова на все ноды.

Проблема:

  • При отправке всех вызовов на одну ноду — перегрузка одной точки и простаивание остальных.
  • При Ring All звонок приходит одновременно на все SBC, далее каждая SBC маршрутизирует вызов на свои Asterisk’и. В результате один и тот же вызов может быть обработан несколькими серверами, что приводит к сбоям в статистике, «пустым» соединениям и жалобам операторов.

Теоретическая основа — консистентное хэширование

Консистентное хэширование применяется в распределённых системах для равномерного распределения нагрузки между узлами, минимизируя перераспределение при изменении количества узлов.

В классической реализации:

  • Числовая прямая от 0 до 2³² сворачивается в кольцо.
  • Узлы размещаются на кольце с учётом их мощности.
  • Данные распределяются по кольцу в сторону ближайшего узла по часовой стрелке.

Для VoIP-задачи модель адаптирована под «временное кольцо», где в качестве диапазона используется минута (0–59 секунд), а сегменты времени («тайм-слоты») соответствуют выбранным периодам обработки.

Принцип реализации в VoIP

Формирование временного кольца:

  • Минута делится на тайм-слоты длиной T секунд.
  • Количество тайм-слотов K = 60 / T.

Определение ноды для входящего вызова:

  • Из метки времени SIP-запроса (INVITE) извлекаются секунды.
  • Вычисляется номер тайм-слота (секунды / T).
  • Номер тайм-слота делится по модулю на количество нод M.
  • Результат указывает, какая нода должна обработать вызов.

Фильтрация вызовов:

  • Если текущая нода не является «назначенной» для этого тайм-слота — возвращается код SIP 503 (Service Unavailable), оператор выполняет фейловер на другую ноду.

Преимущества подхода

  • Атомарность — не требуется внешний контроллер, Redis или база данных.
  • Простота — весь расчёт выполняется в Kamailio или OpenSIPS локально.
  • Минимум зависимостей — каждая нода автономно принимает решение, обрабатывать ли вызов.

Ограничения и нюансы

  1. Синхронизация времени. Требуется точное время на всех нодах (NTP обязателен).
  2. Отслеживание живых нод. В случае выхода из строя ноды необходимо динамически уменьшить количество активных нод в расчётах.Возможно использование health check и RPC-интерфейсов Kamailio для корректировки M.
  3. Особенности обработки SIP. Необходимо корректно отрабатывать не только первичные INVITE, но и реинвайты. SIP 503 подходит для фейловера у Ростелекома, но поведение разных операторов может отличаться.

Заключение

Метод консистентного хэширования по времени позволяет:

  • Обеспечить равномерное распределение входящих вызовов при Ring All.
  • Убрать простои и перегрузку отдельных нод.
  • Реализовать решение без внешних зависимостей и сложной инфраструктуры.

При этом подход требует чёткой синхронизации времени и механизмов динамического пересчёта числа активных нод. В ряде случаев он может быть проще и дешевле, чем развёртывание Anycast или сложных кластерных решений, особенно при работе с «жёсткими» операторами связи, не поддерживающими гибкую балансировку.

Ежегодная конференция по Asterisk 2025!

Билеты уже в продаже!

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

Наши
клиенты

Посмотреть все