パフォーマンス上の理由から、アプリの複数のインスタンスを実行し、CPU に固定し、異なるポートでリッスンする必要があります。HAProxy TCP ロード バランサーはトラフィックを分散するためにそれらの前に配置されます。
これは、スレッド コンテキストの切り替えを防止し、何も共有しない設計を強制するために行われます (したがって、アプリケーションがシングル スレッドであると仮定すると、アプリケーション内であらゆる種類のロックは必要ありません)。
つまり、64 個の CPU を搭載したサーバーでは、HAProxy が CPU 0 に固定され、アプリの 63 個のインスタンスがそれぞれ別の CPU (1 ~ 63) に固定されている可能性があります。
明らかに、起動、再起動、シャットダウンなどの点で管理するのは非常に複雑です.
systemd を使用してこの複雑さを処理する方法があるかどうか疑問に思っていました。
HAProxy をユニットとして定義し、通信する必要がある他のアプリが必要であると述べた場合、起動の問題を解決できることを知っています。
Require=app1,app2,.....,app63
私はそれをできた
systemctl start myhaproxy
そして、最初に必要な 63 個のインスタンスを開始します (アプリのインストール時にそれぞれが個別の systemd ユニットとして定義されていると仮定します)。
ただし、とにかくこれを再起動とシャットダウンでも機能させることができるかどうか疑問に思っています。
だから私がするなら:
systemctl stop myhaproxy
対話するアプリの 63 個のインスタンスすべてを自動的にシャットダウンしたいと思います。
もしそうなら
systemctl restart myhaproxy
次に、最後に再起動する前に、最初に Require にリストされているすべてのサービスを再起動したいと思います。
それは可能ですか?それとも、systemd が提供できる範囲を超えていますか?