Я разрабатываю на Erlang/OTP системы, для которых непрерывная работа — не пожелание, а обязательное условие. Ко мне приходят, когда счёт идёт на девятки после запятой в аптайме: биллинговые ядра, сигнальные шлюзы, обработчики очередей, платформы обмена сообщениями, узлы для интернета вещей и любые сервисы, где сотни тысяч одновременных соединений должны жить в одном узле и не мешать друг другу. Erlang создавался в телекоме именно для такой задачи, и я использую его сильные стороны так, как они задумывались изначально.
Основа моего подхода — библиотека OTP и её проверенные абстракции. Каждое соединение, задание или сессию я выношу в отдельный лёгкий процесс, выстраиваю дерево супервизоров, где ошибка гасится в самом маленьком узле и не расползается по системе, и опираюсь на принцип «пусть падает»: вместо громоздкой обработки исключений процесс просто перезапускается в чистое состояние. Поведения gen_server и gen_statem, изоляция состояния, аккуратная работа с сообщениями между процессами — всё это даёт код, который проще читать и на порядок легче сопровождать под нагрузкой.
Отдельно закрываю эксплуатационную сторону, ради которой BEAM и выбирают: горячее обновление кода без остановки сервиса и обрыва активных сессий, механизмы обратного давления, чтобы всплеск трафика не положил кластер, распределение узлов по нескольким серверам с кластеризацией, а также трассировку и метрики для наблюдения за живой системой. Берусь как за проект с чистого листа — от архитектуры и первого релиза до боевой эксплуатации, — так и за спасение существующего кода на Erlang, который перестал держать нагрузку. Сдаю результат с тестами, нагрузочными замерами и документацией, чтобы систему могла вести ваша команда.
Основные направления работы:
— Проектирование деревьев супервизоров и OTP-приложений
— Моделирование процессов, gen_server и gen_statem, сборка релизов
— Распределение узлов, кластеризация и передача состояния
— Горячее обновление кода и деплой без простоя
— Нагрузочное тестирование, трассировка и стабилизация продакшена
Основа моего подхода — библиотека OTP и её проверенные абстракции. Каждое соединение, задание или сессию я выношу в отдельный лёгкий процесс, выстраиваю дерево супервизоров, где ошибка гасится в самом маленьком узле и не расползается по системе, и опираюсь на принцип «пусть падает»: вместо громоздкой обработки исключений процесс просто перезапускается в чистое состояние. Поведения gen_server и gen_statem, изоляция состояния, аккуратная работа с сообщениями между процессами — всё это даёт код, который проще читать и на порядок легче сопровождать под нагрузкой.
Отдельно закрываю эксплуатационную сторону, ради которой BEAM и выбирают: горячее обновление кода без остановки сервиса и обрыва активных сессий, механизмы обратного давления, чтобы всплеск трафика не положил кластер, распределение узлов по нескольким серверам с кластеризацией, а также трассировку и метрики для наблюдения за живой системой. Берусь как за проект с чистого листа — от архитектуры и первого релиза до боевой эксплуатации, — так и за спасение существующего кода на Erlang, который перестал держать нагрузку. Сдаю результат с тестами, нагрузочными замерами и документацией, чтобы систему могла вести ваша команда.
Основные направления работы:
— Проектирование деревьев супервизоров и OTP-приложений
— Моделирование процессов, gen_server и gen_statem, сборка релизов
— Распределение узлов, кластеризация и передача состояния
— Горячее обновление кода и деплой без простоя
— Нагрузочное тестирование, трассировка и стабилизация продакшена