Обмен сообщениями в реальном времени теперь является неотъемлемой частью нашей повседневной жизни, без них наш день будет неполным. Но задумывались ли вы, как работает «WhatsApp» или другое приложение для обмена сообщениями в реальном времени?

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

Прежде чем углубиться, давайте разберемся, «как работает общение»?

Когда два клиента (A и B) хотят общаться или отправлять сообщения друг другу, они сначала знают адреса друг друга (это может быть IP, MAC или любой индивидуальный индивидуальный идентификатор) и обмениваются сообщениями друг с другом по сети, в данном случае это ИНТЕРНЕТ.

Но что, если сеть очень большая, а количество клиентов исчисляется миллионами или миллиардами?

В очень большой сети очень сложно узнать адрес каждого клиента. В этом случае, чтобы сделать эту систему более надежной и высокодоступной, нам нужен компонент между клиентами под названием «СЕРВЕР». Задача этого сервера - координировать действия всех подключенных к нему клиентов.

После внедрения server. Все клиенты вместо того, чтобы устанавливать соединение друг с другом, они устанавливают соединение с сервером.

В этом сценарии, когда клиент (A) хочет отправить сообщение другому клиенту (D), он сначала отправляет сообщение на сервер, и сервер знает адрес другого клиента (D), а затем пересылает сообщение другому клиенту (D ) наоборот.

Это обзор коммуникационной архитектуры. Давайте спроектируем Actual System для системы обмена сообщениями в реальном времени.

Но прежде чем разрабатывать какой-либо продукт, действительно важно понять некоторые требования, такие как:

  1. База пользователей: действительно важно понимать, в каком масштабе будет использоваться приложение.
  2. Требуются функции

Итак, давайте перечислим некоторые функции, которые необходимо включить в WhatsApp:

1). Текстовые сообщения.

2). Медиа-поддержка.

3). Последний визит

4). Шифрование сообщений

5). Услуги телефонии (аудио / видео)

Приступим к проектированию системы с учетом требований приложения.

В зависимости от базы пользователей нам нужно несколько серверов для обработки такого объема трафика, поэтому вместо одного сервера мы размещаем несколько серверов.

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

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

Но нашему приложению также нужен некоторый механизм хранения для сохранения некоторого произвольного состояния или данных, для выполнения этого требования мы также добавили базу данных, которая доступна для всех серверов.

Но какой тип подключения используется?

Обычно такая система использует ДУПЛЕКСНОЕ или двунаправленное соединение. Поскольку сообщение также может быть сгенерировано с сервера, требуется двунаправленная связь.

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

  1. Когда отправитель подключен к серверу, но не получатель.

В этом случае, когда получатель не подключен к серверу, сообщение сохраняется в базе данных, а когда получатель подключается к серверу, сообщение извлекается из базы данных и пересылается получателю.

2. Когда отправитель не подключен к серверу.

В этом случае, когда отправитель не подключен к серверу, сообщение, отправленное отправителем, сохраняется в локальном хранилище устройства (это может быть SQLite или что-то еще в зависимости от платформы). И когда отправитель выходит в сеть или подключается к серверу, сообщение извлекается из локального хранилища и отправляется на сервер.

3. Когда оба клиента подключены к серверу:

В этом случае, когда оба клиента подключены к серверу, отправитель отправляет сообщение, а сервер пересылает это сообщение получателю, не сохраняя сообщение в базе данных или локальном хранилище устройства.

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

Ваше здоровье !!! Продолжайте изучать, продолжайте кодировать с Coding Gurukul.

Щелкните здесь, чтобы прочитать часть 2 этой статьи.