Перейти к содержимому

Высокая доступность

Контакт-центр, который переживает отказ сервера

Сервер выходит из строя не тогда, когда удобно. Отказоустойчивая схема означает, что линия продолжает принимать звонки без вашего участия — а чинить сломанное можно в рабочее время, а не ночью под давлением.

Asterisk active–passive · MySQL active–active
MySQL
active-active: пишут оба узла
Asterisk
active-passive: один в строю, второй наготове
Секунды
на автоматическое переключение
Без дежурного
переключение не ждёт человека

Почему схема несимметрична

База работает на обоих узлах, телефония — только на одном

Это не компромисс и не экономия. Причина в том, что база и разговор — принципиально разные вещи.

База данных · active-active

Два одинаковых журнала

Данные — это записи. Два узла могут принимать их одновременно и сверять между собой, поэтому потеря одного не требует переключения: второй уже содержит всё то же самое и продолжает работать так, будто ничего не произошло.

Для руководителя: как два бухгалтера, которые ведут одну и ту же книгу и постоянно сверяются. Заболел один — книга цела.

Телефония · active-passive

Один диспетчер на смене

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

Для руководителя: сменщик сидит рядом и готов принять пост, но говорить в одну трубку вдвоём невозможно.

Что меняется в момент аварии

Один сервер или два: разница в деньгах

Что происходит с линией после отказа сервера — на одной шкале времени.

Один сервербез резерва

Линия молчит, смена простаиваетАварийный ремонт

Отказоустойчивый контурдва узла

Звонки идут через второй узел, ремонт — в рабочее время
  • Первая минута после отказа

    ✕Линия молчит. Клиенты слышат короткие гудки или тишину.

    ✓Новые звонки уже идут через второй узел. Разговоры, шедшие в момент отказа, оборвались — клиент перезванивает и попадает на оператора.

  • Что делает смена

    ✕Операторы простаивают и не могут ни принять обращение, ни перезвонить.

    ✓Софтфон переподключается сам. Работа продолжается, супервизор видит короткий провал в статистике.

  • Данные и записи

    ✕История звонков за период с последней резервной копии под угрозой.

    ✓Данные записаны на обоих узлах одновременно. Терять нечего, восстанавливать нечего.

  • Ремонт

    ✕Аварийные работы немедленно, любой ценой, чаще всего ночью или в выходной.

    ✓Плановые работы в удобное окно: контур продолжает работать на втором узле.

Сценарии отказа

Что ломается и что из этого следует

Цвет — насколько это заметно бизнесу: где обслуживание не прервётся вовсе, а где вы всё-таки потеряете несколько разговоров.

Что отказалоКлиентыОператорыВосстановление
Активный сервер телефониикороткий сбой: Идущие разговоры обрываются, новые звонки проходятнезаметно: Софтфон переподключается автоматическинезаметно: Секунды, без участия человека
Один узел базы данныхнезаметно: Не замечают ничегонезаметно: Не замечают ничегонезаметно: Переключение не требуется
Канал оператора связинезаметно: Дозваниваются по резервному направлениюнезаметно: Не замечают ничегокороткий сбой: Секунды или минуты, зависит от договора с оператором
Связь между площадкаминезаметно: Обслуживание продолжается на активной площадкенезаметно: Не замечают ничегонезаметно: Автоматически, с защитой от расщепления кластера
Площадка целикомкороткий сбой: Дозваниваются, если вторая площадка вынесена отдельнокороткий сбой: Переходят на резервный контуркороткий сбой: Минуты, по заранее проверенному сценарию
  • незаметно
  • короткий сбой
  • простой

Как мы это строим

Начинаем с цены простоя, а не с железа

Сколько узлов и площадок нужно — следствие, а не отправная точка. Сначала считаем, во что обходится час молчащей линии.

Обсудить архитектуру
  1. Считаем допустимый простой

    Сколько стоит час молчащей линии именно для вас и какой перерыв бизнес переживёт. От этого зависит, нужна ли вторая площадка или хватит двух узлов в одной стойке — и сколько будет стоить решение.

  2. Проектируем схему под вашу инфраструктуру

    Определяем состав узлов, кворум базы, маршруты операторов связи и правила переключения. Вы получаете схему, смету и перечень того, что схема не закрывает.

  3. Собираем и переносим нагрузку

    Разворачиваем кластер на стенде, переносим трафик частями и держим путь отката на каждом шаге.

  4. Проводим учения по отказу

    Гасим активный узел намеренно и засекаем реальное время переключения. Резерв, который ни разу не проверяли, резервом не считается — эту проверку мы делаем при вас.

  5. Передаём мониторинг и сопровождаем

    Дежурная команда получает понятные сигналы: кто сейчас активен, синхронна ли база, цел ли кворум. Плюс регламент действий на случай аварии.

Вопросы

Что спрашивают перед решением

Короткие ответы; подробно разберём на встрече под вашу инфраструктуру.

Обязательно ли нужны два дата-центра?

Нет. Два узла в одной серверной уже закрывают отказ железа, диска или операционной системы — это большинство реальных аварий. Вторая площадка нужна, когда вы защищаетесь от потери здания, питания или канала целиком, и стоит она заметно дороже. Решение принимается на первом этапе, по допустимому простою.

Почему для базы говорят про три узла, а не два?

Если узлов ровно два и связь между ними пропала, каждый считает живым себя — данные разъезжаются. Поэтому в кластер добавляют третий голос: полноценный узел или лёгкий арбитр, который не хранит данные, а только участвует в голосовании. Стоит он копейки, а от расщепления спасает.

Разговоры точно оборвутся при отказе?

Те, что шли в эту секунду, — да. Живой разговор существует в памяти конкретного сервера, и перенести его на другой без разрыва нельзя. Честная формулировка звучит так: вы теряете несколько разговоров вместо всей линии на несколько часов. Клиент перезванивает и сразу попадает на оператора.

Что происходит с записями разговоров?

Записи кладутся на хранилище, которое переживает потерю узла: реплицируемый том или отдельное сетевое хранилище. Схему выбираем по объёму и требованиям к сроку хранения.

Можно начать с одного узла и добавить второй позже?

Да, и часто так и делают. Важно заложить схему сразу: разделение ролей, внешнюю базу, плавающий адрес. Тогда второй узел добавляется без переделки, а не превращается в отдельный проект.

А если нагрузка вырастет — схема это выдержит?

Отказоустойчивость и производительность решаются разными средствами. Резерв защищает от аварии, а рост нагрузки закрывается ёмкостью узлов и разделением ролей — телефония, база и аналитика разводятся по разным машинам. Ёмкость считаем от вашего профиля звонков на этапе проектирования.