私は従来の方法で 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 を提供する必要があります。
このまとめがお役に立てば幸いです。さらに情報が必要な場合や質問がある場合は、遠慮なくコメントしてください。