Как развернуть веб — приложение без остановки и перезапуска

# #go #downtime #rolling-updates

Вопрос:

Я создал проект в двоичном файле и развернул его на сервере раньше. и начнем с этого nohup . Но если я обновлю свой код и перестрою свою программу. Сначала я должен убить процесс, затем обновить файл и начать снова.

Моя проблема в том, что:

  1. Приложение должно быть отключено по крайней мере через несколько секунд.
  2. Я должен обновить файл вручную (войдите на сервер, завершите процесс, замените файл, а затем запустите его).

Есть ли в любом случае возможность горячего обновления программы, что-то вроде PHP? Мне просто нужно обновить свой код на сервере с помощью git (или svn или другим способом). затем сервер перестроит приложение и аккуратно перезапустит его.

Комментарии:

1. Нет. Go-это скомпилированный язык, в отличие от PHP. Вы должны решить эту проблему с нулевым временем простоя на уровне развертывания (например, с помощью Docker/Kubernetes), а не на уровне языка.

2. Если вы размещаете на Linux, вы можете выполнять изящные развертывания с нулевым временем простоя с помощью SO_REUSEPORT . Одна библиотека, которая хорошо это скрывает, является бесшовной .

Ответ №1:

Обычно вы запускаете более одного экземпляра своего веб-приложения за обратным прокси-сервером, например nginx, или любым другим балансировщиком нагрузки. Если несколько секунд простоя являются проблемой для вас, то вам все равно нужно настроить HA. И в такой настройке вы можете выполнить последовательное обновление, в котором вы заменяете экземпляры один за другим.
быстрый поиск в Интернете позволит вам найти инструкции по развертыванию, например: https://www.digitalocean.com/community/tutorials/how-to-deploy-a-go-web-application-using-nginx-on-ubuntu-18-04