問題タブ [vertx-eventbus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
microservices - 複数のバーティクルを作成する必要があるのはいつですか (ステートレス マイクロサービスでノンブロッキング db クライアントを使用していると仮定します)?
仮定
- いくつかの単純な API エンドポイント (たとえば、リードスルー キャッシュ、データベースへのエントリの保存) を公開するステートレス マイクロ サービスを構築しています。
- mysqlやredisなどのノンブロッキング データベース クライアントを使用しています。
- マイクロサービスが HTTP 経由で相互に通信することを常に望んでいます (EC2 インスタンスをロードバランサーの背後に配置することにより)
質問
- 複数の標準バーチクルを使用する必要があるのはいつですか (つまり、マイクロサービス全体を 1 つのバーチクルとして記述し、その n インスタンスをデプロイします (n = イベントループ スレッドの数))。より多くのバーティクルを追加すると、シリアライゼーションとコンテキスト切り替えのコストが増えるだけではないでしょうか?
- マイクロサービスを複数の標準バーチクルに分割したとしましょう (何らかの理由で)。それぞれの n (n = イベントループ スレッドの数) インスタンスを展開しても、異なる比率のインスタンスを展開するよりも常に優れたパフォーマンスが得られるわけではありません。各バーティクルはアドレスの単なるリスナーであり、すべてのイベント ループ スレッドがあらゆる種類のメッセージを処理でき、それらは既に負荷分散されていることを意味します。
- アプリケーションをクラスター モードで実行するのはいつですか? ドキュメントに基づいて、クラスター モードは複数のバーティクルがある場合にのみ意味があると感じています。また、クラスター化の実際のユースケースがある場合にも意味があると感じています。たとえば、異なる EC2 インスタンスが異なるユーザーのリクエストを処理してデータの局所性を支援します発火)
PS、上記の質問のいずれかに答えられる場合でも、助けてください。
microservices - 単一のマイクロサービスでの vertx multi verticle の使用例は何ですか?
アプリケーションが頂点に組み込まれているほとんどの Web では、1 つのマイクロサービスで人々が 2 つの頂点を作成するのを見てきました。
- 1 つは、HTTP リクエストを処理するためのレストバーティクルです。
- もう 1 つは、dao verticle を使用してデータベースと通信することです。
API リクエストがあるたびに、HTTP バーティクルはイベント バスを介して dao バーティクルと通信します。
しかし、頂点がシングル スレッドであることを考えると、ここで 2 つの異なる頂点を作成する利点は何でしょうか。イベント バスを介した通信の不要なオーバーヘッドが発生しますが、レストと I/O の両方を処理するバーティクルを 1 つしか作成できません。
呼び出しをブロックする場合に別のワーカー バーチクルを使用するケースは理解できます。しかし、非ブロッキングの場合、i/o 呼び出しのユースケースは何ですか?