Как лучше запустить серьезный GO веб-сервис в продакшен?

Я собираюсь запустить web-сервис, который реализует RESTfull API В будущем необходима возможность расширения при росте нагрузки. Платформа Linux Debian или Ubuntu.

Интересует каким способом лучше организовать работу программы на Go?

Предложенные варианты:

1. Запуск сервиса с демонизацией с помощью встроенного systemd.
2. Использование нескольких библиотек для нативной демонизаци Go-приложения.
3. Использование Nginx и запуск go приложения в обертке fcgi.

Все три совета найдены при изучении ответов на Toster. Хотелось бы услышать мнение людей с реальным опытом запуска нагруженных сервисов.
  • Вопрос задан
  • 1334 просмотра
Пригласить эксперта
Ответы на вопрос 6
sim3x
@sim3x
1+
2+- использовать, если нужно перепиливать systemd под какие-то свои нужды
3- использовать древний протокол - моветон
Ответ написан
Комментировать
@cy-ernado
Systemd работает хорошо.
Если нужен задаток для огромного расширения - то можно взять Kubernetes, но обязательно изучите необходимость этого.

Docker-контейнеры можно запускать через systemd в том числе.

Fcgi не использовать точно. Если нужна огромная производительность http, то посмотрите на https://github.com/valyala/fasthttp
Если работаете с json - то https://github.com/mailru/easyjson
Go http сервер не сильно нуждается в nginx перед ним, кстати.
Ответ написан
Комментировать
@mantyr
Пишу много Golang кода с удовольствием:)
supervisord и если его функций для внешнего мониторинга и управления в будущем не зватит - собственный supervisor написанный на Golang под собственные требования.

Надо учитывать что supervisord это python программа, но со своей задачей справляется на ура и подходит для запуска чего угодно.
Ответ написан
Комментировать
Демонизировать лучше внешними средствами. systemd или docker, например.
Ответ написан
Комментировать
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
fcgi - медленно. systemd прекрасно перезапустит сервис при падении. Если вы захотите перезапуск сервиса по живому, без потери клиентских соединений, например для update/upgrade то понадобится нативное решение, systemd такое не умеет.
Ответ написан
Комментировать
@KkJ
Consul+go-micro
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы