Как стать автором
Обновить
2923.55
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

Как WhatsApp справлялся с 50 миллиардами сообщений в день, имея всего 32 инженера

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров27K
Автор оригинала: NK

Январь 2008 года — Калифорния, США.

Инженер Ян Кум нанимается на работу в Facebook* — получает отказ.

Это был не конец — он продолжил двигаться дальше.

В следующем году он покупает iPhone и сразу же понимает огромный потенциал нового App Store.

С несколькими бывшими коллегами из Yahoo он решает создать программу мгновенного обмена сообщениями. Программе дают имя WhatsApp. Предназначение WhatsApp — стать заменой дорогостоящим SMS.

Рост популярности WhatsApp поражает воображение — каждый день в него заходит один миллион людей.

WhatsApp мог справляться с 50 миллиардами сообщений в день от 450 миллионов активных пользователей, имея в штате всего 32 инженера.

Хотя взрывной рост продукта — это приятная проблема, для её решения Яну Куму и команде разработчиков WhatsApp пришлось применить самые передовые технологии проектирования.

Разработка WhatsApp


Методики обеспечения огромной масштабируемости WhatsApp можно вкратце описать так:

▍ 1. Принцип единственной ответственности


При развитии продукта упор всегда делался на его основную функциюобмен сообщениями.

Разработчики не стремились к созданию рекламной сети или платформы соцсетей.

Потребности пользователей/идеи руководства

Они всеми способами избавлялись от разрастания функций (feature creep).

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

Благодаря минималистичным требованиям к продукту, команда разработчиков смогла поставить на первое место надёжность WhatsApp.

▍ 2. Технологический стек


Для реализации основных функций серверов WhatsApp был использован язык программирования Erlang; на то имелись следующие причины:

  • он обеспечивает чрезвычайно высокую масштабируемость при малой затрате ресурсов
  • он поддерживает горячую загрузку

Потоки — нативная функция Erlang, в отличие от Java или C++, где потоки принадлежат операционной системе. Нативные потоки в Erlang снижают затраты на переключение контекста, потому что отсутствует необходимость сохранения всего состояния CPU.

Горячая загрузка упрощает развёртывание изменений в коде без перезапуска сервера или перенаправления трафика. Проще говоря, горячая загрузка обеспечивает чрезвычайно высокий уровень доступности сервиса.

▍ 3. Зачем заново изобретать велосипед?


Не надо придумывать велосипеды — или используйте опенсорс, или купите коммерческое решение.

«Прости, я слишком занят»

Ejabberd — это написанный на Erlang опенсорсный сервер для обмена сообщениями в реальном времени.

WhatsApp был создан на основе ejabberd. Команда разработчиков дополнила ejabberd, переписав часть его основных компонентов под свои нужды.

WhatsApp использовал сторонние сервисы, например, Google Push для реализации пуш-уведомлений.

▍ 4. Сквозная функциональность


Сквозная функциональность — это элементы, влияющие на многие части продукта и которые сложно разделить. Например, это мониторинг состояния сервисов и алерты.

Огромное внимание было уделено тому, чтобы сквозная функциональность повышала качество продукта.

Сквозная функциональность: безопасность, логирование, алерты, производительность, мониторинг, обработка исключений

Continuous integration (CI) — это практика, при которой инженеры регулярно объединяют свои изменения в коде в центральный репозиторий.

Continuous delivery (CD) — это практика автоматического развёртывания изменений в коде в тестовом окружении или в продакшене.

Команда WhatsApp использовала Continuous integration и Continuous delivery для совершенствования своего процесса разработки ПО.

▍ 5. Масштабируемость


Горизонтальное масштабирование — это процесс увеличения количества машин в пуле ресурсов.

Вертикальное масштабирование — это процесс увеличения мощностей машины, например, CPU или памяти.

Диагональное масштабирование — это гибрид горизонтального и вертикального масштабирования, при нём вычислительные ресурсы добавляются и вертикально, и горизонтально.

Для снижения затрат и степени сложности эксплуатации WhatsApp использовал диагональное масштабирование.


Для управления серверами WhatsApp разработчики использовали операционную систему FreeBSD, потому что уже имели опыт работы с ней в Yahoo. К тому же у FreeBSD имеется тщательно настроенный и надёжный сетевой стек.

FreeBSD была индивидуально настроена таким образом, чтобы выдерживать по два с лишним миллиона соединений на сервер. Были изменены такие параметры ядра, как файлы и сокеты.

Ресурсы на серверах резервировались избыточно, чтобы выдерживать резкие скачки трафика и справляться с такими сбоями, как нарушения связности сети или выход оборудования из строя.

▍ 6. Эффект маховика


Разработчики измеряли такие метрики, как CPU, переключения контекста и системные вызовы, выявляя и устраняя узкие места. Такие операции выполнялись через равные промежутки времени.

Измерения — устранение узких мест — тестирование

Цикл непрерывной обратной связи существенно повысил производительность WhatsApp.

▍ 7. Качество


Нагрузочное тестирование — это процесс измерения производительности системы под ожидаемой нагрузкой. Оно выполнялось для выявления единых точек отказа.

Нагрузочное тестирование: объёмы, выносливость, производительность, масштабируемость, устойчивость

Нагрузочное тестирование выполняется или генерированием искусственного трафика продакшена, или настройкой DNS для перенаправления большего объёма трафика на определённый сервер.

▍ 8. Малый размер команды


С увеличением размера команды пути коммуникации между инженерами увеличиваются квадратически. И это приводит к снижению продуктивности.

Команду разработки WhatsApp специально ограничивали в размерах — в ней было всего 32 инженера


Итог


WhatsApp считается одним из самых успешных приложений для мгновенного обмена сообщениями.

В 2014 году WhatsApp был куплен за огромную сумму в 19 миллиардов долларов тем же Facebook*, который отказал в найме Яну Куму.

По данным Forbes, собственные активы Яна Кума составляют в 2023 году 14 миллиардов долларов.

Meta Platforms*, а также принадлежащие ей Facebook** и Instagram**:
* признана экстремистской организацией, её деятельность в России запрещена;
** запрещены в России.


Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх 🕹️
Теги:
Хабы:
Всего голосов 81: ↑69 и ↓12+57
Комментарии76

Публикации

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds