2016-12-29 18 views
1

Vertxで新しいVerticalsを作成する必要がある場合、誰も私にベストプラクティスを教えてください。私は各垂直を遠隔で配備してクラスタに入れることができることを知っています。しかし、私はまだ私のアプリケーションを設計する方法についての質問があります。さて、私の質問は次のとおりです:Vertxで新しいVerticalsを作成するためのベストプラクティス

  1. 多くの縦型を持つのは大丈夫ですか?
  2. 例:HttpServerを作成します。ここでは、サービスのエンドポイントが多数あります。有効な機能(サービス)に応じて異なるサブルートを作って設定したいと思います。そのうちのいくつかは長期的なプロセスを開始し、イベントバスを使用してシステム内に新しいイベントを生成します。ここで最善のアプローチは何ですか?たとえば、

、私は、引数として、各エンドポイントにVERTXを渡すとルータを作成するために使用することができます:

getVertx().createHttpServer() .requestHandler(router::accept) .listen(Config.GetEVotePort(), startedEvent -> {..}); ... router.mountSubRouter("/api",HttpEndpoint.createHttpRoutes( getVertx(), in.getType()));

または私は垂直などのサービスの代わりに、通過のためにそれぞれの新しいエンドポイントを作成することができますVertx。私の質問は主に、引数としてvertxを渡すのが大丈夫ですか、それを行う必要があるときに新しいVerticalを実装する必要がありますか?

答えて

1

私の10セント:

  1. はい、ポイントは、私はそれを理解して名前が単語「粒子」から来ていると全体的なアイデアは、UNIXの一種であるので、verticles何千ものがあり得ることですJVMに賭ける哲学。だから、1つのことをするために各パーティクル/頂点を書いて、それをうまく行います。これはユニバーサルインターフェイスなので、テキストストリームを使用してパーティクル間の通信を行います。

あなたの質問に対する答えは、あなたのサーバーの数です。サーバごとに起動するJVMの数はいくつですか?各JVMが使用するメモリはどれくらいですか? JVMごとにメモリ制限内で実行できるverticleはいくつですか?あなたのメッセージのサイズはどれくらいですか?ネットワークの帯域幅制限は何ですか?あなたのシステムを通過するメッセージの数はいくつですか?そして、イベントバスはこのトラフィックを処理できますか?

  1. 次に、基本的にイベントバスであるVerticleがどのように連携するかについて説明します。私が望むと思うのは、HttpServerがさまざまな「トピック」(さまざまなテキストストリーム)を聞くように異なる頂点が設定されているイベントバスにメッセージをルーティングすることです。 1つのverticleが長期プロセスを開始すると、それはバス上のイベントによってトリガーされ、出力を次のverticle/response verticleのトピックに戻します。

これは、使用しているサーバー数/ JVM数、クラスタ化されたイベントバスの有無によって異なります。

だから、1つのノードは複数のエンドポイントを提供する必要があります。たとえば、ルータを使用してHttpServerからRouteへのリクエストを照合し、Routeがハンドラを選択し、ハンドラが特定のVerticleにあります。

0

多くの頂点を持つことをお勧めします。そうすることで、アプリケーションは疎結合になり、ロードバランシングが容易になります。たとえば、負荷が高い場合は、1〜3の経路指定頂点が必要ですが、多くの作業者の頂点が必要です。そして、その方法では、ルーティング頂点の数を変更することなく、ワーカーの数だけを増やすことができます。

引数としてvertxを渡すことはお勧めしません。代わりに@rupwebが既に提案されているので、代わりにEventBusを使用してください。ルーティングの頂点間のメッセージをワーカーに渡して戻します。それはあなたが探しているベストプラクティスです: http://vertx.io/docs/vertx-core/java/#event_bus

関連する問題