Skip to content

Latest commit

 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Учебный проект по бэкенду с Kubernetes

Предметная область - программы спортивных тренировок.

Функционал

  • Функционал управления программами тренировок;
  • Функционал управления пользователями.

Особенности

  • Развертывание с помощью Kubernetes;
  • Мониторинг через Grafana, Prometheus, дашборды настроены автоматически "из коробки" благодаря описанию в манифестах K8S;
  • Аутентификация по JWT.

Архитектура проекта

  • Gateway - точка входа. Проксирует запросы к внутренним сервисам, выдаёт и проверяет JWT;
  • Сервис программ тренировок - управляет программами тренировок. Предоставляет REST API, GraphQL API;
  • Сервис пользователей - управляет пользователями приложения.

Технологии

  • Язык: Go;
  • API: HTTP, GraphQL, Swagger/OpenAPI (через swaggo);
  • Аутентификация: JWT;
  • Постоянное хранилище данных: MongoDB;
  • Кэш: Redis;
  • Брокер сообщений: Apache Kafka;
  • Мониторинг: Prometheus, Grafana;
  • Контейнеризация и оркестрация: Kubernetes, Minikube.

GraphQL

GraphQL предоставляет API сервиса программ тренировок в дополнение к HTTP. Реализует запросы:

  • allPrograms (query);
  • program (query);
  • programsCount (query);
  • programFilter (query);
  • updateProgram (мутация);
  • addProgram (мутация);
  • deleteProgram (мутация);
  • deleteAllPrograms (мутация).

Запросы можно отправлять через GraphQL Playground на порту 8010.

JWT

JWT применяется в Gateway для аутентификации запросов. Роут /login проверяет существование пользователя через сервис пользователей и формирует JWT. Gateway проверяет токен перед проксированием на другие сервисы;

MongoDB

Основное хранилище данных. Сервисы работают с разными коллекциями.

Redis

Используется сервисом программ тренировок в качестве кэша программ, запрошенных по идентификатору. Используется стратегия кэширования Cache Aside.

Apache Kafka

Обеспечивает асинхронное взаимодействие сервисов при подтверждении программы пользователем. Сервис программ тренировок публикует сообщение в топик request, передавая идентификатор программы и пользователя. Сервис пользователей читает этот топик, проверяет пользователя в MongoDB и публикует результат в топик post. Сервис программ тренировок читает ответ и сохраняет статус подтверждения программы. Таким образом асинхронное подтверждение программ не блокирует http запросы клиента.

Kubernetes

Система развертывается в виде набора сущностей k8s. Манифесты указаны ./manifests

Инструкция по запуску

  1. Запустить minikube: minikube start;
  2. Применить манифесты: kubectl apply -f .\manifests\ --recursive;
  3. Убедиться, что все поды готовы к использованию: kubectl get pods;
  4. Хотя здесь настроен ingress, из-за особенностей minikube может понадобиться пробросить наружу порты: kubectl port-forward service/gateway 8083:8083;
  5. Перейти на http://localhost:8083/swagger/index.html;
  6. Чтобы просмотреть дашборды нужно пробросить порты до Grafana kubectl port-forward service/grafana 3000:3000;
  7. Перейти на http://localhost:3000. Логин и пароль для входа - admin.

Скриншоты

image

Поды готового приложения


image

Swagger документация


image

Пример выполненного HTTP-запроса


image

Пример выполненного GraphQL-запроса для получения только нужных клиенту полей


image

Автоматические настроенные через манифесты K8S дашборды


image

Дашборд метрик сервиса пользователей


image

Дашборд метрик Gateway сервиса


image

Дашборд метрик сервиса программ тренировок


About

Бэкенд проект, который может быть развернут через Kubernetes

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages