Проект «Система для поддержки работы баров» курса «Highload Architect»

Проект «Система для поддержки работы баров» курса «Highload Architect» Полезное

Предлагаем вашему вниманию проектную работу Наширвановой Кристины, выпускницы курса по Highload Architect. Она спроектировала микросервисную архитектуру для автоматизации приема заказов и организации инвентаризации в баре.

Цель моей проектной работы – создать архитектуру микросервисов для системы, позволяющей автоматизировать часть бизнес-процессов работы в домашних и коммерческих барах.


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

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

Проект «Система для поддержки работы баров» курса «Highload Architect»

Цели использования

  1. Определимся с основными сценариями работы системы.
    В первую очередь, требуется спроектировать интерфейс заказов, который поможет организовать выбор конкретного инстанса бара в приложении, а далее оформить заказ.
    За рамки нашей архитектуры вынесем функционал по оплате заказов, предполагая возможность закрыть счет в самом заведении.
  2. Для роли владельца бара потребуется возможность отслеживать и обновлять содержимое хранилища бара. А именно: уточнять количество остатков ингредиентов и инвентаря, алертинг для отслеживания, если запасы подходят к концу, чтобы вовремя их пополнить.
  3. На основании имеющихся ингредиентов владелец бара составляется меню и указывает цены в заведении.
Проект «Система для поддержки работы баров» курса «Highload Architect»

Инструменты и технологии

  1. Docker (https://www.docker.com/) – самая популярная платформа контейнеризации. Разработчики не покидали рынок РФ и не блокируют доступ к своему ПО. В качестве тестового взят образ Sonarqube Community версии 9.2.2 от 14.12.2021 года с известными уязвимостями безопасности.
  2. Backend реализовать с помощью Spring Webflux и Project Reactor (https://projectreactor.io/) с возможностью использовать неблокирующие (асинхронные) потоки, работающие с вводом/выводом данных.
  3. Kafka (https://kafka.apache.org/) даст возможность сохранить и не потерять заказы, например, за последний месяц при соответствующей конфигурации.
  4. Для хранения заказов, ингредиентов и др. сущностей использовать реляционную базу данных, например, Postgresql (https://www.postgresql.org/).
    А также в систему добавить нереляционную базу данных для текстового поиска в меню (например, MongoDb).
  5. Redis (https://redis.io/) – использовать в качестве кеша меню конкретного заведения с ценами. Кеш обновлять по расписанию отдельной задачей, либо автоматически при вызове API на изменение состава меню.

Проектирование

1. Выделим несколько микросервисов в системе. Во-первых, в качестве входной точки создадим сервис API Gateway с интеграцией с Keycloak для авторизации и получения токена с определенной ролью в системе.

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

Проект «Система для поддержки работы баров» курса «Highload Architect»

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

Также предполагается интеграция с Kafka в качестве производителя сообщений в случае, когда запасы подходят к нижней границе установленного в конфигурации лимита (дла алертинга о завершении запасов).

Проект «Система для поддержки работы баров» курса «Highload Architect»

3. Модуль Order Service обеспечивает хранение и отслеживание статуса готовности каждого заказа. В негативных сценариях (когда заказ не был взят в работу) предполагается автоматический повтор обработки заказа. Также интегрирован с Kafka в качестве писателя, обновляя данные по статусу заказа.

Проект «Система для поддержки работы баров» курса «Highload Architect»

4. Notification Service является читателем топиков Kafka, готовит уведомления и отправляет по сконфигуренным каналам связи (статус заказа для гостя заведения, изменение состояния хранилища бара для владельца).

Проект «Система для поддержки работы баров» курса «Highload Architect»


Итоги. Развитие проекта

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

Возможные варианты дальнейшей доработки проекта:

  • развитие маркетинга – активное ведение социальных сетей с указанием ссылок на систему, добавление Telegram-бота для привлечения пользователей;
  • добавить систему оплаты заказов в приложение. Для этого требуется поддержать стандарт PSI DSS (https://www.pcisecuritystandards.org/document_library/?category=pcidss&document=pci_dss)  – это международный стандарт безопасности, созданный специально для защиты данных платежных карт, что подразумевает внедрение шифрования и хранения данных карт пользователей, а также фискализацию оплаты;
  • масштабирование проекта;
  • разработка мобильного приложения;
  • развитие программы лояльности, добавление карты лояльности в Wallet.

Интересует архитектура нагруженных систем? Добро пожаловать на курс!

OTUS Журнал