Как WhatsApp доставляет 100 миллиардов сообщений в день
Разбираем архитектуру WhatsApp: постоянные TCP-соединения, FreeBSD + Erlang, маршрутизация между серверами и почему сообщения почти не хранятся на серверах.
Aroshka CloudWhatsApp каждый день обрабатывает около 100 миллиардов сообщений. Это больше миллиона сообщений в секунду в среднем, а в пиковые моменты — ещё больше. При этом система остаётся быстрой и надёжной. Давайте разберём, как устроена её архитектура и почему она работает именно так.
Постоянное соединение вместо постоянных запросов
Когда вы открываете WhatsApp, телефон не начинает постоянно спрашивать сервер «есть ли новые сообщения?». Вместо этого он устанавливает долгоживущее TCP-соединение с одним из чат-серверов и держит его открытым.
Пока соединение живо, сервер может мгновенно «протолкнуть» новое сообщение на телефон. Это сильно эффективнее, чем HTTP-запросы каждые несколько секунд, особенно на мобильных сетях.
Пример:
Вы отправили другу «Привет». Ваш телефон уже держит соединение с сервером №1. Сообщение уходит по этому каналу, сервер быстро находит друга и пересылает ему сообщение по его открытому соединению. Всё происходит за десятки миллисекунд.
Почему FreeBSD и Erlang
Чат-серверы WhatsApp долгое время работали на FreeBSD. У этой операционной системы очень сильный сетевой стек, она хорошо справляется с огромным количеством одновременных TCP-соединений.
Логика самих серверов написана на Erlang. В Erlang каждый пользовательское соединение — это очень лёгкий процесс (не полноценный поток операционной системы). Благодаря этому один сервер может держать около 1–2 миллионов одновременных соединений.
Пример:
Один чат-сервер обслуживает 2 миллиона телефонов. Это не фантастика для Erlang, но для большинства других технологий на одном сервере такой объём соединений был бы крайне тяжёлым.
Чтобы покрыть миллиарды пользователей, WhatsApp запускает сотни таких серверов.
Как сообщение находит получателя
Когда вы отправляете сообщение, ваш чат-сервер смотрит в таблицу маршрутизации (routing table / session map). В ней записано, к какому серверу сейчас подключён каждый пользователь.
Допустим:
Вы подключены к серверу №1.
Ваш друг подключён к серверу №200.
Сервер №1 по таблице находит сервер №200 и напрямую пересылает ему сообщение. Сервер №200 сразу доставляет его на телефон друга.
Если друг онлайн и соединение активно — сообщение идёт почти напрямую, без лишних промежуточных хранилищ.
Сообщения почти не хранятся на серверах
Это важный момент. WhatsApp не является постоянным архивом ваших чатов.
Как только сообщение успешно доставлено на устройство получателя, оно удаляется с серверов WhatsApp. История остаётся только:
на ваших телефонах;
в резервной копии (Google Drive / iCloud), если вы её включили.
Пример:
Вы случайно удалили чат на телефоне и не делали бэкап. Восстановить его с серверов WhatsApp уже нельзя — сообщения там больше нет.
Что происходит, если получатель оффлайн
Если друг сейчас не в сети (нет активного соединения), сообщение попадает во временную очередь (offline storage).
Оно лежит там, пока не удастся доставить.
Обычно такое сообщение хранится до 30 дней.
Если за 30 дней доставить так и не получилось — оно удаляется.
Как только друг снова выходит в сеть и устанавливает соединение, очередь доставляет ему все накопившиеся сообщения.
Групповые чаты
В группах работает механизм fan-out.
Одно сообщение, которое вы отправили в группу, на стороне серверов размножается и рассылается всем участникам (с учётом того, кто онлайн, а кто нет).
Именно поэтому исходящий трафик у WhatsApp обычно заметно больше входящего: одно сообщение в большую группу порождает много доставок.
Коротко об архитектуре
Компонент | Зачем нужен | Пример |
|---|---|---|
Постоянный TCP | Мгновенная доставка | Сообщение приходит сразу, без опроса |
FreeBSD + Erlang | Миллионы соединений на сервер | 2 млн телефонов на одной машине |
Таблица маршрутизации | Найти, где сейчас сидит получатель | Сервер №1 → Сервер №200 |
Временная очередь | Хранение, пока получатель оффлайн | До 30 дней |
Удаление после доставки | Не хранить историю на серверах | Удалил на телефоне — восстановить нельзя |
Итог
WhatsApp смог масштабироваться до 100 миллиардов сообщений в день не за счёт бесконечного количества серверов, а за счёт очень эффективного стека: долгоживущие соединения, Erlang с лёгкими процессами, FreeBSD и умная маршрутизация. При этом система сознательно не хранит ваши сообщения постоянно — это и про приватность, и про экономию ресурсов.
Такая архитектура позволяет обслуживать огромную аудиторию относительно небольшим количеством инфраструктуры и инженеров.