Перейти к содержанию

Основа

База

Проект написан на Golang.

Основан на фреймворке go-kratos.

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

О зависимостях проекта можно сделать вывод по файлам:

  • configs/config.yaml — публичная часть текущей конфигурации сервиса,
  • go.mod — используемые golang-библиотеки,
  • api/domain/notification/v1/notification.proto — используемые методы сервиса notifications.

Интерфейсы

Сервис предоставляет API с помощью:

  • GRPC-методов по порту 9000 (выставлен по умолчанию, может отличаться);
  • HTTP-методов по порту 8000 (выставлен по умолчанию, может отличаться).

GRPC-методы и аналогичные HTTP-методы описаны в файлах:

api/domain/v1/*.proto

Также, есть автоматически генерируемая схема OpenAPI (Swagger):

openapi.yaml

Внешние зависимости

  • База данных PostgreSQL — сервис во время запуска самостоятельно создаст или актуализирует сущности базы данных — саму базу, схему, таблицы, последовательности, индексы и данные.

  • Сервис notifications — используется для отправки уведомлений.

Внутренние зависимости

Основные используемые библиотеки:

  • entgo.io/ent — ORM и кодогенератор, используется для упрощения работ с репозиториями базы данных,
  • github.com/gavv/httpexpect/v2 — библиотека для функционального тестирования сервиса, позволяет запустить экземпляр сервиса и выполнить проверки API-методов,
  • github.com/go-kratos/kratos/v2 — непосредственно сам фреймворк Kratos,
  • github.com/google/wire — инжектор зависимостей (dependency injection), облегчает внутреннюю сборку структур со множеством зависимостей,
  • github.com/tidwall/gjson — парсер данных в формате JSON, сильно облегчает работу со сложными данными (на его базе создан пакет extractor).

Инфраструктурные зависимости

Сервис рассчитан на инфраструктурные решения, предлагаемые проектом infra:

  • Docker Swarm — облегчённый оркестратор для контейнеров ("kubernetes на минималках"), позволяет запускать контейнеры с сервисами, управлять их работой и автоматически перезапускать их при проблемах,
  • Traefik — сервисный роутер (edge router), облегчает работу с контейнерами в Docker Swarm и маршрутизацией запросов к ним (грубо говоря, в текущем проекте это "nginx для docker-контейнеров"),
  • Portainer — сервис для управления Docker-контейнерами, представляет собой "инфраструктурную админку", в которой возможно настроить текущую конфигурацию Docker Swarm, развернуть/запустить/перезапустить/отключить контейнер, посмотреть его логи, подключиться к его терминалу и прочее, что значительно облегчает работу с контейнерами,
  • Registry — хранилище docker-образов для сервисов, позволяет принимать собранные образы и предоставлять их для запуска внутри Docker Swarm,
  • Grafana — проект для сбора и показа метрик, позволяет собирать произвольные метрики сервиса (через graphite), применять к его значениям алерты и рассылать их по заданным параметрам на почту или в мессенджер, помимо этого позволяет просматривать логи сервера/контейнеров и искать их по запросу (для этого используется связка loki + promtail).