Дополнительно

Этапы проектирования системы

  1. Сбор требований
  2. REST API (взаимодействие систем)

ДЗ

Первая часть

Необходимо спроектировать мессенджер WhatsApp самостоятельно (даже если вы еще ничего не знаете или если ваш дизайн будет состоять из одного сервера и БД - это будет НОРМАЛЬНО)

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

Требования к системе:

  • Сезонности у системы нет;
  • Системой будут пользоваться по всему миру;
  • Приложение будет показывать непрочитанные сообщения;
  • Приложение будет поддерживать чаты и личные сообщения;
  • Отправлять можно только текст и картинки в сообщениях;
  • Максимальный размер изображения в сообщении = 1МБ;
  • Максимальное кол-во изображений в сообщении = 3;
  • Максимальный размер текста в сообщении = 2000 символов;
  • Клиентами будут мобильные, десктопные и WEB приложения;
  • 200 000 000 уникальных пользователей заходят в приложение каждый день;
  • Каждый пользователь в среднем отправляет 10 сообщений в день;
  • Каждый пользователь в среднем просматривает сообщения 20 раз в день;
  • Система должна работать 24 на 7 (допустимо 4 часа и 23 минуты простоя в год);
  • Приложение должно показывать статусы онлайн/оффлайн пользователей, а также когда пользователь был последний раз в сети;
  • Сообщение до получателя должно успевать доходить за 3 секунды (если пользователя нет в сети - ему должно прийти Push уведомление на мобильный телефон);
  • Приложение должно поддерживать кросс-девайсную синхронизацию (если у вас это приложение открыто на телефоне и ноутбуке, и например вы прочитали сообщение на телефоне, то сообщение должно отобразиться прочитанным и на ноутбуке);

Дополнительно:

  • Фронтенд проектировать не нужно (концентрируемся только на бэкенде)
  • Аутентификацию проектировать не нужно (представим, что эта часть системы уже кем-то реализована)

Для дизайна можно пользоваться инструментами Lucidchart или Miro - там достаточно богатый функционал и в будущем вам будет просто туда вносить изменения. В дизайне хотелось бы видеть:

  • Расчет нагрузки и потребления памяти у основных операций.
  • Модель данных (описать основные сущности в БД и как они взаимосвязаны);
  • API (расписывать REST или GraphQL не нужно - просто словами опишите основные операции над вашей системой);
  • Верхнеуровневое проектирование основных компонентов системы и их отношений с другими компонентами системы;

Желаем удачи в дизайне WhatsApp! (после курса будет очень любопытно понаблюдать за собственным прогрессом)

Вторая часть

Итоговый проект

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

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

Функциональные требования - их необходимо взять из первого домашнего задания по проектирования API (все те операции из API необходимо будет воплотить в будущей архитектуре).

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

Верхнеуровневый дизайн - необходимо сделать верхнеуровневый дизайн с использованием C4 model (не спускаемся ниже второго уровня - только system и container diagram) и C4-PlantUML (можно пользоваться PlantUML Online Editor, чтобы не приходилось ставить ничего дополнительного на ваш компьютер)

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

Дополнительные материалы

КНИГИ:

  • Высоконагруженные приложения. Программирование, масштабирование, поддержка
  • Site Reliability Engineering. Надежность и безотказность как в Google
  • System Design. Подготовка к сложному интервью
  • Микросервисы. Паттерны разработки и рефакторинга
  • Распределенные системы

ВИДЕО-КУРСЫ:

РЕКОМЕНДУЕМЫЕ СТАТЬИ: