Январь 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 и постами о ретроиграх ????️
Комментарии (58)
Regis
04.09.2023 13:15+12Из заголовка можно подумать, что производительность системы как-то однозначно и очевидно коррелирует с числом разработчиков (нет).
Aldrog
04.09.2023 13:15+1Производительность системы (если речь о бекенде глобального сервиса) прямо коррелирует со своей сложностью, а сложность уже коррелирует с количеством разработчиков.
GospodinKolhoznik
04.09.2023 13:15+3Ну до какого то момента, пока вся система работает на одном единственном сервере действительно можно обходиться силами одного единственного человека. Но когда много серверов в разных точках мира, им надо друг с другом как то обмениваться данными, как то взаимно резервировать друг друга и их все надо конфигурировать то уже и 1000 девопсеров может оказаться мало. Так что 32 это действительно круто.
zoonman
04.09.2023 13:15+3На самом деле управлять пулом серверов не так уж и сложно. Просто нужно работать с API от облачных провайдеров. Гораздо сложнее профайлить код и выявлять узкие места.
RealSaniok
04.09.2023 13:15+31Erlang конечно же был выбран совсем не потому, что на нём ejabberd написан...
drno-reg
04.09.2023 13:15+2если приложение такое успешное, то почему тогда Ян Кум его продал?
ilriv
04.09.2023 13:15+8Классика же.
Модератор: Внимание, ролик содержит мат. Если для вас это неприемлемо, то не смотрите его.
rootdefault
04.09.2023 13:15+5Потому что сделать технически грамотное приложение это одно, а вот чтоб монетизировать его потенциал уже совсем другие компетенции и команды нужны
shmutz
04.09.2023 13:15+2>то почему тогда Ян Кум его продал
Патамучта все эти мессенджеры офигенно убыточные. Что телеги, что ватсапы.... Статья слишком поверхностная, могли бы эту тему и расписать, явно были внешние инвесторы и не единожды.
romxx
04.09.2023 13:15+3"Приложение успешное" и "приложение прибыльное" это два не всегда пересекающихся множества. Продавали прежде всего пользовательскую базу, а не приложение как таковое.
nixtonixto
04.09.2023 13:15+1Продал потому, что главное — не сделать. Главное — продать на пике стоимости, тем самым окупив расходы и заработав на жизнь и пенсию.
Hlad
04.09.2023 13:15Потому что сам по себе WhatsApp, как мессенджер, не представляет большого коммерческого интереса. 19 миллиардов заплатили за базу социальных связей (кто с кем переписывается, кто у кого есть в телефонной книге...)
AstarothAst
04.09.2023 13:15А почему нет? Серьезно, почему бы не продать именно то, что популярно? Это позволит продать подороже.
GBR-613
04.09.2023 13:15-5Если инженеры - живые люди, то положено говорить не "32 инженера", а "32-х инженеров". (Хотя - 32 неживых компьютера.)
Samhuawei
04.09.2023 13:15+2Гм, зашёл в гит ejabberd, лицензия GPL v2. Вотсап не хочет исходники опубликовать? Зовите Столлмена и юристов.
Ну и по кликбейтному заголовку. У нас 5 инженеров поддерживают примерно 50 платформ с миллионами ежедневных транзакций. Ничего особенного в этом нет. Если продукт написан грамотно, то и проблем масштабирования не должно быть.Andrusha
04.09.2023 13:15+3Предоставление исходников сервера требовалась бы, если бы они поставляли получившуюся модификацию сервера конечным пользователям, а они используют её внутри инфраструктуры.
Samhuawei
04.09.2023 13:15-5У вас своеобразное понимание лицензии GPL. На уровне "воровать нельзя, но если никто не видит то можно".
Andrusha
04.09.2023 13:15+2Моё понимание полностью соответствует официальному.
Sap_ru
04.09.2023 13:15А в какой момент они "release the modified version to the public in some way"? Они её не продавали, не сдавали аренду, не распространяли. Раз не было распространения, то нет и обязанности предоставлять исходники.
Samhuawei
04.09.2023 13:15В том пункте что вы процитировали говорится прямо. Если это внутренний инструмент типа линтера или хитрого парсера логов - публиковать не надо. Если код используется в публично доступном проде - извольте опубликовать.
Andrusha
04.09.2023 13:15Про это уже ответил @Sap_ru, причём до вашего толкования того, что «говорится прямо». Про лицензию AGPL вам тоже уже сообщили. В любом случае, про модифицированный ejabberd на бэкенде известно, наверное, с момента запуска WhatsApp; если бы у разработчиков ejabberd были бы претензии к Яну Куму и тем 32 инженерам, они бы их уже озвучили.
Samhuawei
04.09.2023 13:15А при чём тут разработчики ejabberd? Нарушены права широкого неограниченного круга пользователей. Они представлены Free Software Foundation с момента опубликования кода под лицензией GNU GPL v2. Почему не засудят Whatsapp? Не хотят, или времени нет. Опять таки слова на иск не намажешь, нужны доказательства. Я сомневаюсь что суд выдаст иск на арест серверов Facebook на основании слов балабола.
Andrusha
04.09.2023 13:15Почему не засудят Whatsapp?
Потому что они ничего не нарушают. Если бы был повод, то моментально собралась бы толпа юристов, желающих поучаствовать в доении Meta. Но вопрос за всё это время даже не поднимался.
strangeman
04.09.2023 13:15Зависит от характера модификаций. Ejabberd, насколько я помню, отлично расширяется за счет плагинов и такие плагины могут трактоваться как отдельный piece of software, соответственно могут лицензироваться иначе.
Аналогичная история с WordPress например, он тоже под GNU GPL v2, однако ж никто не заставляет публиковать исходники платных плагинов к нему.
thunderspb
04.09.2023 13:15Полностью согласен. Грамотный девопс может "держать" достаточно жирный прод. Сре для этого не особо нужны. Главное акхитектура, как это настроено и грамотные ранбуки для ноков. Не обязательно иметь 100500 "инженеров"...
vainkop
04.09.2023 13:15
Samhuawei
04.09.2023 13:15-4Для управления серверами WhatsApp разработчики использовали операционную систему FreeBSD, потому что уже имели опыт работы с ней в Yahoo. К тому же у FreeBSD имеется тщательно настроенный и надёжный сетевой стек.
Сдаётся мне и тут они выбрали ОС чтобы не публиковать изменения в исходном коде. У FreeBSD лицензия позволяет, в отличие от ядра линукса.
Samhuawei
04.09.2023 13:15-3В следующем году он покупает iPhone и сразу же понимает огромный потенциал нового App Store.
С точки зрения владельца бизнеса огромный потенциал видимо у самой Apple, а для стартапа App Store это немалые расходы и постоянная игра в лицензионные соглашения которые Apple меняет на ходу. С этой точки зрения на Андроиде попроще. На крайняк есть магазин huawei или просто apk.
BigVal
04.09.2023 13:15А минимизация в трей видимо противоречит их первому принципу единой (или единственной?) ответственности... Ах да, "это процесс добавления в продукт излишних функций, усложняющих пользование им."
vladvul
04.09.2023 13:15-1Киллер фича воцапа было сканирование контактов, а также рассылка приглашений по смс
Hlad
04.09.2023 13:15+2Из статьи я понял прежде всего, что Ян Кум за 9 лет пропил 5 миллиардов долларов.
Yuri_nedre
04.09.2023 13:15Где-то после продажи фейсбуку, как раз и бросили развивать приложение. Реально за 10 лет ничего нового не появилось.
Firsto
04.09.2023 13:15А куда его развивать? Цели достигнуты, всё работает.)
При развитии продукта упор всегда делался на его основную функцию — обмен сообщениями.
blind_oracle
04.09.2023 13:15+3Не люблю Whatsapp, но вот "развитие" в духе Telegram "а давайте добавим сторис и крипту" - спасибо не надо. Крипта провалилась и слава богу, но сторисы приехали.
vainkop
04.09.2023 13:15"развитие" в духе Telegram "а давайте добавим сторис и крипту" - спасибо не надо
Телега очень хороша, но, видимо, не на ваш вкус.
Крипта провалилась и слава богу
Крипта вполне себе жива и развивается, а кошелёк телеги с p2p очень удобен.
blind_oracle
04.09.2023 13:15Телега хороша, но попытка сделать из хорошего мессенджера очередной WeChat где напихано всё - не надо.
А про крипту я имел в виду TON, который туда прикрутить хотели.
vainkop
04.09.2023 13:15Мне как раз нравится концепция "очередного WeChat", но таки более понятного для нас и более быстрого.
Ton вполне жив и развивается, а на этой неделе он подорожал процентов на 30-40, т.к. Ton Space запустили, обмен TON/USDT возможен и судя по всему Ton вот вот начнёт торговаться на Binance и ещё несколько факторов.
shornikov
04.09.2023 13:15+1А где они брали деньги на железо, когда внезапно выскочили в стратосферу?
haword
04.09.2023 13:15Я так понимаю все придумали инженеры, 32 человек, всю систему реализовали, все работало. а их начальник взял и все продал за 19 миллиардов и все положил себе в карман. молодец.
blind_oracle
04.09.2023 13:15Я думаю, что в такой мелкой конторе они все были акционерами и стали мультимиллионерами потом.
oleg_rico
04.09.2023 13:15А меня всегда интересовало- почему skype, который начал значительно, раньше не стал таким мегапопулярным как WhatsApp? Я могу предположить что ошибка Скайпа была идентификация по никнеймам, а не по номеру телефона, но это же можно было исправить, когда WhatsApp стал набирать обороты.
Ну и конечно Аська, которая была мессенджером ещё в те времена когда никто не слышал про WhatsApp, она почему не стала?
Andrusha
04.09.2023 13:15но это же можно было исправить
Можно было, но не исправили. Из конца нулевых не всем было очевидно, что через 10 лет смартфон станет основным средством доступа в Интернет у большинства населения планеты.
Помимо аутентификации по номеру телефона, думаю, там требовалось некоторое допиливание как клиентов, так и бэкенда, и тут уже возникает финансовый вопрос, напрямую связанный с предыдущей причиной: стоит ли оно того, и как это всё монетизировать? Я напомню: Skype зарабатывал деньги функцией звонков на обычные телефоны, а ICQ вообще рекламой в официальном клиенте.
Samhuawei
04.09.2023 13:15+2Скайп был мегапопулярным. Пока его не купила Microsoft. Но у самой Microsoft было как минимум два схожих приложения. И на скайп положили болт.
oleg_rico
04.09.2023 13:15Skype был популярным до тех пор пока не появилась альтернатива. более простая в использовании и более удобная в виде идентификации по номеру.
Кстати, недавно нужно было позвонить на заграничный номер и я так и не нашёл чем это сделать удобно, так как баланс skype пополнить не смог. Невозможно сейчас пополнить баланс российского skype
Samhuawei
04.09.2023 13:15-1Всякая идентификация по номеру телефона это дыра в безопасности человека. Сольют логи с сервера по запросу роскомпозора и нарисуют двушечку. Скайп в этом смысле безопаснее. Ник к делу не пришьёшь.
Shatun
04.09.2023 13:15ИМХО, скайп убил переезд на новый бек с порядка года продолжающимися глюками и подвисаниями.
Shatun
04.09.2023 13:15Но у самой Microsoft было как минимум два схожих приложения. И на скайп положили болт.
Скайп нормально разивался, фичи выкатывались, сами изменения были в основном необходимыми. Но в техническом плане это было сделано совсем негладко.
Psychosynthesis
04.09.2023 13:15+2Этот пассаж про 32-х инженеров вкупе с упоминанием числа сообщений создаёт впечатление, что они должны были руками сидеть и эти миллиарды сообщений разбирать, и именно поэтому автор статьи так восхитился.
А вообще, статья мусор конечно абсолютный, как и сам WhatsApp собственно. Великая загадка почему такой хлам такой рейтинг набирает.
swordgna
А я то думал, почему у них вечно глючит!.. теперь всё понятно))
achekalin
Скажем честно: плохо справлялся и справляется.
Я лично жду, когда они уже перестанут быть популярны, и помрут, как аська. Кажется, самое классическое приложение из 20 века у меня на телефоне.
"Ну а чё, пипл хавает!"