/web_store

Real-time аукцион с автоматически возводимой инфраструктурой в облаке Yandex Cloud.

Primary LanguagePython

Проект web_store (EthB2B).

Проект IaC в облаке Yandex Cloud. Terraform создает ВМ, балансировщики и S3, а Ansible устанавливает и настраивает приложения. Сам проект представляет real-time аукцион вещей, созданный на микросервисной архитектуре, работающей по WebSocket с клиентом. Пользователи указывают свои криптокошельки и предлагают свою цену за товар, причем данная сумма должна присутствовать. Приложение находится в Kubernetes кластере, Jenkins осуществляет CI/CD приложения, обновления приложения происходят через Helm стратегией rolling update для Deployments. Prometheus собирает метрики от Node_exporter и kube_state_metrics для визуализации в Grafana. Для отправки сообщений в архитектуре имеется RabbitMQ и микросервис забирающий из него сообщения и отправляющий рассылку о новых лотах через Telegram бота.

Технологии: Terraform, Ansible, Prometheus, Grafana, Kubernetes, Helm, Jenkins, Redis, Docker, S3, PostgreSQL, Python, FastAPI, Yandex Cloud, Traefik.

Инфраструктурная схема проекта:

Все приложения и инфраструктура создаются связкой Terraform и Ansible в облаке Yandex Cloud. Само микросервисное приложение находится в кластере Kubernetes. Описание элементов данной схемы:

  • Traefik(встроен в Kubernetes кластер). Балансирует нагрузку на наше веб приложение.
  • Kubernetes кластер. Был выбран k3d для развертывания кластера Kubernetes. В нем работает само веб приложение, за обновление и развертывание которого отвечает Helm. Также он выдает метрики kube_state_metrics для сбора метрик Prometheus.
  • Jenkins. Совершает CI/CD приложения. Строит новые образы Docker, отправляет в DockerHub, совершает обновление приложения с помощью Helm стратегией Rolling update.
  • Grafana. Визуализирует метрики выдаваемые Prometheus
  • Prometheus. Собирает метрики от kube_state_metrics и node_exporter.
  • S3 бакет Хранит картинки для лотов, которые выставили пользователи.

Архитектура приложения в кластере Kubernetes:

Описание элементов кластера Kubernetes:

  • Backend service.
    • Микросервис, отвечающий за взаимодействие с пользователем. Выдает веб страницу, подключает пользователя по WebSocket. Подключается к кластеру Redis, кластеру PostgreSQL, отправляет сообщения в RabbitMQ и хранит фото лотов в S3.

  • Auth service.
    • Микросервис отвечающий за авторизацию/регистрацию пользователей. Подключается к кластеру Redis и кластеру PostgreSQL.

  • Crypto service.
    • Микросервис, отвечающий за проверку настоящего баланса криптокошелька у пользователя. Подключается к одному из узлов децентрализованной сети Ethereum.

  • RabbitMQ от Bitnami.
    • Передает асинхронные сообщения от Backend service в Telegram_Alerter. Возможно добавление и других способов рассылки.

  • Высокодоступный кластер Redis от Bitnami.
    • Redis с включенной репликацией.

  • Высокодоступный кластер PostgreSQL от Bitnami.
    • PostgreSQL с включенной репликацией. Общается с сервисами асинхронно.

  • Высокодоступный кластер PostgreSQL от Bitnami.
    • PostgreSQL с включенной репликацией. Общается с сервисами асинхронно.

  • Traefik.
    • Балансирует нагрузку на Backend service.

  • Telegram_alerter service.
    • Микросервис, отвечающий за рассылку о новых лотах всем, кто разрешил Telegram боту писать себе сообщения. Написан на aiogram.

Скриншоты работы приложения:

Страница авторизации.

Страница регистрации.

Отсутствие лотов для аукциона.

Страница добавления лота.

Процесс аукциона (Добавление к сумме в процентном отношении).

Рассылка от Telegram бота о новых лотах.

Планы развития проекта:

  • Добавление Hashicorp Vault в архитектуру для удобной работы с секретами.
  • Развертывание кластера тестнета вместо crypto service и работа с ним.
  • Интеграция с Cryptomus или аналогами