質問

1つのポート1000からの受信接続を受信するプロセスが1つあります リナックス サーバ。ただし、1 つのプロセスではすべての受信リクエストを処理できるほど高速ではありません。

サーバー内で複数のプロセスを実行したいのですが、エンドポイントは 1 つです。このようにして、クライアントには複数ではなく 1 つのエンドポイント/プロセスのみが表示されます。

LVS およびその他の負荷分散ソリューションを確認しました。これらのソリューションは、複数サーバーの負荷分散を目的としているようです。

私の場合に役立つ他の解決策はありますか?


私はアプリの複数のコピーを実行する必要がある nginx のようなものを探しています。

試してみます。

助けてくれてありがとう。

役に立ちましたか?

解決

次のような Web サーバーを使用することもできます。 nginx. 。同じアプリの複数のポートに対してアプリの負荷分散を行うことができ、一般的に Ruby on Rails アプリ (シングルスレッド) の負荷分散に使用されます。欠点は、この負荷分散を機能させるには、アプリの複数のコピー (各ポートで 1 つ) を実行する必要があることです。

他のヒント

質問は私には少し明確ではありませんが、あなたが探している答えは、単一のプロセスがネットワークからタスクを受け取り、実際に作業を実行するために(結果を結果を返す前に)「ワーカープロセス」をフォークすることであると思います。ユーザー)。

このようにして、実行中の作業は、さらなるリクエストの受け入れを妨げることはありません。

ご指摘のとおり、負荷分散という用語には複数のサーバーの意味が含まれています。探したいのは、Linux ネットワーク デーモンの作成方法に関する情報です。

確認したい 2 つの kes システム コールは次のとおりです。 フォークと実行.

サーバーを統合するだけでよいようです しねっと.

これは、事前定義されたポート (構成を通じて制御する) をリッスンし、プロセスをフォークしてそのポートでの実際の通信を処理するサーバーです。

マルチプロセッシングまたはマルチスレッドが必要です。サーバーの詳細については詳しくないので、正確に何をすべきかについてアドバイスすることはできません。Matt が提案した fork と exec は解決策になる可能性がありますが、実際には次のとおりです。どのような種類のプロトコル/サーバーについて話しているのでしょうか?

次のような複数のアプリケーションを実行することを考えています うん.

nginx は優れていますが、まったく新しい Web サーバーを使いたくない場合は、MOD プロキシ バランサーを備えた Apache 2.2 が同じ仕事をします。

おそらく、クライアントをラウンドロビンポート (たとえば) 1000-1009 に変更し、プロセスのコピーを 10 個実行できるでしょうか?

あるいは、内部的にリファクタリングする何らかの方法が必要です。

fork() を呼び出す前にソケットを開くことで、複数のプロセスが同時に同じソケットをリッスンすることができますが、(TCP ソケットの場合) accept() が呼び出されると、結果として得られるソケットは、接続を正常に受け入れたプロセスに属します。

したがって、基本的には次のように使用できます。

  • プリフォーク: ソケットをオープンし、指定された数の子をフォークして負荷を共有します。
  • フォーク後。すべての接続を受け入れ、子プロセスをフォークして個々のソケットを処理するマスター プロセスが 1 つあります。
  • スレッド - ファイル記述子は複製されず、どのスレッドでも利用できるだけなので、好きな方法でソケットを共有できます。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top