Skip to content

go-park-mail-ru/2022_1_Wave

Repository files navigation

The Best Musical Service

© Team Wave

Team Wave

Team:

Backend

Бекенд

Архитектура

В основе архитектуры лежит "чистая архитектуры Дяди Боба" с применением микросервисов на gRPC. В проекте присутствует разделение на следующие слои:

  1. доставка (delivery)
  2. бизнес-логика (useCase)
  3. агент (agent)
  4. сервис (gRPC)
  5. репозиторий (repository)

Каждый слой включает в себя один уровень ниже. Каждый слой не должен включать в себя слой выше или слой из этого же уровня. Данный подход позволяет относительно недорого масштабироваться и уменьшает стоимость внедрения новых возможностей сервиса. Новым разработчикам достаточно следовать этому паттерну, что позволяет им быстро вкатиться в разработку.

Схема:

схема

Примечание: в нашем проекте добавлены слои агентов и gRPC. Агент - это посредник между бизнес-логикой и самим сервисом. Эта сущность инкапсулирует особенности обращения к gRPC (сигнатуру вызываемых методов сервиса).


gRPC

В проекте есть следующие сервисы-gRPC:

  • альбом (album)
  • артист (artist)
  • трек (track)
  • плейлист (playlist)
  • пользователь (user)
  • аутентификация (auth)
  • сокращатель ссылок (linker)
  • веб-сокет сервер для синхронизации между устройствами (websocket)

Сервер

Для серверной разработки используем легковесный и быстрый Echo. Для прокси настроили nginx.


Основная база

Подключили Postgres

Хранение сессий пользователей

Юзаем ин-мемори хранилище данных Redis

Хранение ссылок

Развернули документоориентированную систему MongoDB


Docker

Под каждый сервис собран легковесный docker-образ (в основном на Ubuntu)

CI/CD

Развернули кластер на K8S. Используем встроенный Github Actions для автодеплоя на кластер. На кластере находятся все компоненты приложения за исключением постгриса и монги (они на другой тачке). Все образы подгружаются с нашего dockerHub.

Метрики и алерты

К каждому сервису ходит Prometheus для сбора метрик. Настроили Alertmanager с алертингом в телеграм для оповещении о состоянии сервисов. А в оценке происходящего с дашбордов нам помогает Grafana.

Документация

Сбилдили удобную доку через swagger

Summary

В проекте 20116 строчек go-кода (01.06.2022 22:15 GMT+3)

About

Музыкальный сервис

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •