Как строить и деплоить Go-приложения?

Привет!
Встал на путь изучения Go, придумал амбициозный проект для этого и столкнулся с тем. что меня мучают несколько вопросов, без знания которых не очень-то и начинается:

1. В проекте должны быть как веб-сервер, так и задачи, запускаемые по расписанию. При этом, конечно, используется общий код, например ORM-объекты. Это нормально будет сделать для консольных тасков отдельное приложение с рутингом (или даже 100500 приложений для каждой задачи)?

2. Зная, что весь проект будет собран на Go, остается ли смысл в менеджерах очередей и не проще ли запускать соответствующие задачи в горутинах?

3. Как правильно деплоить приложение с веб-сервером, чтобы пользователь не заметил переключения версий?
Мне пока видится правильным запускать каждую новую версию на своем порту и переключать поток пользователей nginx-ом на соответствующий порт. Это нормально, так делают? Сам сервер запускать в screen?

Благодарю за ответы!
  • Вопрос задан
  • 528 просмотров
Решения вопроса 1
Tyranron
@Tyranron
1. Нормально будет как внутри единого процесса крутить (с помощью какого-то robfig/cron, к примеру), так и отдельными процессами (cron-задачами, или даже демонами). Здесь всё зависит от конкретной ситуации и того что Вам нужно. У каждого подхода свои очевидные трейд-офф'ы. Просто выбираете то, что Вам больше подходит. На кодовую базу это мало влияет, ибо всегда можно переиспользовать пакеты, да и вообще можно держать всё в едином бинарнике, просто прокинув разные CLI-интерфейсы.

2. Горутины не могут быть пошарены между несколькими серверами. Если Ваши амбиции влезут в один сервер, то на внешние очереди можно не грузиться.

3. Если речь идёт строго об одном процессе, который нельзя размножить, то смотрите в сторону graceful updates/restarts. Если же Вы можете множить приложение (в конце-концов живём в век победившых Docker/Kubernetes), то есть более общие техники, подходящие абсолютно для любого приложения: blue/green deployment либо rolling update (в том же Kubernetes из-коробки).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
VladimirAndreev
@VladimirAndreev
php web dev
Я бы не стал использовать внутренние очереди.
Внешние очереди не потеряют данные при краше приложения.
Ответ написан
Комментировать
Indermove
@Indermove
C#/.NET back-end разработчик
По поводу строительства не знаю, но вот по поводу деплоя немного подскажу, вдруг полезно будет. Вот статья на Хабре: https://m.habr.com/ru/post/421087/
В своё время замучился искать, как это правильно делается.
Ответ написан
Ваш ответ на вопрос

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

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