0

最近、Unicorn として知られる Ruby 用の Web サーバーに出くわしました。これには、シンプルでありながら素晴らしいアイデアがありました。

Unicorn マスターが起動すると、アプリがメモリに読み込まれます。リクエストを処理する準備が整うとすぐに、16 個のワーカーをフォークします。次に、これらのワーカーはソケットで select() を実行し、処理可能なリクエストのみを処理します。このようにして、カーネルが負荷分散を処理します。

これと並行して、それぞれ -Xmx384MB を使用してローカル Tomcat クラスターをセットアップし、それぞれ個別に「共有ソケットで select() を使用して、処理可能な要求のみを処理する」ようにします。

これを実現するために、Tomcat のソース コードまたはスクリプトを微調整する方法を考えています。

Foreman を使用して、同時に 3 つの Tomcat アプリ サーバーを同時に実行できるとしたら、あらゆる可能性を考えてみてください。

4

1 に答える 1

1

Tomcat はすでにそれを行っています。N 個のワーカー スレッドを開始し (N を構成できます)、各要求をそれぞれの Web アプリに転送します。100 人のユーザーが同じ Web アプリにアクセスしようとすると、要求は N 個のスレッド間で共有され、それぞれがアプリのコードを実行します。

編集Einhorn は Java EE に準拠していないため、多くの手抜きを行うことができます。Tomcat で同様のことを行うには、複数の Tomcat プロセス (それぞれに独自のソケットが必要) と、負荷を分散するフロントのロード バランサー プロキシ/http サーバーを開始する必要があります。

アプリケーションは、データベース レベルでもこの​​ように設計する必要があります (つまり、同じテーブルに書き込む複数のプロセスを処理できる必要があります)。

于 2013-03-05T15:39:35.863 に答える