7

私は大量のトランザクション Web サイトを扱った経験がほとんどなく、最近この興味深い質問に出くわしました。高負荷 (毎秒数千リクエスト) で Java Web アプリケーションのボトルネックが発生する場所を知りたいと思っています。誰かが次の質問について考えるための高レベルのアプローチを私に与えることができれば、それは素晴らしいことです!

私が思いついた唯一のことは、memcached を使用してデータベース ルックアップをキャッシュすることですが、各リクエストにかかる時間を計算する方法と、システムが 1 秒あたりに処理できるリクエスト数を計算する方法がわかりません。扱う。

質問: インターネット規模のアプリケーションは、大量のトランザクションを処理できるように設計する必要があります。1 秒あたり平均 30,000 の HTTP 要求を処理する必要があるシステムの設計について説明してください。要求ごとに、システムは URL クエリ文字列を介して渡されたキーワードを使用して、5,000 万語の辞書を検索する必要があります。各応答は、単語の定義を含む文字列 (100 バイト以下) で構成されます。

システムの主要なコンポーネントについて説明し、どのコンポーネントをカスタム ビルドする必要があるか、およびどのコンポーネントがサードパーティのアプリケーションを利用できるかを書き留めます。各コンポーネントのハードウェア見積もりを含めます。設計には、最小のハードウェア/ソフトウェア ライセンス コストで最大のパフォーマンスを含める必要があることに注意してください。

見積もりの​​根拠を文書化します。

定義がそれぞれ 10 キロバイトの場合、設計がどのように変化するかを説明してください。

4

2 に答える 2

2

背景として、スペックマークなどのベンチマークに注意してください。シナリオと比較すると、かなり多くの処理が行われますが、30,000 リクエスト/秒は比較的高い数値ですが、非常に高い数値ではないことがわかります。

Joines et alも役に立つかもしれません。(免責事項: 彼らは同僚です。)

あなたのシナリオでは、コストの降順で期待します:

  1. データベース検索
  2. ネットワーク アクティビティの読み取りと要求を返す
  3. 簡単な処理

複雑な処理を行っていない (例: グラフィック レンダリングやロケット サイエンス タイプの数学)。最初の推測: ディクショナリがデータベースである場合、クエリを実行するコストが他のすべてを支配することになります。従来、Web/アプリケーション サーバー層でボトルネックが発生した場合は、インスタンスを追加してスケーリングしますが、データベースがボトルネックである場合は、より大きな問題になります。1 つの方向: データベース エンジンにどのようなパフォーマンスを期待できますか?

あなたの最初の観察: キャッシュのものは、一般的に使用される戦略です。ここでは、(おそらく)辞書全体でランダムなヒットがあるため、最近の回答をキャッシュすること自体はおそらく役に立たないでしょう...すべてをキャッシュできますか?

50,000,000 * (100 + オーバーヘッド) == ??

64 ビット OS 上の 64 ビット JVM では、おそらく適合しますか?

そうでない場合 (そして、データが非常に大きくなるため、おそらくそうではない場合) は、スケーリングする必要があります。したがって、キャッシュをスライスする戦略を使用できます。(たとえば) 4 つのサーバーがあり、それぞれ AF、GM、NP、TZ にサービスを提供します (さらに、4 つの個別のキャッシュまたは 4 つの個別のデータベースに注意してください)。ディスパッチャにリクエストを指示してもらいます。

于 2010-06-20T11:03:28.270 に答える
2

私が最初にすることは、数字に疑問を抱くことです。英語には約 170,000 の一般的な単語があります。他のすべての一般的な言語を追加しても、数百万を超えることはありません。そうでない場合は、最も一般的な単語を高速キャッシュにキャッシュし、あまり一般的でない単語を低速キャッシュにキャッシュすることができます。1 秒あたり 30K のリクエストでも、すべてのユニークな単語を取得するのに約 30 分かかります。

基本的に、数値が実数でなければ、大規模なシステムを設計しても意味がありません。

64 ビット JVM では、これは簡単に適合します。5,000 万 * (100 + オーバーヘッド) は約 10 GB です (キーを取得してデータのインデックスを作成する必要があるため、オーバーヘッドは高くなります)。12 GB サーバーの価格は約 2,500 ドルです。

問題は、リクエストの数のようなものです。複数のマシンが必要になりますが、他のポスターが示唆しているように、その数が現実のものである可能性は非常に低いです。このサービスが facebook ほど高価になるとは思いませんが、これだけ多くのリクエストをサポートするには、数十から数百のサーバーが必要になるでしょう。

于 2010-06-20T16:56:01.593 に答える