2017-01-28 13 views
0

goサーバーをシャットダウンして再起動する必要がなくても、それを展開する方法があるのか​​不思議でした。私は、ASP.NetやPHPなどの一般的なソリューションが、ユーザーセッションでこれをシームレスに実行することを知っています。シームレスパッチ再起動せずにGoサーバーを展開する

ステートレスセッションはこの問題を処理しますか?

+0

あなたが探しているものかもしれませんが、まだ安定しておらず、afaikでのみ動作します:https://appliedgo.net/plugins/ – hermancain

+1

[this](https:// github .com/facebookgo/grace)は役に立ちますか? – tkausl

+0

@hermancain、プラグインはアンロードできないので、どのようにすれば十分か分かりません。 – JimB

答えて

1

nginxまたはhaproxyのような要求ルータを導入することで、最も単純なアプリケーションサーバーでも、このようなシームレスな展開を実現できます。これらのルータの両方を使用すると、要求を異なるサービス(リバースプロキシと呼ばれます)に転送し、接続を破棄せずに設定をリロードすることができます。一例として:

  • 0.0.0.0.80に耳を傾け、127.0.0.1:5001にこれらの要求を転送するようにルータを設定します。
  • 127.0.0.1:5001でアプリケーションサーバーv1を実行します。
  • この設定では、ユーザがルータに要求を行うと、そのルータはアプリケーションv1サーバに転送されます。
  • アプリケーションの新しいバージョンv2をデプロイするときは、ポート127.0.0.1:5002でリッスンするようにアプリケーションを構成します。
  • ルータ設定を変更して、トラフィックを127.0.0.1:5002に転送するように変更します。ルータに設定をリロードするように指示します。
  • ユーザがルータに新しいリクエストを行うと、アプリケーションはあなたのアプリケーションv2サーバに転送されます。
  • v1がトラフィックの受信を停止すると、安全にv1をシャットダウンできます。 v2に問題がある場合は、ルーターの設定を元に戻してv1に戻すことができます。したがって、v1をバックグラウンドで実行することは利点があります。

これは単純化されたハイレベルの概要です。 (たとえば、ループバックインターフェイス上でUNIXソケットを使用することをお勧めします)。この種の展開は、通常、カナリアまたはblue-green deploymentと呼ばれます。

関連する問題