Где применяют Erlang: реальные системы
Итоговый взгляд: какие системы построены на Erlang и почему.
Ниша Erlang — системы, требующие высокой конкурентности, непрерывной работы и устойчивости к сбоям: связь, обмен сообщениями, очереди, распределённые хранилища.
Мы прошли путь от истории языка до горячей замены кода. Теории и механизмов было много — завершим картину обзором реальных систем на Erlang. Это не просто список громких имён: каждый пример показывает, какую именно задачу язык решает лучше других, и вместе они очерчивают границу — для чего Erlang создан, а для чего лучше взять иной инструмент. Если держать в голове эти примеры, проще решать, подходит ли язык вашей будущей системе.
Мессенджеры: WhatsApp
Самый известный пример — WhatsApp. К моменту покупки компании небольшая инженерная команда обслуживала сотни миллионов пользователей и десятки миллиардов сообщений в день — соотношение пользователей на инженера в индустрии стало почти легендарным. Секрет в том, что Erlang идеально ложится на задачу мессенджера. Каждое пользовательское соединение — это отдельный лёгкий процесс; держать одновременно миллионы таких процессов на одном сервере для BEAM нормально. Сообщения летают между процессами по той же модели, что и внутри любой Erlang-программы, а падение одного соединения изолировано и не трогает остальные миллионы. То, что в других стэках требует армии серверов, сложных пулов потоков и хрупкой инфраструктуры синхронизации, на Erlang выражается естественно и почти буквально повторяет предметную область: один пользователь — один процесс.
Телеком: корни языка
Erlang родился в телекоме, в недрах компании Ericsson, и до сих пор там силён. Коммутаторы, биллинг, SMS-центры, сигнальные шлюзы — всюду, где нужна непрерывная работа и миллионы одновременных «звонков». Это не совпадение, а причинно-следственная связь: именно жёсткие требования телекома сформировали язык таким, какой он есть. Телефонная сеть должна быть доступна почти всегда — знаменитая планка «пять девяток» означает не более нескольких минут простоя в год. Она должна отвечать в мягком реальном времени, обрабатывать тысячи независимых вызовов параллельно и обновляться без остановки. Все известные нам черты Erlang — лёгкие процессы, «let it crash», супервизоры, горячая замена — это прямые ответы на эти требования. Изучая язык, вы по сути изучаете дистиллированный опыт построения телеком-систем.
Очереди сообщений: RabbitMQ
RabbitMQ — один из популярнейших брокеров сообщений в индустрии — написан на Erlang. Брокер очередей должен принимать, маршрутизировать и доставлять огромные потоки сообщений множеству клиентов, оставаясь устойчивым под нагрузкой и при частичных сбоях. Это снова та же форма задачи: множество одновременных соединений, у каждого своё состояние, и всё должно продолжать работать, даже если отдельные клиенты или узлы отваливаются. Модель акторов и OTP делают такую систему естественной: каждое клиентское соединение и каждая очередь — это процессы под супервизорами, изолированные друг от друга. Неудивительно, что инфраструктурное ПО такого рода — частый дом для Erlang: задача брокера почти дословно совпадает с тем, для чего язык задуман.
Базы данных и хранилища
Распределённые базы Riak и CouchDB построены на Erlang, и это тоже не случайный выбор. База, которая обещает работать на множестве узлов и переживать отказ отдельных машин, должна решать ровно те задачи, в которых Erlang силён: координировать узлы кластера, реплицировать данные, замечать сбои и восстанавливаться. Встроенная в платформу кластеризация «из коробки» — соединение узлов, прозрачная передача сообщений, мониторы — снимает с авторов базы половину низкоуровневой работы, которую в других экосистемах пришлось бы писать с нуля.
Особняком стоит Mnesia — база данных, поставляемая прямо в составе Erlang/OTP. Она хранит данные распределённо внутри того же кластера приложений, поддерживает транзакции и умеет держать таблицы как в памяти (на базе ETS), так и на диске. Её сильная сторона не в гигантских объёмах, а в тесной интеграции: данные живут рядом с кодом, в тех же термах Erlang, без отдельного сервера БД и без перевода типов. Для распределённого хранения конфигурации, сессий и состояния приложения это часто оказывается удивительно удобным решением.
Игры, финансы, IoT
Многопользовательские игровые серверы (множество одновременных игроков — множество процессов), биржевые и платёжные системы (надёжность и низкая задержка важнее сырой пропускной скорости), бэкенды интернета вещей (тысячи устройств-соединений, каждое со своим состоянием) — все эти области тяготеют к Erlang по одной и той же причине: высокая конкурентность плюс отказоустойчивость. Заметьте повторяющийся мотив. Это всегда системы, где много независимых сущностей живут одновременно, где общение идёт через ввод-вывод и сеть, и где сбой части не должен ронять целое. Стоит увидеть эту форму в своей задаче — и Erlang почти наверняка окажется удачным выбором, даже если ваша предметная область совсем не похожа на телефонию.
Когда Erlang — правильный выбор
| Подходит | Менее подходит |
| много одновременных соединений | тяжёлые численные расчёты |
| непрерывная работа без простоев | простые короткоживущие скрипты |
| устойчивость к частичным сбоям | работа с GPU/SIMD |
| распределённость по машинам | проекты без требований к надёжности |
Как работает под капотом этот выбор
Во всех успешных применениях повторяется один паттерн: сущность реального мира = процесс. Соединение пользователя, очередь, игрок, устройство — каждое становится изолированным процессом под надзором супервизора. Тогда нагрузка естественно распараллеливается планировщиками BEAM, сбои локализуются, а супервизоры обеспечивают самовосстановление. Именно это сочетание — конкурентность плюс отказоустойчивость — и есть причина, по которой выбирают Erlang.
Частые ошибки
- Брать Erlang под чисто вычислительную задачу. Для числодробилок есть более подходящие платформы.
- Игнорировать OTP «ради простоты». Именно OTP даёт ту надёжность, ради которой берут Erlang.
- Моделировать всё одним процессом. Сила — в разбиении системы на множество изолированных акторов.
Итоги
- WhatsApp, телеком, RabbitMQ, Riak/CouchDB — флагманские системы на Erlang.
- Общий паттерн: каждая сущность реального мира — отдельный изолированный процесс.
- Erlang силён в конкурентности, непрерывности и отказоустойчивости.
- Он менее уместен в тяжёлых вычислениях — выбирайте инструмент под задачу.