На чём написан WhatsApp?
Кросс-платформенное приложение WhatsApp, обрабатывающее миллиарды сообщений ежедневно, было построено с помощью «двух прекрасных инструментов», как их называет Эктон — операционной системы FreeBSD и языка программирования Erlang.
По словам Брайана, его с Кумом выбор пал на FreeBSD, потому что они оба использовали эту операционную систему во время работы в Yahoo.
«FreeBSD имеет прекрасно настроенный сетевой стек и чрезвычайно высокую надёжность. Добавьте к этому и довольно простое управление установками», — отметил Эктон.
Отвечая на вопрос, почему команда WhatsApp предпочла FreeBSD Linux’у, он отметил «невероятную сложность» последней: «Преимущество FreeBSD заключается в едином дистрибутиве и чрезвычайно хорошей коллекции портов».
Говоря о выборе языка Erlang, сооснователь WhatsApp заметил, что всё произошло само собой. «Наши оригинальные чат-серверы строились на Erlang. Таким образом, нам удалось использовать возможности языка Erlang для развития нашего сервиса и поддержания очень высокой работоспособности», — сказал Брайан Эктон.
При этом, ни у Кума, ни у Эктона не было опыта работы с Erlang. «Однако на протяжении всего пути Erlang показал себя очень надёжным и производительным языком. Столкнись мы со значительными препятствиями, мы бы, вероятно, отказались от Erlang в пользу другого языка. К счастью, этого не произошло», — поведал Брайан Эктон, добавив, что Erlang идеально подходит как для коммуникаций в режиме реального времени, так и хорошо себя зарекомендовал языком общего назначения.
В ноябре 2014 года второй сооснователь WhatsApp Ян Кум пожертвовал миллион долларов FreeBSD, что стало крупнейшим в истории проекта пожертвованием, размер которого превысил годовой бюджет FreeBSD Foundation.
Хотите сообщить важную новость? Пишите в Телеграм-бот.
А также подписывайтесь на наш Телеграм-канал.
СМИ узнали о доступе властей к чатам WhatsApp в режиме реального времени
У государственных и федеральных органов США есть несколько легальных способов извлечения конфиденциальных данных пользователей из самых популярных мессенджеров. Речь, в частности, идет о WhatsApp (принадлежит Meta Platforms) и iMessage (разработана Apple), пишет Rolling Stone со ссылкой на документ ФБР под названием «Законный доступ».
Как отмечает издание, в документе, датированном 7 января 2021 года, описывается процесс того, как правоохранительные органы могут несколькими легальными способами извлечь конфиденциальные данные пользователей самых популярных в мире приложений для обмена сообщениями.
Документ представляет собой внутреннее руководство ФБР о том, какие типы данных государственные и федеральные органы могут запрашивать у руководств девяти крупнейших приложений для обмена сообщениями. Эксперты по правовым вопросам в сфере технологий, изучившие этот документ, заявили изданию, что редко можно получить такую подробную информацию о доступе правоохранительных органов к приложениям по обмену сообщениями.
В документе сказано, что WhatsApp предоставляет больше информации о пользователях, чем другие известные приложения. С помощью постановления суда следователи могут получить основную информацию о пользователе, а с ордером на обыск — контакты из его адресной книги и перечень пользователей, у которых он есть в списке контактов.
«Но WhatsApp уникален тем, насколько быстро он может предоставлять данные правоохранительным органам», — пишет Rolling Stone, добавляя, что мессенджер способен генерировать определенные пользовательские метаданные, но не фактическое содержание сообщения, каждые 15 минут, то есть фактически в режиме реального времени. Представитель WhatsApp в беседе с изданием подтвердил этот факт, вместе с тем отметив, что компания не раскрывает содержание переписки.
Кроме того, в WhatsApp сообщили изданию, что компания использует сквозное шифрование сообщений — это означает, что правоохранительные органы не могут напрямую получать доступ к содержанию пользовательских сообщений, а сама компания постоянно отстаивает право на шифрование сообщений «в судах по всему миру».
Из документа ФБР также следует, что большинство приложений для обмена сообщениями не делают или не могут сделать подобное и вместо этого предоставляют данные с задержкой и не в режиме реального времени. В документе отмечается, что iMessage по запросу следствия предоставляет метаданные пользователей, мессенджер Signal предоставляет только дату и время регистрации пользователя и время его последнего входа в приложение, а Telegram не предоставляет метаданные, но при этом может раскрыть IP-адрес и номер телефона пользователя, если речь идет о делах, касающихся терроризма.
Как сделать API на любое Android приложение. На примере WhatsApp
Анализ ситуации.
Казалось, требуется всего лишь отправлять и принимать сообщения. А столько подводных камней…
1. Официальный API
Официального API в релизе тогда ещё не было. Но Facebook успел прислать ссылку на форму, для подключения официального API, находящегося в тестировании.
2. Сторонний сервис. Подключение через WhatsApp WEB
Рассматривал вариант «серого» способа, использование неофициального сервиса, который отправляет сообщения через WEB интерфейс, подключается сканированием QR кода.
Но это зависимость от чужого API, в любой момент может всё отвалиться, да и передавать чужому сервису номера клиентов не хотелось. А ещё писать под чужой авторский API, да ещё который придётся переписывать, при переезде на другой сервис, тоже такое себе удовольствие.
Ну и ещё требуется держать телефон включенным (хотя некоторые сервисы за доп плату решали эту проблему 🙂
3. Ручной режим
Посадить человека, пускай копипастит сообщения клиентам. Шутки шутками, а из этой идеи родилось решение!
Решение
Отправка сообщения

И вот в ней я то и придумал решение, root права нам не нужны. Получилось методом научного тыка нарисовать скрипт отправки сообщения, далее буду называть поток, так именуется каждый отдельный нарисованный алгоритм в данной программе. А теперь разберём его работу:

Приём сообщений
Принимать сообщения на много проще. Ставим событие на уведомление от мессенджера. Как только приходит уведомление, помечаем его прочитанным, и отправляем его на сервер как есть. Тот уже спарсит адресата и текст.

Плюсы, минусы, доработка и планы
Основную функцию отправки сообщения алгоритм выполняет отлично. Так как не используется WEB интерфейс, схватить баню от мессенджера тут меньше рисков, как мне кажется. Арендовал слабенький виртуальный сервер, установил туда Android и перенёс всё.
На отправку одного сообщения новому контакту уходит
5 сек. Для проверки доставки и прочтения сообщения, разработал отдельный поток, но он в черновом варианте и иногда не срабатывает. Поэтому о нём позже.
В данный момент не реализована функция приёма медиа сообщений (фото, аудио, вложения), но это можно выгружать из WhatsApp, используя кнопку поделиться сообщением в будущем.
Чуть позже хочу сверху виртуальной машины, где запущен мессенджер, написать SIP транк, через который можно будет звонить через WhatsApp как через SIP ^.^ что может сэкономить расходы на связь.
Ещё хочу делать скриншоты аватарок и отправлять их на сервер, для прикрепления миниатюры к контакту в CRM системе.
Ну и вообще самое интересное: Данный способ обёртывания в API подойдёт почти для любого приложения под Android 🙂
Всё изначально разрабатывал и запускал на Android 9, xiaomi mi 9 se, root прав нет.
UPD:
Пример на Python3.8 в качестве бекенда доступен на GitHub, доработан алгоритм ловли уведомлений и код отправки из комментариев от ivan909020
WhatsApp — История украинского программиста, захватившего весь мир
«Я хочу делать одну вещь — и делать ее хорошо». (с) Ян Кум, главный разработчик WhatsApp.
Впервые взяв в свои руки iPhone и сразу почувствовав растущий потенциал AppStore и приложений для iPhone Яну пришла голову создать мессенджер, который бы использовал интернет для передачи сообщений и медиафайлов, вместо традиционных смс и ммс, за которые операторы брали деньги. И уже 24 февраля 2009 года, в день своего рождения, Ян Кум учредил компанию WhatsApp Inc в Пало Альто, штат Калифорния. Само приложение еще не было готово, но его глаза горели идеей создать инновационный IT-продукт, незаменимый для любого владельца мобильного телефона.
Кум признается: “Это называется «человек в зоне». Я первые два года ездил только на работу, забыл, как выглядит мой племянник и друзья, потолстел на 40 фунтов, перестал заниматься спортом. Приезжал в офис в 10 утра, а в час ночи уезжал домой, чтобы переночевать. Когда человек начинает чувствовать, что людям нужен его продукт, он оказывается в замкнутом круге”.
Может показаться, что мотивация Кума не знала границ, и он, вместе с партнером Брайаном Эктоном, только и делал, что собирали лавры. Но в жизни так не бывает.
Мысль о создании первоклассного продукта, с помощью которого люди обретут удобный и недорогой способ быть на связи с близкими, даже если их унесло на другой континент, не отпускала Кума. Кому, как не ему, эмигранту из украинского пригорода, чей отец так и остался в Киеве после переезда его с матерью в США, были знакомы все трудности общения на расстоянии. И он продолжил, вновь с головой погрузившись в разработку.
В очередной раз хочу предложить свой перевод статьи, на этот раз автор Тодд Хофф, и его статья посвященна архитектуре WhatsApp на момент его покупки Facebook.
Ремарка: в начале статьи содержится рассуждение автора оригинала о том, зачем Facebook купил WhatsApp за баснословные 19 миллиардов. Если это вам не интересно — просто пролистайте, описание архитектуры будет ниже.
Рик Рид в его предстоящем мартовском докладе, озаглавленном «Миллиард с большой ‘М’: Следующий уровень масштабирования в WhatsApp» раскрывает сногсшибательную статистику WhatsApp:
Что имеет сотни узлов, тысячи ядер, сотни терабайт RAM и надеется обслужить миллиарды смартфонов, которые вскоре станут реальностью по всему миру? Основанная на Erlang и FreeBSD архитектура WhatsApp. Мы столкнулись со многими трудностями при удовлетворении постоянно растущего спроса на наш сервис обмена сообщениями, но мы продолжаем расширять нашу систему с точки зрения размера (> 8000 ядер) и с точки зрения скорости (>70М сообщений Erlang в секунду).
Но поскольку у нас ещё нет этого доклада, давайте посмотрим на доклад, который Рик Рид сделал два года назад: «Масштабирование до миллионов одновременных соединений».
Имея опыт разработки высокопроизводительной шины сообщений на C++ в Yahoo, Рик Рид не новичок в мире масштабируемых архитектур. Основатели WhatsApp это также бывшие сотрудники Yahoo с немаленьким опытом в масштабировании систем. Так что WhatsApp работает за счет их навыков масштабирования. А поскольку их Большая Дерзкая цель в том, чтобы быть на каждом смартфоне в мире, которых в течение нескольких лет будет около 5 миллиардов, им потребуется весь этот опыт.
Если вы спросите меня как программиста, стоит ли WhatsApp таких денег, то я отвечу, что, разумеется, нет! Это просто отправка данных по сети! Ну в самом деле. Правда, я из тех, кто считает, что блог-платформы не нужны, потому что нет ничего сложного в том, чтобы удалённо подключиться к серверу, открыть index.html с помощью vi и написать ваш пост в HTML. Мне потребовалось время, чтобы понять, что разработка — это не написание тупого кода, это способ сделать так, чтобы все те пользователи полюбили ваш продукт, что самое сложное. Любовь не купишь.
Так что же делает WhatsApp таким ценным? Технология? Не обращайте внимания на тех, кто говорит, что за неделю сможет написать WhatsApp на PHP. Это просто неправда. Как мы увидим, это весьма крутые технологии. Но, разумеется, у Facebook достаточно ресурсов, чтобы разработать WhatsApp, если бы они захотели.
Давайте посмотрим на особенности. Мы все знаем, что WhatsApp это продукт без уловок (нет рекламы, игр, уловок) с преданными пользователями по всему миру. Он предлагает бесплатные сообщения в суровом мире, где счета за SMS могут быть ужасными. Как приезжего американца, меня очень удивило то, как много настоящих людей используют WhatsApp чтобы действительно оставаться на связи со своей семьёй и друзьями. Так что когда вы берете WhatsApp, то вероятнее всего, что люди, которых вы знаете, уже там, так как у всех есть телефон, который устраняет проблему пустой социальной сети. Он агрессивно-кросс-платформенный, так что все, кого вы знаете, может использовать его и он просто будет работать. Фраза он «просто работает» часто используется. Он имеет все возможности (можно поделиться местоположением, звуком, видео, картинки, push-to-talk, голосовые сообщения и фото, оповещение о доставке, групповые чаты, отправка сообщений через WiFi, и всё это может быть сделано независимо от того, в сети адресат или нет). Он также поддерживает отображение национальных систем письменности. А использование номера мобильного телефона как идентификатора и контактов как социального графа дьявольски просто. Нет подтверждения по электронной почте, имени пользователя и пароля, номер кредитной карты не требуется. Он просто работает.
Возможная причина в том, что Google хотел купить WhatsApp, предложив 99 центов за пользователя. Это угроза для Facebook, они просто в отчаянии. Эти деньги предложены за вашу телефонную книгу и за метаданные (даже учитывая то, что WhatsApp их не хранит).
Но Facebook обещал, что не будет ни рекламы, ни объединения сервисов, так в чем выгода?
Имеет место интересное развитие бизнеса через использование мобильных технологий. WhatsApp используется для создания групповых обсуждений командами проектов, а инвесторы обсуждают ход сделок через WhatsApp.
Instagram используется в Кувейте для торговли овцами.
WeChat, конкурент WhatsApp, в январе запустил сервис найма такси, за первый месяц был нанят 21 миллион машин.
С будущим электронной коммерции, направляемой мобильными приложениями для отправки сообщений, стоит ли сыграть на этом поле?
Не только бизнес пользуется WhatsApp для задачи, которые когда-то решались настольными или веб-приложениями. Полиция Испании использует WhatsApp для поимки преступников, итальянцы организуют баскетбольные команды с его помощью.
Коммерческие и другие приложения переходят на мобильные телефоны по очевидным причинам. У каждого есть телефон, а эти мессенджеры полны возможностей, бесплатны и дешевы в использовании. Вам больше не требуется настольный компьютер, чтобы сделать дела. Множество функций может быть перекрыто мобильным приложением.
Таким образом, мгновенные сообщения это угроза для Google и Facebook. Настольные компьютеры мертвы. Веб умирает. Мгновенные сообщения + мобильные технологии это экосистема, способная их заменить. Мгновенные сообщения стали центром взаимодействия в мобильных технологиях, а не поиск, изменяя то, поиск и природу того, какие приложения завоюют будущее. Мы не просто предваряем PageRank, мы предваряем веб.
Facebook должен попасть на этот рынок, или станет бесполезным.
С переходом в мобайл, мы видим депортализацию Facebook. Его настольный интерфейс это портал, предоставляющий доступ ко всем возможностям бекенда. Он большой, запутанный и скрипучий. Да кому вообще нравится интерфейс Facebook?
Когда Facebook пришел на мобильные устройства, они попробовали портальный подход и он не сработал. Так что они перешли к стратегии маленьких, более сфокусированных приложений для одной задачи. Mobile first! На маленьком экране можно сделать не так много. На мобильнике проще найти отдельное приложение, чем меню, закопанное глубоко в недра запутанного портального приложения.
Но Facebook идёт на шаг впереди. Они не только разрабатывают отдельные приложения для конкретных задач, они предоставляют несколько конкурирующих приложений, предоставляющих схожую функциональность, и эти приложения не обязательно имеют общий бекенд. Мы видим это на примере WhatsApp и Messenger, а Instagram конкурирует с фотографиями на Facebook. Paper это альтернативный интерфейс Facebook, который предоставляет ограниченную функциональность, но то, что он делает, он делает хорошо.
Здесь может быть применим закон Конвея. Идея в том, что «организации, проектирующие системы… обычно порождают архитектуру, копирующую коммуникационную структуру этих организаций». С монолитной инфраструктурой бекенда мы получим портальный дизайн, похожий на Борга. Переход к мобильным технологиям освобождает организации от такого мышления. Если могут быть разработаны приложения, использующие только часть инфраструктуры Facebook, тогда могут быть разработаны приложения, совсем не использующие инфраструктуру Facebook. А если они не используют инфраструктуру Facebook, то они могут быть разработаны не в Facebook. Что же тогда Facebook?
CEO Facebook Марк Цукерберг имеет свою точку зрения, озвученную на конференции Mobile World Congress, заключающуюся в том, что поглощение WhatsApp тесно связано с Internet.org:
Это долгая игра, но она содержит достаточно ценностей, чтобы имело смысл в неё играть.
Пришли ли мы к согласию? Не думаю. Это поразительное количество долларов, краткосрочная выгода от которых неочевидна, так что объяснение как долгосрочная игра имеет некоторый смысл. Мы по-прежнему на заре мобильных технологий. Никто не знает, как будет выглядеть будущее, так что лучше не пытаться заставить будущее выглядеть как прошлое. Похоже, что Facebook поступает именно так.
Но хватит этого. Как бы вы обслуживали 450 миллионов активных пользователей силами всего 32 инженеров? Давайте посмотрим.
Источники
Предупреждение: мы знаем не так много об архитектуре WhatsApp в целом. Просто фрагменты и обрывки, собранные из разных источников. Доклад Рика Рида посвящён оптимизации, позволившей обрабатывать 2 миллиона соединений на одном сервере используя Erlang, а не обзору всей архитектуры.
Статистика
Эта статистика, в основном, для текущей системы, а не для системы, доклад о которой у нас есть. Доклад о текущей системе будет включать больше информации о хаках для хранения данных, обмена сообщениями, мета-кластеризации, и больше о патчах для BEAM/OTP.
Платформа
Бекенд
Фронтенд
Аппаратное обеспечение
Продукт
Общее
Задача о 2+ миллионах соединений на сервер
Средства и технологии, используемые для повышения масштабируемости
Уроки
Связанные работы
Согласно древней хабратрадиции обо всех ошибках и неточностях прошу сообщать с помощью личных сообщений.







