2013-07-14 19 views
6

分散環境でスリフトサービスを探すために、Zookeeperの上にサービスディスカバリレイヤーを構築しました。私は今、実稼働環境でこれらのサービスを実行する最善の方法を探しています。リスニングサービスを展開して提供する

現在、Tomcatにデプロイされた戦争をパッケージ化しています。サーブレットのインスタンス化中に、Spring ApplicationContextが作成され、Tomcatの内部にTThreadPoolServerが作成されます。

私は理由のカップルのためにこれを好きではない:

  • それはTomcatは一種の無用になり、それはそれはTomcatのスレッドプールとすべてを回避簡単に導入
  • を容易にするために、ハックのように感じていますこれを処理するための最善の戦略を見つけようとする過程で要求

を配布するための最良の方法を考え出すに入ったロジックで、私は選択肢のカップルが出ている:

をスタンドアロンのJARとして
  • 起動リサイクルサービス(私はこれが好きではない、私は今のアプリのコンテナの開発者は、このように利用して、HTTP経由で
  • ホスト倹約を行う作業に多くの時間を費やしているというロジックを改革する必要が主な理由( - マイナーとはいえ - この約1あやふやに起因して、これが発生しますパフォーマンスヒット)サービス要求のためのTomcatのスレッドプールとロジック

これらのサービスをホストするためのアプリケーション・コンテナの異なるタイプを使用してください誰もが持っています以前に分散型サーバーのホスティングをどのように処理したかについての提案。私はTomcatの内部でHTTPを使うだけでいいのですか?

+1

この質問は、トピックの話ではありません。既存のサーバーの展開シナリオではなく、プログラミングに関する新しく開発されたサービスのアーキテクチャに関するものです。 – Wildfire

答えて

6

私はThriftサーバーのホストとしてTomcatを使用しようとしましたが、追加の値を持たないことがわかりました。このシナリオでは、サーブレットコンテナのすべての機能(要求ルーティングなど)は不要です。一方、Tomcatでは、複雑さや部品の移動が増えています(PermGenの問題を解決するのが難しい)。

HTTPを使用すると、特にクライアント接続が多い負荷の高いシナリオでは、パフォーマンスが著しく低下します。

私は、スーパバイザデーモン(http://supervisord.org/)の下で実行されているスタンドアロンのスリフトサービスで終わった。分散配置の管理が非常に便利です。 Thrift APIをHTTP(JSクライアントなど)に公開する必要がある場合は、Vert.xで実装されたシンプロンプトプロキシを使用します(http://vertx.io/)。

+0

jarファイルに依存関係をパッケージ化していますか?実際の展開をどのように扱いますか?今は非常に便利なWARをアップロードするためにTomcat Web APIを使用しています –

+0

@ColinMorelli:単一のjarファイルに依存関係をパッケージ化しません。代わりに、アプリケーションjarと複数の依存関係からなるディストリを作成します。 rsyncを使用してディストリビューションをサーバーに展開するファブリックスクリプトを使用します。これは、〜500MBのアプリケーションジャーを配備するときに、20ホストでまれに変化するライブラリー〜50MBを使って時間を節約します。 WARデプロイメントは小規模なデプロイメントには便利ですが、大きなデプロイメントには適用できません。 – Wildfire

+0

偉大な、私に良い音。現時点では、私の依存リストは比較的小さいです。おそらく、パッケージ化されたJARを構築して、それが大きくなりすぎるまで事を単純化することになります。それ以外は、私はSupervisordと一緒に走り続けます。ありがとう! –

関連する問題