Технологии: 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.
- Микросервис, отвечающий за взаимодействие с пользователем. Выдает веб страницу, подключает пользователя по WebSocket. Подключается к кластеру Redis, кластеру PostgreSQL, отправляет сообщения в RabbitMQ и хранит фото лотов в S3.
- Auth service.
- Микросервис отвечающий за авторизацию/регистрацию пользователей. Подключается к кластеру Redis и кластеру PostgreSQL.
- Микросервис отвечающий за авторизацию/регистрацию пользователей. Подключается к кластеру Redis и кластеру PostgreSQL.
- Crypto service.
- Микросервис, отвечающий за проверку настоящего баланса криптокошелька у пользователя. Подключается к одному из узлов децентрализованной сети Ethereum.
- Микросервис, отвечающий за проверку настоящего баланса криптокошелька у пользователя. Подключается к одному из узлов децентрализованной сети Ethereum.
- RabbitMQ от Bitnami.
- Передает асинхронные сообщения от Backend service в Telegram_Alerter. Возможно добавление и других способов рассылки.
- Передает асинхронные сообщения от Backend service в Telegram_Alerter. Возможно добавление и других способов рассылки.
- Высокодоступный кластер Redis от Bitnami.
- Redis с включенной репликацией.
- Redis с включенной репликацией.
- Высокодоступный кластер PostgreSQL от Bitnami.
- PostgreSQL с включенной репликацией. Общается с сервисами асинхронно.
- PostgreSQL с включенной репликацией. Общается с сервисами асинхронно.
- Высокодоступный кластер PostgreSQL от Bitnami.
- PostgreSQL с включенной репликацией. Общается с сервисами асинхронно.
- PostgreSQL с включенной репликацией. Общается с сервисами асинхронно.
- Traefik.
- Балансирует нагрузку на Backend service.
- Балансирует нагрузку на Backend service.
- Telegram_alerter service.
- Микросервис, отвечающий за рассылку о новых лотах всем, кто разрешил Telegram боту писать себе сообщения. Написан на aiogram.
- Добавление Hashicorp Vault в архитектуру для удобной работы с секретами.
- Развертывание кластера тестнета вместо crypto service и работа с ним.
- Интеграция с Cryptomus или аналогами