Содержание[Скрывать][Показывать]
WhatsApp — это социальная программа для обмена сообщениями, которая позволяет пользователям обмениваться сообщениями друг с другом.
Вы когда-нибудь задумывались, как работает WhatsApp?
Какие концепции лежат в основе его создания и работы?
В этой статье мы рассмотрим основы WhatsApp. Системный дизайн.
Мы также рассмотрим общую архитектуру WhatsApp, которую можно использовать для создания любого программного обеспечения для чата.
Итак, без лишних слов, давайте посмотрим на дизайн системы WhatsApp!
1. Ключевые требования
WhatsApp — это масштабируемая технология, которую используют многие люди по всему миру. В результате он должен быть хорошо спроектирован, чтобы быть практически всегда надежным и функционирующим.
В результате определение критических потребностей системы имеет решающее значение.
Это минимальные требования для мессенджера WhatsApp:
- Способен облегчить взаимодействие один на один.
- Возможны как подтверждение сообщения, так и время последнего просмотра (Отправлено, Доставлено и Прочитано).
- Разрешить сквозное шифрование и поддержку мультимедиа (изображения/видео).
Давайте выясним, какой мощности требует наш необходимый сервис.
2. Оценка емкости
Наша цель — создать платформу, способную обрабатывать большой объем трафика. Предположим, что в день отправляется 10 миллиардов SMS. Мы получили:
- Каждый день один миллиард человек отправляет 10 миллиардов SMS.
- При пиковом трафике (в секунду) было 700,000 6 активных человек (в среднем в XNUMX раз).
- Во время пиковой нагрузки передается 40 миллионов сообщений в секунду.
- Средняя длина сообщения составляет 160 символов: 10 Б * 160 = 1.6 ТБ данных генерируется каждый день.
- Возьмем для примера десять лет службы: 10*1.6Б*365 ПБ
- Все приложение будет состоять из микросервисов, каждый из которых будет выполнять специализированную задачу. Предположим, что отправка сообщения занимает 20 миллисекунд и что на каждый сервер приходится 100 одновременных подключений. В результате предполагаемое количество требуемых серверов чата = (задержка сообщений чата в секунду)/количество одновременных подключений на сервер = 40M * 20 мс / 100 = 8000 серверов.
3. Архитектура высокого уровня
Эта система построена на двух основных службах. Например, служба чата и временная служба. Служба чата обрабатывает весь трафик, генерируемый онлайн-сообщениями пользователей. В то же время временная служба обрабатывает трафик, когда пользователь находится в автономном режиме.
Если пользователь находится в сети, служба чата отвечает за доставку сообщений.
Он проверит, находится ли получатель сообщения в сети или нет; если получатель находится в сети, этот сервис немедленно доставит сообщение; если получатель не находится в сети, временная служба отправит ему сообщение, когда он вернется в сеть.
Временная служба имеет отдельную область хранения для хранения временно доступных данных до повторного подключения автономного пользователя.
Проектирование высокоуровневых API
Эта служба имеет два функциональных API высокого уровня для отправки и чтения сообщений. Система может быть реализована с использованием архитектуры REST.
Параметры отправки сообщений
Этот API будет использоваться для передачи сообщений между двумя пользователями.
Параметры разговора
Этот API используется для отображения многопоточных чатов. Считайте, что это первое, что вы видите, когда открываете WhatsApp. Мы хотели бы получить только несколько сообщений для одного пользователя в одном запросе API. Для этого необходимы параметры смещения и счетчика сообщений.
Каковы функции таких функций, как «последнее посещение», «один тик» и «двойной тик»?
Важную роль в развертывании этих служб играет служба подтверждения. Эти функции были разработаны, поскольку эта служба продолжает генерировать и проверять ответы на подтверждение.
- Одиночный тик: когда сообщение от пользователя А достигает пользователя Б, сервер отправляет один тик, подтверждающий, что сообщение было передано.
- Двойная галочка: после того, как сообщение сервера будет отправлено пользователю Б через надлежащее соединение, пользователь Б подтвердит получение сообщения серверу. Затем сервер предоставит пользователю А еще одно подтверждение. В результате появится повторяющаяся галочка.
- Синяя галочка: Пользователь B отправит еще одно подтверждение на сервер после проверки сообщения. Затем сервер отправит пользователю А дополнительное подтверждающее сообщение. После этого на экране пользователя А появится синяя галочка.
- Последний визит: Механизм сердцебиения полностью отвечает за последнюю увиденную функцию. Каждые 5 секунд пульсация передается на сервер, который отслеживает последний статус каждого пользователя в таблице, к которой может легко получить доступ любой другой пользователь.
4. Разработка ключевых функций
Персонализированное взаимодействие
Это необходимая часть службы чата. Пользователь может просто отправлять сообщения другому пользователю с помощью этой службы. Давайте посмотрим, как это работает:
Предположим, Джей хочет пообщаться с Аюшем. Джей связан с чат-сервером, с которого он получает сообщение. Джей получает подтверждение от сервера чата об отправке сообщения. Сервер чата теперь запрашивает информацию из хранилища данных о сервере чата, к которому подключен Ааюш. Чат-сервер Джея теперь передает сообщение на чат-сервер Ааюша, а Ааюш получает сообщение через механизм push. Теперь Ааюш отправляет подтверждение на сервер чата Джея, который уведомляет Джея о том, что сообщение было доставлено. Если Ааюш читал сообщение снова, новое подтверждение того, что сообщение было прочитано, доставлялось Джею.
Статус активности пользователя
Время последней активности человека — штатная функция мессенджеров.
На этой схеме изображена система поддержания соединения между клиентом и сервером. Веб-сокеты использовались для установления двунаправленного соединения между сервером и клиентом. Эти соединения отправляют тактовые импульсы, которые используются для отслеживания состояния активности пользователя.
Сквозная конфиденциальность
Сквозное шифрование — ключевая функция, гарантирующая, что сообщения могут читать только те пользователи, с которыми вы общаетесь. Открытый ключ используется всеми пользователями, участвующими в обмене данными, и имеет решающее значение для обеспечения сквозного шифрования. Предположим, что на канале есть два пользователя, Джей и Ааюш, которые общаются друг с другом.
У Джея есть открытый ключ Ааюша, а у Аюша есть открытый ключ Джея, а также их закрытый ключ. В результате, когда Джей передает сообщение, он шифрует его с помощью открытого ключа Аюша, который можно расшифровать только с помощью закрытого ключа Ааюша.
Точно так же Джей сможет расшифровать только сообщение Аюша. В результате только Джей и Айсу смогут видеть сообщения друг друга, а сервер будет просто выполнять роль шлюза во всем процессе.
5. Узкие места
Любая система подвержена сбоям. Чтобы управлять таким большим объемом трафика, сервис должен постоянно оставаться работоспособным и отказоустойчивым, чтобы избежать узких мест. Поскольку наш сервис полностью зависит от серверов Chat и Transient, мы должны решить все проблемы, возникающие в связи с их работой.
Сбой чат-сервера: Это сердце нашей системы. Когда пользователи находятся в сети, он отвечает за управление сообщениями и их доставку. В результате эта система поддерживает связь со своими пользователями.
В результате, если эта служба выйдет из строя, пострадает вся архитектура. Существует два подхода к управлению сбоем сервера чата. Один метод заключается в переносе TCP-соединений на другой сервер, а другой — в том, чтобы позволить пользователям автоматически устанавливать соединения в случае потери соединения.
Сбой временного хранилища: еще один компонент, подверженный сбоям, который в конечном итоге может привести к повреждению всей службы, — это временное хранилище. Сообщения на пути к автономным пользователям теряются, если эта служба дает сбой.
Мы можем предотвратить потерю сообщений, реплицируя временное хранилище каждого пользователя. В результате реплика может использоваться для обработки функций всякий раз, когда пользователь возвращается в сеть. Если исходный сервер становится доступным, как исходный, так и реплика временного хранилища пользователя объединяются в одно хранилище.
6. Методы оптимизации
Задержка: чтобы обеспечить бесперебойную и улучшенную работу с клиентами, служба обмена сообщениями должна работать в режиме реального времени. В результате задержку необходимо уменьшить за счет кэширования части часто используемых данных. Мы можем кэшировать статус активности пользователя и последние разговоры в памяти, используя распределенный кеш, такой как Redis.
Доступность: Нам нужно, чтобы наш сервис был доступен большую часть времени. Наша система должна быть отказоустойчивой, поэтому мы можем хранить несколько копий временных сообщений, чтобы любое потерянное сообщение можно было быстро восстановить из дубликатов. В результате доступность системы не может быть поставлена под угрозу.
Заключение
Наша система теперь поддерживает только несколько возможностей, но мы можем легко расширить ее, добавив групповые чаты для рассылки сообщений нескольким людям. Вы также можете предоставить возможности видео и телефонных звонков. Эта система также может быть разработана таким образом, чтобы пользователи могли публиковать обновления статуса или рассказы и читать друг друга.
Я много работал, чтобы предоставить вам общий обзор дизайна системы WhatsApp. Надеюсь, вам понравилось, и вы будете использовать его с пользой.
Оставьте комментарий