1

1 つのLinuxサーバーでポート 1000 から着信接続を受信するプロセスが 1 つあります。ただし、1 つのプロセスでは、すべての着信要求を処理するには十分な速度ではありません。

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

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

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


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

試してみましょう。

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

4

7 に答える 7

2

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

そのようにして、実行中の作業がさらなる要求の受け入れをブロックすることはありません。

ご指摘のとおり、ロード バランシングという用語には、複数のサーバーの意味があります。探したいのは、Linux ネットワーク デーモンの作成方法に関する情報です。

注目したい 2 つの kes システム コールは、fork と execと呼ばれます。

于 2008-09-05T05:28:09.313 に答える
2

サーバーをxinetdと統合するだけでよいようです。

これは、定義済みのポート (config で制御する) をリッスンし、そのポートでの実際の通信を処理するためにプロセスをフォークするサーバーです。

于 2008-09-05T06:54:36.657 に答える
2

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

于 2008-09-05T07:13:01.993 に答える
1

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

于 2008-09-05T16:28:13.217 に答える
0

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

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

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

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

  • ソケットを開くプリフォークは、指定された数の子をフォークし、子は負荷を共有します
  • ポストフォーク。すべての接続を受け入れ、子をフォークして個々のソケットを処理する1つのマスタープロセスがあります。
  • スレッド-ファイル記述子は複製されないため、どのスレッドでも使用できるため、ソケットを好きなように共有できます。
于 2008-09-21T10:25:30.340 に答える
0

ypopsに似た複数のアプリケーションを実行することを考えています。

于 2008-09-07T06:23:48.113 に答える
0

nginxは素晴らしいですが、まったく新しいWebサーバーが気に入らない場合は、modプロキシバランサーを備えたapache2.2でも同じことができます。

于 2008-09-07T07:20:34.517 に答える