1

私は現在、Java Web アプリケーションを開発しており、単一の Web サーバーを最大限に活用するために、さまざまな種類のテクノロジを組み合わせる方法を研究しています。

これまでの私の計画は、次のアーキテクチャをセットアップすることです

Internet ->
Varnish (reverse proxy) ->
Apache2 (mod_pagespeed, mod_jk) -> 
Ehcache-web (caching html page fragments,spring-cache) ->
Tomcat (java appsrv) ->
Ehcache (cache layer) -> 
MySQL (persistance layer)

このデザインに問題はありますか?それに関して言えば、スケーリングとクラスタリングはどうですか? 他の(より良い)解決策はありますか?

ありがとう!

4

2 に答える 2

2

私は従来の方法で Web アプリケーションを思い描くのではなく、サービス プロバイダーとコンシューマーの観点から考えています。職場では、Tomcat の下で実行される RESTful API レイヤーがあり、Shindig インターフェースを実装することによって構築されています。このレイヤーは、MySQL および MongoDB とやり取りします。Memcached を使用したニア/ファー キャッシングがあります。これは、リストおよびセット ベースの操作を多く使用するため、Redis に移行する予定です。このレイヤーは、特定の API (ステータス更新のプッシュなど) のために Twitter および Facebook ともやり取りします。すべてのエンドポイントは、OpenSocial 準拠の REST/XML 呼び出しとしてアクセスできます。NewRelic を使用して、サービスのパフォーマンスと SLA を監視します。現在、10 ミリ秒の応答時間で 30K RPM を少し上回っています。4 つの Tomcat、3 つの memcached、3 つの MySQL (1M 2S)、および 3 つの MongoDB (レプリカセット) のクラスターがあります。すべてのスタックは、XenServer によってホストされる仮想マシン上で実行されます。Centosを実行しています。VM スレッドをブロックしないように、通知の送信やサード パーティ (Twitter/Facebook) との通信などのメッセージング/非同期操作に RabbitMQ を使用します。プラットフォームの人気が高まるにつれ、近い将来、HornetQ+Scala アクターに移行する予定です。検索は Solr で実行されますが、ElasticSearch に積極的に移行しています。

複数のクライアント プラットフォームに対応できるように、この API/サービス ベースのモデルでシステムを設計しました。そのため、モバイル アプリが起動すると、モバイル用に同じスタックの別のセットを用意する代わりに、API を再利用できます。このアーキテクチャは、フロントエンドに結合せずにバックエンド サービスを抽象化します。私たちが持っているフロント エンドは PHP/Zend で構築されており、JQuery を広範囲に使用しています。HTML5、Phonegap、Sencha touch を使用してモバイル フロントエンドを構築しています。

セキュリティのためにオープンな GET がありますが、書き込みは 2-legged oauth によって保護されています。API を外部の消費者とアプリ開発者に公開したら、3-legged oauth を提供する必要があります。

このまとめがお役に立てば幸いです。さらに情報が必要な場合や質問がある場合は、遠慮なくコメントしてください。

于 2011-05-11T18:17:14.640 に答える
1

高トラフィック ポータル (約 5,500 万 PI/月) に 3 つの Varnish プロキシ、3 つの Apache (2) ロード バランサー、6 台のサーバー pro サーバー、mod_jk を介して Apache と通信する 4 台の tomcat を使用しています。RDBMS として、Oracle があります。DBの選択は重要だと思います。コンテンツは私たちの存在です。そのため、応答性、堅牢性、スケーラビリティ、信頼性、高可用性などを備えた DB 製品が必要です。最悪の場合、サポートが必要になる可能性があります。そのため、私たちはオラクルを選びました。

Tomcat / アプリケーション サーバーの選択は、アプリケーション アーキテクチャによって異なります。私たちの場合、Coremedia CMS (CORBA を介して通信するコンテンツ サーバー、マスター ライブ サーバー、フィーダーなどの分散サービスを含む Spring ベースの CMS) があり、クラスター化された Tomcat で十分です。

あなたのリスト/セットアップとこの組み合わせは、ほとんどの場合、非常にうまく機能しているように思えます。

于 2011-05-11T08:51:00.697 に答える