Краткий обзор инструментария WhatsApp

в 7:24, , рубрики: 1cloud, WhatsApp, Блог компании 1cloud.ru, разработка

Краткий обзор инструментария WhatsApp - 1

В марте 2014 года главный инженер WhatsApp Рик Рид (Rick Reed) рассказал об оптимизации инфраструктуры компании, которую требовалось провести в связи с растущим числом пользователей. Мы изучили материалы Рика, другие выступления по теме и публикации, подготовленные на основании бесед с представителями компании, и привели краткий обзор основных инструментов WhatsApp

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

Прежде чем перейти к описанию архитектуры WhatsApp, попытаемся разобраться в том, почему Facebook заплатил 19 миллиардов долларов за обычный мессенджер. Главное, в чем так нуждался Facebook – это почти миллиардная аудитория активных пользователей WhatsApp, которая до сих продолжает расти.

Аналитик Бенедикт Эванс (Benedict Evans), рассказывая о триллионном рынке мобильных приложений, приводит следующий факт: «Пользователи мобильных устройств по всему миру ежедневно отправляют более 20 миллиардов SMS-сообщений, что сопоставимо с количеством сообщений, проходящих через приложение WhatsApp». На данный момент мессенджером активно пользуется более 1 миллиарда человек, при условии, что в компании работает всего несколько десятков разработчиков.

Сотрудники WhatsApp не особенно распространяются на тему технических решений, но в сентябре 2015 года в Сан-Хосе, Калифорния, разработчик компании Джамшид Махдави (Jamshid Mahdavi) дал интервью, в ходе которого коротко рассказал об используемых технологиях. Часть секрета заключается в том, что компания строит свой сервис, используя язык программирования Erlang.

Erlang берет свое начало в 80-х годах прошлого века. Инженеры из Ericsson, компании, занимающейся созданием аппаратного и программного обеспечения для телекоммуникационных компаний, разработали язык, который бы подходил для работы с высокоскоростными телефонными сетями.

«Вместо того, чтобы создавать язык, а потом решать, что с ним делать, они сразу выделили определенную специфическую задачу, для которой он предназначен, – говорит Франческо Чезарини (Francesco Cesarini), гуру языка Erlang. – Он решал проблемы масштабируемости и надежности. В тот момент телефонные сети являлись единственной системой, которая должна была обладать этими двумя свойствами»

Более того, Erlang предлагает "горячую" замену кода, когда в приложении могут работать как старая, так и новая версия кода одновременно. Получается, что программное обеспечение на Erlang можно модернизировать без простоев.

Для передачи сообщений в WhatsApp используется модифицированный протокол обмена сообщениями и информацией о присутствии XMPP (ранее известный как Jabber) с шифрованием SSL и TLS. SSL и TLS – это широко используемые криптографические протоколы, обеспечивающие защищённую передачу данных по сети Интернет. Помимо WhatsApp протокол применяется в веб-браузерах и при работе с электронной почтой.

Краткий обзор инструментария WhatsApp - 2

XMPP-архитектура

Пока пользователь не запустит приложение, все входящие сообщения выстраиваются в очередь и хранятся в памяти сервера. Как только сообщение попадает на устройство пользователя, оно стирается из памяти сервера, а отправитель получает подтверждение о его получении. Один из участников StackOverflow описал процесс обмена сообщениями:

«Алиса решает отправить сообщение Бобу. Смартфон Алисы устанавливает соединение с сервером WhatsApp, который, в свою очередь, определяет, чье это устройство. Затем Алиса посылает по TCP сообщение: «Для Боба: Гигантский монстр атакует мост Золотые Ворота». Один из frontend-серверов WhatsApp десериализует это сообщение и доставляет его актору Алиса.

Актор Алиса решает сериализовать сообщение и сохранить его в файле под названием «Отправленные сообщения Алисы». Затем актор Алиса решает передать его актору Бобу в следующем виде: «Сообщение1 от Алисы: Гигантский монстр атакует мост Золотые Ворота». Актор Алиса отправляет сообщение и ждет подтверждение о доставке от актора Боба.

Актор Боб, получив сообщение, сохраняет его в файл под названием «Входящие сообщения для Боба» и отправляет уведомление о получении письма. Затем он проверяет, подключён ли смартфон Боба к серверу. Если да, то актор Боб отправляет сообщение по TCP.

