msrc
Языки
- Go100%
Унаследовано от "gitlab.systems-fd.com/packages/golang/servers/msrc/v3
Библиотека мультисервисного приложения для Golang
Библиотека предназначена для реализации мультисервисных приложений на .
Например: У вас есть сервис, который предоставляет RestAPI, а также требуется реализация
Websocket. По сути каждый сервис требует блокировки основной , можно использовать
дочерние , что по сути и делает эта библиотека.
Также библиотека реализует , который позволит правильно останавливать сервисы.
Сервис поддерживает логирование на основе
Установка
Необходимо включить библиотеку в один из скриптов следующим образом:
Далее необходимо установить зависимости при помощи стандартной утилиты :
Использование
Для использования библиотеки необходимо реализовать интерфейс сервиса:
Далее необходимо использовать фабрику для генерации объекта службы:
При передаче списка, ключ используется в качестве уникального названия сервиса.
После создания объекта сервиса необходимо его запустить:
В случае возникновения ошибки сервис остановит все подсервисы с использованием
и вернет возникшую ошибку.
Укороченный интерфейс сервиса
В библиотеку включена реализация функционала отслеживания статуса остановки и завершения
на основе контекста. Данный функционал входит в реализацию
Данный сервис принимает на вход сервис с интерфейсом:
Для превращения его в полноценный сервис необходимо использовать функцию .
Она обернет такой сервис в стандартную реализацию, которая позволит отслеживать Liveness Probe
на основе статуса работы сервиса, а так же останавливать его при помощи встроенного контекста,
который будет переключаться на при завершении работы.
Данный функционал позволяет так же реализовывать правильную остановку, если ваш сервис не поддерживает остановку через контекст.
В качестве последнего аргумента можно передать таймаут ожидания завершения работы функции. Логика работы следующая: либо сервис завершает работу за это время, либо разблокируем остановку, чтоб не ожидать дольше положенного времени. По умолчанию данный интервал ожидания - 5 секунд.
Если передать в качестве интервала ожидания 0, то таймаут ожидания составит 1000 часов, что по сути эквивалентно ожиданию реальной остановки сервиса.
HTTP сервер
В библиотеку включена поставка стандартного HTTP сервера в виде обертки для Multi Service.
Данная обертка принимает на вход хост и порт для HTTP сервера, а так же роутер, который
необходимо использовать для сервера. Роутер должен реализовывать стандартный интерфейс
.
Данный сервис так же позволяет переопределять стандартные параметры сервера. Для этого необходимо передать переопределение в качестве последнего аргумента фабрики.
Реализация Liveness для Kubernetes
Для реализации данного функционала у каждого сервиса предусмотрено 2 метода:
Первый возвращает статус запуска сервера. Используется для
Второй возвращает статус: жив ли сервис. Используется для
По сути статусы всех сервисов суммируются и выдается итоговый результат как для ,
так и для , поэтому если хотябы один сервис умрет, то не пройдут и будет
вызвана остановка пода.
Для настройки Kubernetes необходимо при инициализации сервиса передать порт прослушивания liveness:
Если передано значение 0, то liveness не будет подключен. По умолчанию данный аргумент можно не передавать.
Для проверки используйте следующие url контейнера:
/ready - Readyness Probe
/alive - Liveness Probe