Казначей - система для хранения секретов, которые можно сжечь после прочтения. Практической пользы не несёт, но на её основе можно объяснить, как компоновать микросервис систему на Go.
- Создать микросервис, который реализует 3 метода
- Создать некую запись в базе данных
- Получить запись по первичному ключу
- Удалить запись по первичному ключу
- Использовать чистую архитектуру
- Для сохранения данных используется паттерн репозитория и несколько реализаций (sql, nosql и т.д.)
- На транспортном уровне использовать HTTP и GRPC (использовать кодогенерацию по готовым описаниям сервиса)
- Реализовать логгирование
- Реализовать трейсинг с использованием OpenTelemetry
- Всё можно запустить локально с помощью docker compose
Бизнес логика реализована в internal/service
.
Есть 2 сервиса - CRUD для секретов и счётчики для метрик.
CRUD для секретов работает с репозиторием секретов (internal/service/repository/
), который абстрагирует
все взаимодействия с базой данных внутри. Есть несколько реализаций репозитория - memory
,redis
,mysql
,postgresql
.
Все репозитории должны реализовывать интерфейс internal/service/repository/SecretRepo
.
И интерфейс internal/service/repository/SecretRepo
используется сервисом internal/service/SecretService
в работе.
На транспортном уровне в internal/transport
реализованы несколько транспортов, дёргающих методы сервиса.
Это grpc, http,
prune (очистка старых записей по таймеру),
watchdog (проверка работоспособности сервиса с помощью systemd watchdog).
Транспортный уровень вызывает методы сервиса, а сервис сделан так, чтобы его методы можно было вызвать из разных контекстов,
и при этом оно сохраняло бы работоспособность.
-
Сделать файл
.env
по аналогии сenv.example
- название ключей окружения можно посмотреть в файлеconfig/config.go
-
Выбрать нужную базу данных - mysql, redis, postgresql.
-
Запустить сервис с помощью
docker compose up
-
На http://localhost:3000/ будет слушать HTTP сервер
-
На http://localhost:3001/ будет слушать GRPC сервер
-
Запустите клиенты для генерации секретов
make cli_curl make cli_grpc make cli_http_client
-
JWT токен можно сгенерировать тут - https://jwt.io/. Алгоритм - HS512, "sub" - любая строка, секрет по умолчанию -
super_secret_for_purser