RealTime в Asterisk: архитектура и конфигурация

RealTime в Asterisk: архитектура и конфигурация с 5 октября по 9 октября

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

8 Записаться

Курсы по Mikrotik MTCNA

Курсы по Mikrotik MTCNA с 6 апреля по 10 апреля

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

7 Записаться

Курс по Zabbix

Zabbix: мониторинг Asterisk и VoIP с 7 сентября по 11 сентября

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

8 Записаться
Как не утонуть в собственном коде: об устойчивой разработке в телекоме
15
Доклад
Дмитрий Борисов
Как не утонуть в собственном коде: об устойчивой разработке в телекоме

В процессе развития любого технологического проекта наступает момент, когда старые методы работы, которые отлично тянули MVP, внезапно превращаются в гири на ногах. Обычно это происходит через год-полтора активной разработки. Деньги вроде есть, команда растет, новых людей нанимают пачками, но вот парадокс — скорость выпуска фич не увеличивается, а иногда даже падает. Ветераны проекта завалены вопросами, новички месяцами «вдупляют» в код, а любая попытка что-то исправить ломает систему в самом неожиданном месте.

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

Ловушка роста: почему новые люди не помогают

Самая большая боль, с которой сталкиваются проекты после успешного старта — это резкий рост порога входа. В начале всё просто: пара человек сидит в одной комнате (или чате), все всё знают, решения принимаются мгновенно. Но когда команда разрастается до 15–20 человек, эта магия исчезает. Новичок приходит, открывает код и… ничего не понимает. Он не может просто взять и сделать задачу, потому что для этого нужно знать историю всех костылей за последние два года.

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

Что обычно мешает масштабироваться:

  • Сверхсвязность: когда вы меняете цвет кнопки, а у вас отваливается база данных.
  • Отсутствие границ: никто точно не знает, где заканчивается один модуль и начинается другой.
  • Культ «героев»: когда есть один человек, который знает всё, и без его одобрения ничего не деплоится.

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

Документация: не «как», а «почему»

Есть такое модное мнение, что хороший код сам себя документирует. На деле это полная чушь. Код может подсказать, как работает конкретный алгоритм, но он никогда не расскажет, почему было принято именно такое решение. Почему выбрали этот протокол? Почему здесь стоит ограничение? Почему нельзя было сделать проще?

Без ответов на эти «почему» любая правка превращается в лотерею. Чтобы команда работала слаженно, документация должна описывать архитектуру на верхнем уровне. Не нужно расписывать каждую строчку, нужно дать человеку карту.

На что стоит тратить время при описании системы:

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

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

Изоляция компонентов: работай, не глядя на соседа

Главный секрет выживания крупных проектов — это жесткая изоляция. Каждый модуль должен быть черным ящиком. Ему должно быть плевать, как написан соседний компонент, лишь бы тот отдавал данные в нужном формате. В идеале стоит использовать общепринятые стандартные протоколы (S1AP, GTP, Diameter — если мы говорим о связи). Это дает возможность тестировать части системы по отдельности.

Если ваш модуль зависит от того, запустил ли коллега свой сервис на соседнем сервере — у вас проблемы. Намного эффективнее использовать симуляторы. Вы описываете интерфейс, пишете простенький симулятор, который отдает нужные ответы, и фигачите свою задачу. Вам не нужно ждать соседа, вам не нужно разворачивать «всю вселенную» у себя на ноутбуке.

Почему это важно для бизнеса:

  1. Параллельная разработка: команды не блокируют друг друга.
  2. Простота отладки: если что-то сломалось, вы сразу видите, в каком «ящике» проблема.
  3. Легкая замена: можно выкинуть старый модуль и написать новый, не переписывая всё остальное.

В сложных системах, где задействовано много сигнального трафика, часто требуется профессиональный аудит IP-ATC, чтобы найти узкие места. Тот же принцип работает и в разработке: если интерфейсы прозрачны, найти проблему — дело десяти минут. Если всё перемешано — это недели поиска багов.

Инфраструктура, которая не бесит

Разработчик должен заниматься кодом, а не настройкой окружения. Если для того, чтобы поправить мелкий баг, человеку нужно полдня разворачивать базу, очереди сообщений и десяток микросервисов, его продуктивность стремится к нулю. Окружение на компьютере программиста должно быть максимально близким к тому, что крутится на «боевых» серверах.

Использование Docker и Kubernetes сегодня — это уже стандарт. Это позволяет упаковать всё необходимое в контейнер и запустить одной командой. Но технологии — это только половина дела. Важно еще и обучение. Вместо того чтобы заставлять людей изобретать велосипеды, проще отправить их на профильные курсы по Asterisk или по тем технологиям, которые вы реально используете. Это выравнивает уровень команды и задает общие правила игры.

Автоматизация тестирования (CI/CD)

Это еще один критический момент. Ручное тестирование на этапе роста команды просто убивает проект. С каждой новой фичей количество проверок растет. В какой-то момент тестировщики (или сами разработчики) перестают успевать проверять старое, и в продакшен начинают лететь глупые баги. Только автоматика может гарантировать, что новые правки ничего не разломали.

Технический долг и организационные костыли

Техдолг есть у всех. На этапе MVP — это нормально, там нужно быстро бежать и проверять гипотезы. Но когда проект встал на рельсы, эти «временные решения» начинают требовать проценты. Самая опасная ситуация — когда техдолг становится настолько огромным, что команда тратит 90% времени на поддержку старых костылей и только 10% на новые задачи.

Борьба с этим — задача не только техническая, но и организационная. Нужно уметь вовремя сказать «стоп» и выделить время на рефакторинг.

Приемы, которые помогают держать проект в тонусе:

  • Владельцы компонентов: за каждый блок отвечает конкретный человек (или мини-команда), который следит за его чистотой.
  • Регулярная чистка бэклога: не копите задачи, которые никогда не будут сделаны.
  • Брейнштормы по архитектуре: обсуждайте глобальные изменения до того, как начнете их кодить.

Иногда старая система настолько прогнивает, что никакие заплатки не помогают. В таких случаях требуется полная модернизация АТС или переезд на новую платформу. Это больно, дорого, но часто это единственный способ не закрыть проект через полгода из-за невозможности его развивать.

Как не завязнуть в коммуникациях

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

Брейнштормы — это круто, но они не должны превращаться в базар. У каждой встречи должна быть цель. Например, если планируется сложная интеграция Asterisk с Active Directory, соберите тех, кто в теме, зафиксируйте протоколы взаимодействия и расходитесь работать. Не нужно тащить на обсуждение всю компанию.

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

 

Заключение

Чтобы проект не загнулся под собственным весом, нужно вовремя переключить тумблер из режима «быстро фигачим» в режим «строим систему». Изоляция модулей, понятные интерфейсы и автоматизация — это те вещи, которые позволяют команде расти без потери скорости.

Главное — помнить, что архитектура должна служить людям, а не наоборот. Если вашим разработчикам удобно работать, если им не нужно быть «археологами» и ждать одобрения каждого шага от «гуру», то проект будет жить и развиваться. Масштабирование — это всегда про порядок и прозрачность, а не про количество строк кода или число людей в офисе.

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

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

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

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

Наши
клиенты

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