2

マルチスレッドで 6 億件のレコードを処理する必要があり、各リクエストに 5 ~ 6 秒かかります。ブート アプリケーションでは 1000 のスレッドを作成する必要がありますが、Tomcat は 200 しかサポートしていません。続行する最良の方法は何ですか?

4

4 に答える 4

3

Tomcat が/apache-tomcat/conf/server.xmlで作成するスレッドの数を完全に制御できます。

<connector connectiontimeout="20000"
           maxthreads="1000"
           port="8080"
           protocol="HTTP/1.1"
           redirectport="8443" />

これは、スレッドの OS 制限まで行うことができます。Macで2000です。

しかし、1000 スレッドを作成してもあまり役に立たないと思います。大まかに言えば、マシンにあるコアと同じ数の同時スレッドしか実行できません。

したがって、4 コアのマシンでは、6 億件のレコードを処理するのに約 24 年かかります。32 コアを使用すると、年数を 1 桁に減らすことができます。

どうしましょう?ワークフローを非常に多くのマシンで並列化する Apache Beam のようなものを検討します。https://cloud.google.com/dataflow/をご覧ください。1000 台の 4 コア マシンを要求するタスクを作成できます。グーグルはあなたのためにそれらをスピンアップして解体します。この作業には約 9 日間かかります。封筒の裏計算によると、回答を得るには約 8,640 ドルかかります。

于 2019-12-20T15:34:12.473 に答える
1

効率を維持したい場合は、マシンに 1000 個の CPU がない限り、1000 個のスレッドを使用したくないでしょう。タスクが CPU バウンドの場合、ワーカー スレッドの数は CPU 数に近くなければなりません。そうしないと、 CPU Schedulingでサイクルが浪費されます。

あなたの質問には技術的な詳細が欠けているので、閉じることをお勧めします。あなたの問題の基本を説明する新しいものを書いてください:

  • 依頼はどのように受けていますか?HTTP経由?LANまたはWAN?リクエストデータが外部データベースから生成されるなどの理由で、別のものに変更できますか。
  • リクエストをどのように処理していますか? CPUバウンド計算ですか、それともデータを充実させるために他のシステムにファンアウト要求を行っていますか?
  • 処理結果をどのように保存していますか?
  • 障害をどのように処理する予定ですか? 1 つのリクエスト処理が失敗した場合、6 億回のリクエストを繰り返す予定ですか?
于 2019-12-20T16:06:33.810 に答える