Где применяют 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 силён в конкурентности, непрерывности и отказоустойчивости.
  • Он менее уместен в тяжёлых вычислениях — выбирайте инструмент под задачу.
Проверьте себя
1. Почему Erlang хорошо подошёл для мессенджера WhatsApp?
AИз-за быстрой графики
BКаждое соединение — лёгкий изолированный процесс; падение одного не трогает остальные
CИз-за встроенного GPU
DИз-за простого синтаксиса
2. Какой популярный брокер сообщений написан на Erlang?
AKafka
BRabbitMQ
CRedis
DNginx
3. Какой паттерн повторяется в успешных применениях Erlang?
AОдин процесс на всю систему
BСущность реального мира (соединение, игрок, устройство) = отдельный изолированный процесс
CХранение всего на диске
DОтказ от OTP