2022_1_Wave

module
v0.0.0-...-704a905 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 3, 2022 License: Apache-2.0

README

Wave Music

The Best Musical Service

© Team Wave

Team Wave

Team:

Backend
Frontend

Бекенд

Архитектура

В основе архитектуры лежит "чистая архитектуры Дяди Боба" с применением микросервисов на 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)

Directories

Path Synopsis
cmd
api
init
db
pkg
websocket-server
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL