В основе архитектуры лежит "чистая архитектуры Дяди Боба" с применением микросервисов на gRPC. В проекте присутствует разделение на следующие слои:
- доставка (delivery)
- бизнес-логика (useCase)
- агент (agent)
- сервис (gRPC)
- репозиторий (repository)
Каждый слой включает в себя один уровень ниже. Каждый слой не должен включать в себя слой выше или слой из этого же уровня. Данный подход позволяет относительно недорого масштабироваться и уменьшает стоимость внедрения новых возможностей сервиса. Новым разработчикам достаточно следовать этому паттерну, что позволяет им быстро вкатиться в разработку.
Схема:
Примечание: в нашем проекте добавлены слои агентов и gRPC. Агент - это посредник между бизнес-логикой и самим сервисом. Эта сущность инкапсулирует особенности обращения к gRPC (сигнатуру вызываемых методов сервиса).
В проекте есть следующие сервисы-gRPC:
- альбом (album)
- артист (artist)
- трек (track)
- плейлист (playlist)
- пользователь (user)
- аутентификация (auth)
- сокращатель ссылок (linker)
- веб-сокет сервер для синхронизации между устройствами (websocket)
Для серверной разработки используем легковесный и быстрый Echo. Для прокси настроили nginx.
Подключили Postgres
Юзаем ин-мемори хранилище данных Redis
Развернули документоориентированную систему MongoDB
Под каждый сервис собран легковесный docker-образ (в основном на Ubuntu)
Развернули кластер на K8S. Используем встроенный Github Actions для автодеплоя на кластер. На кластере находятся все компоненты приложения за исключением постгриса и монги (они на другой тачке). Все образы подгружаются с нашего dockerHub.
К каждому сервису ходит Prometheus для сбора метрик. Настроили Alertmanager с алертингом в телеграм для оповещении о состоянии сервисов. А в оценке происходящего с дашбордов нам помогает Grafana.
Сбилдили удобную доку через swagger
В проекте 20116 строчек go-кода (01.06.2022 22:15 GMT+3)