Подтвердить что ты не робот

Что такое технология для wechat, whatsapp и других приложений для обмена сообщениями?

Я очень хочу знать об архитектуре различных приложений для обмена мгновенными сообщениями в реальном времени. Используют ли они какой-либо общий протокол/архитектуру?

4b9b3361

Ответ 1

Архитектура WhatsApp Facebook купила за 19 миллиардов долларов объясняет архитектуру, связанную с дизайном whatsapp.

Вот общее объяснение из ссылки

  • Сервер WhatsApp почти полностью реализован в Erlang.

  • Серверные системы, выполняющие маршрутизацию брандмауэра, выполняются в Erlang.

  • Большим достижением является то, что количество активных пользователей управляется с очень небольшим размером сервера. Командный консенсус в том, что он во многом объясняется Эрланом.

  • Интересно отметить, что Facebook-чат был написан в Erlang в 2009 году, но они ушли от него, потому что было сложно найти квалифицированных программистов.

  • Сервер WhatsApp запущен с ejabberd

  • Ejabberd - это известный сервер Jabber с открытым исходным кодом, написанный в Эрланге.

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

  • Следующие несколько лет были потрачены на повторную запись и изменение нескольких частей ejabberd, включая переход от XMPP к внутренне разработанному протоколу, реструктуризацию базы кода и переработку некоторых основных компонентов и внесение большого количества важных изменений в Erlang VM для оптимизации производительности сервера.

  • Чтобы обрабатывать 50 миллиардов сообщений в день, основное внимание уделяется созданию надежной системы, которая работает. Монетизация - это то, что нужно посмотреть позже, ее далеко по дороге.

  • Первичным датчиком работоспособности системы является длина очереди сообщений. Длительность очереди сообщений всех процессов на node постоянно контролируется, и оповещение отправляется, если они накапливают отставание за заданный порог. Если один или несколько процессов отстают от того, на что предупреждается, что дает указатель на следующее узкое место для атаки.

  • Мультимедийные сообщения отправляются путем загрузки изображения, аудио или видео для отправки на HTTP-сервер, а затем отправки ссылки на контент вместе с его миниатюрой в кодировке Base64 (если применимо).

  • Некоторые коды обычно выталкиваются каждый день. Часто его несколько раз в день, хотя в общем пиковое время трафика избегают. Erlang помогает быть агрессивным в получении исправлений и функций в производство. Горячая загрузка означает, что обновления могут быть перенесены без перезапуска или переключения трафика. Ошибки обычно можно отменить очень быстро, снова путем горячей загрузки. Системы, как правило, гораздо более слабо связаны, что позволяет очень легко качать изменения постепенно.

  • Какой протокол используется в приложении Whatsapp? SSL в пулы серверов WhatsApp. Все сообщения помещаются в очередь на сервере до тех пор, пока клиент не восстановит соединение для извлечения сообщений. Успешное извлечение сообщения отправляется обратно на сервер whatsapp, который перенаправляет этот статус исходному отправителю (который увидит это как значок "галочка" рядом с сообщением). Сообщения удаляются из памяти сервера, как только клиент принял сообщение

  • Как процесс регистрации работает внутри Whatsapp? WhatsApp используется для создания имени пользователя/пароля на основе номера телефона IMEI. Недавно это было изменено. WhatsApp теперь использует общий запрос приложения, чтобы отправить уникальный 5-значный PIN-код. Затем WhatsApp отправит SMS на указанный номер телефона (это означает, что клиенту WhatsApp больше не нужно запускать на том же телефоне). На основе номера контактного приложения приложение запрашивает уникальный ключ от WhatsApp. Этот ключ используется как "пароль" для всех будущих вызовов. (этот "постоянный" ключ хранится на устройстве). Это также означает, что регистрация нового устройства приведет к аннулированию ключа на старом устройстве.

Ответ 2

Насколько мне известно, Ejabberd (http://www.ejabberd.im/) является родителем, это XMPP-сервер, который предоставляет неплохие возможности open source, Whatsapp использует некоторую измененную версию этого, обмен сообщениями facebook также использует модифицированную версию этого. Некоторым чат-приложениям нравится Samsung ChatOn, Nimbuzz messenger используют ejabberd, и решения Erlang также имеют модифицированную версию этого ejabberd, который, по их утверждению, обладает высокой масштабируемостью и хорошо протестирован с большим увеличением производительности и переименован в MongooseIM.

Ejabberd - это сервер, на котором большая часть функций реализована по сравнению с другими. Поскольку он построен в Эрланге, он масштабируется горизонтально.

Ответ 3

WhatsApp выбрал Erlang язык, созданный для написания масштабируемых приложений, предназначенных для устранения ошибок. Эрланг использует абстракцию, называемую моделью Actor для нее concurrency - http://en.wikipedia.org/wiki/Actor_(programming_language) Вместо традиционного подхода к общей памяти, участники обмениваются сообщениями, отправляя друг другу сообщения. Актеры, в отличие от нитей, рассчитаны на легкий вес. Актеры могут находиться на одной машине или на разных машинах, а абзацы, передающие сообщения, работают для обоих. Простая реализация WhatsApp может быть: Каждый пользователь/устройство представлен как актер. Этот субъект отвечает за обработку входящих сообщений пользователя, как он сериализуется на диск, сообщения, которые отправляет пользователь, и сообщения, которые пользователь получает. Предположим, что Алиса и Боб друзья на WhatsApp. Итак, есть актер Алисы и актер Боба.

Позволяет проследить ряд сообщений, поступающих взад и вперед:

Алиса решает сообщить Бобу. Телефон Alice устанавливает соединение с сервером WhatsApp, и установлено, что это соединение, безусловно, связано с телефоном Alice. Алиса теперь отправляет через TCP следующее сообщение: "Для Боба: гигантский монстр атакует мост Золотых Ворот". Один из серверов Fronts WhatsApp десериализует это сообщение и доставляет это сообщение актеру Alice.

     
  

Алиса актер решает сериализовать это и хранить его в файле "Alice Sent Messages", хранящемся в реплицированной файловой системе, чтобы предотвратить потерю данных из-за непредсказуемого развращения монстров. Затем Алиса решает передать это сообщение Бобу актеру, передав ему сообщение "Msg1 от Алисы: гигантский монстр атакует мост Золотых Ворот". Алиса актер может повторить с экспоненциальным отступлением до тех пор, пока Боб актер не признает получение сообщения.

         
    

Боб актер в конечном итоге получает сообщение от (2) и решает сохранить это сообщение в файле под названием "Входящие Боба". После того, как он сохранит это сообщение надолго, Боб актер подтвердит получение сообщения, отправив Алисе актеру свое сообщение, сказав: "Я получил Msg1". Алиса актер теперь может прекратить попытки повторения попыток. Боб актер затем проверяет, имеет ли телефон Боба активное соединение с сервером. Это происходит, и поэтому Боб актер передает это сообщение устройству через TCP.

             
      

Боб видит это сообщение и отвечает "Для Алисы: пусть создадут гигантских роботов, чтобы сразиться с ними". Это теперь получает Боб актер, как показано на шаге 1. Боб актер повторяет шаги 2 и 3, чтобы убедиться, что Алиса в конечном итоге получает идею, которая спасет человечество.

      
  

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