Боб, увидев сообщение, решает ответить: «Для Алисы: Давай построим гигантских роботов и сразимся с ним». Теперь это сообщение принимает актор Боб и повторяет все вышеописанные шаги, чтобы до Алисы дошла идея спасения человечества»

В качестве СУБД используется многопользовательская распределенная система Mnesia DB, которая использует около 2 ТБ RAM и хранит порядка 18 миллиардов записей. Она написана на Erlang. С точки зрения скорости обработки запросов получается достаточно эффективная интеграция. Фото, аудио и видео, прикрепленные к сообщению, загружаются на веб-сервер YAWS, а ссылки на них высылаются получателю.

Использование Erlang принесло невероятные показатели масштабируемости. Первоначальная нагрузка WhatsApp составляла 200 000 одновременных соединений на сервер. Чуть позднее этот показатель значительно вырос и достиг 2,8 миллионов соединений. Все это великолепие обрабатывают примерно 550 серверов, из которых 150 – это чат-серверы, поддерживающие до 1 миллиона смартфонов. Еще около 250 машин – это мультимедиа серверы. Узлы, отвечающие за работу баз данных, имеют 512 ГБ оперативной памяти, а обычные вычислительные узлы – 64 ГБ. Подробнее о тонкостях и характеристиках процесса масштабирования вы можете узнать из этого поста от High Scalability.

В январе 2015 года WhatsApp запустила веб-версию своего популярного мобильного приложения. Это достаточно интересный момент, поскольку компания никогда не хранила сообщения пользователей на своем сервере – вся информация хранилась на смартфонах. Давайте посмотрим, какими инструментами пользовались разработчики.

Биплав Сараф (Biplav Saraf) в своем блоге пишет, что основными фреймворками были React.js – фреймворк для создания интерфейсов от Facebook, Underscore.js – библиотека JavaScript, реализующая дополнительную функциональность для работы с массивами, объектами и функциями, и Velocity.js – движок для работы с анимацией.

WhatsApp Web – это дополнение к аккаунту WhatsApp на вашем телефоне, а потому оно подключается к мобильному устройству, чтобы синхронизировать сообщения. Выходит, чтобы использовать веб-клиент, телефон должен быть включен, потому что он непосредственно участвует в передаче сообщений.

Биплав написал плагин для Chrome, чтобы посмотреть, что происходит, когда вы открываете веб-клиент и видите QR-код.

Краткий обзор инструментария WhatsApp - 3

Он выяснил, что сначала происходит отправка информации о текущем клиенте, ОС и браузере и передача ID сессии. Биплав считает, что третий кадр в списке – это TTL-кадр. Когда вы сканируете QR-код, мобильный клиент подключается к указанному каналу по протоколу WebSocket. WebSocket – это протокол дуплексной связи поверх TCP-соединения, предназначенный для обмена сообщениями в режиме реального времени между браузером и веб-сервером. Веб-клиент принимает следующие кадры:

Краткий обзор инструментария WhatsApp - 4

Выделенный кадр представляет наибольший интерес, поскольку он содержит данные, передаваемые мобильным клиентом веб-клиенту. Получается, что он содержит даже информацию о состоянии батареи смартфона и о том, находится ли мобильное устройство на зарядке.

Выводы

WhatsApp доказала, что размер компании не имеет значения. Команда из нескольких десятков разработчиков смогла создать популярный мессенджер, используя недорогое оборудование и открытое ПО. Конечно, определенную роль сыграло то, что компания оказалась в нужном месте в нужное время и предложила свой продукт нужному клиенту, однако не стоит сбрасывать со счетов тот факт, что разработчики ставили перед собой реальные цели и добивались их воплощения.

Когда Махдави спросили о том, как компании удалось добиться такого оглушительного успеха, он отвечает, что нужно просто сконцентрироваться на своей цели. «Не отвлекайтесь на сторонние задачи, другие технологии и ненужную деятельность в офисе, например встречи», – отмечает Махдави. Сотрудники WhatsApp практически никогда не проводят встречи. Конечно, работников всего несколько десятков, однако они добились всего именно в таком количестве.

Автор: 1cloud.ru

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js