# #go #downtime #rolling-updates
Вопрос:
Я создал проект в двоичном файле и развернул его на сервере раньше. и начнем с этого nohup
. Но если я обновлю свой код и перестрою свою программу. Сначала я должен убить процесс, затем обновить файл и начать снова.
Моя проблема в том, что:
- Приложение должно быть отключено по крайней мере через несколько секунд.
- Я должен обновить файл вручную (войдите на сервер, завершите процесс, замените файл, а затем запустите его).
Есть ли в любом случае возможность горячего обновления программы, что-то вроде 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