Управление зависимостями в микросервисах на Go

Уже несколько лет IT индустрия идёт в направлении микросервисов. Можно долго спросить хорошо это или плохо, но от этого никуда не деться.

Из основных плюсов микросервисной архитектуры можно отметить:

  • Разбиение кода по модулям (доменам)
  • Независимое развёртывание
  • Меньше проблем с конфликтами в коде

Из минусов:

  • Распределённые вызовы
  • Обеспечение согласованности
  • Обновление библиотек во всех микросервисах
  • Сложность эксплуатации

Последний пункт про трудность эксплуатации включает в себя много аспектов:

  • Мониторинг
  • Сквозное логирование (tracing)
  • Одинаковость сервисов для эксплуатации (запуск, логирование, метрики, service discovery, etc …)

Чтобы обеспечить одинаковость сервисов нужно использовать общие библиотеки. С ростом количества микросервисов, да и просто со временем в разных микросервисах библиотеки будут разных версии. От этого никуда не деться, поэтому нужен механизм просмотра версий библиотек для всех микросервисов. Также это будет полезно для обновления критичных багов сторонних, да и своих библиотек.

Последнее время я имел опыт работы в основном с Go, и я в процессе работы столкнулся с этой проблемой. Нужно было обновлять внутреннюю библиотеку во всех микросервисах. И была написана библиотека для этого: github.com/stamm/dep_radar.

Что она умеет:

  • Отображать используемые версии библиотек во всех микросервисах
  • Возможность задавать различные параметры для конкретных библиотек:
    • Рекомендуемую версию (подсветка красным или зелёным)
    • Обязательность использования
    • Обязательность указания версии, а не хэша
    • Обязательность по неиспользованию (легаси)
  • Поддерживает glide и godep
  • Поддерживает github и приватный bitbucket
  • Довольно быстрая работа (параллельность + не выкачивает весь код)
  • Можно менять местами, что будет отображаться по горизонтали: сервисы или библиотеки

Архитектура этой тулзы позволяет дописать поддержку других менеджеров зависимостей, а также поддержку других сервисов по хранению кода (gitlab, например).

Если у вас репозитории на github’е, то можно сразу посмотреть результат через докер: docker run -p 8081:8081 stamm/dep_radar:latest -github_org="dep-radar"

Все замечания можно писать в issues или даже делать pull request: github.com/stamm/dep_radar.