Skip to content

Latest commit

 

History

History
29 lines (23 loc) · 3.13 KB

README.md

File metadata and controls

29 lines (23 loc) · 3.13 KB

Проект должен быть размещен в $GOPATH/src/github.com/antelman107/metrics в виду использования менеджера зависимостей dep.

Зависимости подтягиваются через dep ensure.

В виду необходимости делать агрегированные запросы по метрикам, выбрана реляционная БД Postgresql. Для работы с миграциями БД используется библиотека github.com/rubenv/sql-migrate. Миграции на базу накатываются с помощью команды migrate database up.

Для работы с конфигом используется библиотека github.com/spf13/viper, для реализации интерфейса консольных комманд - github.com/spf13/cobra, для менеджмента зависимостей - github.com/sarulabs/di с собственной оберткой.

Компоненты:

  • планировщик (go run cmd/app/main.go service scheduler -c ./.bin/app/config.dist.json) - раз в минуту выбирает сайты для мониторинга и отправляет их в очередь.
  • получатель метрик (go run cmd/app/main.go service requester -c ./.bin/app/config.dist.json) - опрашивает очередь, в которую пишет scheduler, в случае получения задачи из этой очереди - выполняет запрос к сайту, сохраняет результат запроса в БД postgresql.
  • http-api (на основе веб-фреймворка echo):
    • для пользователей - /api - выдает справочник сайтов (id и урлы) и данные по метринкам. Запросы к /api трекаются через middleware Stats
    • для администраторов - /stats - выдает статистику по запросам к /api, которую собрал middleware Stats.

Технические детали:

  • Для запуска проекта локально база PostgreSQL и redis могут быть подняты с помощью docker-compose.
  • Отдельный демон requester и вообще очередь сайтов для мониторинга сделана отдельно в виду возможности масштабирования: при росте кол-ва сайтов реализация запросов внутри одного демона рано или поздно перестала бы успевать выполнить запросы в течение 1 минуты, а в нынешней реализации можно запустить несколько requester даже на нескольких хостах.
  • Для ускорения /api, данные кешируются в редисе по site_id. При добавлении новых метрик кеш сбрасывается, при получении данных из БД возобновляется.