2011-02-09 10 views
1

最近このインタビューでこの質問をしました。それはWebサーバー設計に関する自由な質問でした。ここには質問の要点があります。ウェブサーバーのパフォーマンスを向上させる

"Webサーバのようなアプリケーションではキューが頻繁にボトルネックになりますが、ボトルネックを改善するためにスレッド処理クラス、スレッドプール、キューにどのような変更を加えますか?

のような対策を指摘しました。1.スレッドプール管理 2.キューにバッファとパケットを使用する。

しかし、面接官はかなり満足していませんでした。私が言及すべきすべての設計措置は何ですか?明らかにオープンエンドの質問なので、答えはSpring、J2EEなどの基盤技術に依存する必要はありません。

サーバーの設計に関する良いチュートリアルがある場合は、それを共有してください。

答えて

1

私はこれを掲示抵抗することはできません。

http://www.engineerguy.com/videos/video-lines.htm

キューの主な問題は、それブロックキューダウンより深いウェイターということです。したがって、設計は非常に高速でなければならず、待ち行列がいっぱいになることはありません。また、待ち行列の埋込みが考慮される必要があります。参照してくださいbufferbloatジム・ゲティーズに関する最近のものが掲載されている:現代のルータにおけるIPパケットのバッファリングが真剣に間違ってTCPにつながる(と、それは同様にウェブサーバ内の待ち行列理論上非常に間接的な効果を持っている

http://gettys.wordpress.com/category/bufferbloat/

を)。

+0

Bufferbloatは本当に有益でした。 – Neo

+0

私もそうだと思うので、私はいつも戦争のドラムを演奏しています。 –

0

キューを処理するために高度なWebサーバーで使用されるSocket-Wheelというデザインパターンがあります。

+0

リンクを投稿できますか? Googleでソケットホイールのデザインパターンを検索すると、任意の結果が得られます。 – Neo

+0

ここはリンクです - http://www.javaspecialists.eu/archive/Issue023.html –

1

ランダム答え:

  1. は、実際には、ランダムにコードの変更を行う前に、ボトルネックを識別するために、システム全体のパフォーマンスを測定します。 FTW!

  2. IO完了ポート(Windows)、 "epoll"、または "kevent"(Linux)を使用します。

  3. 異なる優先度のキューを持つことを検討してください。応答時間が速いことがわかっているクエリの場合は、それらを1つのキューに入れます。より長くより高価な応答(例えば、長いデータベーストランザクション)を必要とする照会の場合、これらの要求を別のキューに入れる。高速クエリでキューを優先することを検討してください。 (考えてみましょう:食料品店では、12個以下のアイテムのチェックアウトを明示してください)。

0

待ち時間を減らすために、キューとスレッドの数を増やしていました。 (常にキューごとに1つのスレッドがあります)

関連する問題