動的アプリケーションとは、Webサイトの静的コンテンツに対して相対的な概念であり、c/c++、php、Java、perl、.netなどのサーバーサイド言語で開発されたネットワークアプリケーションソフトウェアを指します。例えば、フォーラム、ネットアルバム、SNS、ブログなどの一般的なアプリケーションです。動的アプリケーションシステムは通常、データベースシステム、キャッシュシステム、分散ストレージシステムなどと密接に関連しています。
大規模動的アプリケーションシステムプラットフォームは、主に大量アクセス・高同時実行のWebサイトのために構築される基盤システムアーキテクチャです。大規模Webサイトの運営には、信頼性が高く、安全で、拡張性があり、保守が容易なアプリケーションシステムプラットフォームを基盤として備え、Webアプリケーションの安定稼働を保証する必要があります。
大規模動的アプリケーションシステムは、さらにいくつかのサブシステムに分けることができます。
- 1)Webフロントエンドシステム
- 2)負荷分散システム
- 3)データベースクラスタシステム
- 4)キャッシュシステム
- 5)分散ストレージシステム
- 6)分散サーバー管理システム
- 7)コード配布システム
Webフロントエンドシステム
構成図:
異なるアプリケーションのサーバー共有、単一障害点の回避、集中管理、統一設定などの目的を達成するために、アプリケーションごとにサーバーを分割するのではなく、すべてのサーバーを統一のに使用します。各サーバーは複数のアプリケーションにサービスを提供でき、一部のアプリケーションへのアクセスが増加した場合、サーバーノードを追加することでサーバークラスタ全体のパフォーマンスを向上させ、同時に他のアプリケーションも恩恵を受けます。このWebフロントエンドシステムは、Apache/Lighttpd/Eginxなどの仮想ホストプラットフォームに基づいており、PHPプログラムの実行環境を提供します。サーバーは開発者にとって透過のであり、開発者がサーバー管理に関とする必要はありません。
負荷分散システム
負荷分散システムには、ハードウェアとソフトウェアの2種類があります。ハードウェア負荷分散は効率が高いですが、価格が高く、例えばF5などがあります。ソフトウェア負荷分散システムは価格が低いまたは無料であり、効率はハードウェア負荷分散システムより劣りますが、トラフィックが普通またはやや多いWebサイトにとっては十分に使用できます。例えば、lvs、nginxなどです。ほとんどのWebサイトはハードウェアとソフトウェアの負荷分散システムを併用しています。
データベースクラスタシステム
構成図:
Webフロントエンドが負荷分散クラスタ構造を採用してサービスの可用性と拡張性を向上させているため、データベースも高信頼性でなければなりません。サービスシステム全体の高信頼性を保証するために、高信頼性で大規模な並行処理を提供できるデータベース体系をどのように構築すればよいでしょうか?
上図に示すような方法を採用できます。
1) MySQLデータベースを使用します。Webアプリケーションのデータベースは読み取りが多く書き込みが少ないという特性を考慮し、主に読み取りデータベースを最適化し、専用の読み取りデータベースと書き込みデータベースを提供します。アプリケーション内で読み取り操作と書き込み操作がそれぞれ異なるデータベースにアクセスするように実装します。
2) MySQL Replicationメカニズムを使用して、マスターDB(書き込みDB)のデータをスレーブDB(読み取りDB)に迅速に複製します。1つのマスターDBは複数のスレーブDBに対応し、マスターデータはリアルタイムでスレーブDBに同期されます。
3) 書き込みデータベースは複数台あり、各台が複数のアプリケーションに共同で使用されることを提供できます。これにより、書き込みDBの性能ボトルネック問題と単一障害点問題を解決できます。
4) 読み取りデータベースは複数台あり、負荷分散装置によって負荷分散を実現し、読み取りデータベースの高性能、高信頼性、高拡張性を達成します。
5) データベースサーバーとアプリケーションサーバーを分離します。
6) スレーブデータベースにはBigIPを使用して負荷分散を行います。
キャッシュシステム
キャッシュには、ファイルキャッシュ、メモリキャッシュ、データベースキャッシュがあります。大規模Webアプリケーションで最も多く使用され、効率が最も高いのはメモリキャッシュです。最も一般的に使用されるメモリキャッシュツールはMemcachedです。適切なキャッシュシステムを使用すると、次の目標を達成できます。
1、キャッシュシステムを使用すると、アクセス効率が向上し、サーバーのスループット能力が向上し、ユーザーエクスペリエンスが改善されます。
2、データベースおよびストレージサーバーへのアクセス負荷を軽減します。
3、Memcachedサーバーが複数台あり、単一障害点を回避し、高信頼性と拡張性を提供し、パフォーマンスを向上させます。
分散ストレージシステム
構成図:
Webシステムプラットフォームにおけるストレージ要件には、次の2つの特徴があります。
1) ストレージ容量が非常に大きく、単一サーバーでは提供できない規模に達することがよくあります。例えば、アルバム、ビデオなどのアプリケーションです。そのため、専門的な大規模ストレージシステムが必要です。
2) 負荷分散クラスタ内の各ノードは、任意のデータオブジェクトにアクセスする可能性があります。また、各ノードによるデータ処理は他のノードと共有できます。そのため、これらのノードが操作するデータは、論理的に見ると全体として1つのものであり、それぞれ独立したデータリソースではありません。
したがって、高性能な分散ストレージシステムは、大規模Webサイトアプリケーションにとって非常に重要な要素です。(ここには、特定の分散ストレージシステムの簡単な紹介を追加する必要があります。)
分散サーバー管理システム
構成図:
Webサイトのアクセストラフィックが増え続けるにつれて、多くのネットワークサービスは負荷分散クラスタの形で外部にサービスを提供しています。クラスタ規模の拡大に伴い、従来の単一サーバーによる管理モデルでは要件を満たせなくなってきました。新しい要件は、サーバーに対して集中管理、グループ管理、一括管理、自動化管理を行い、スケジュールタスクを一括実行できることです。
分散サーバー管理システムのソフトウェアには、いくつかの優れたソフトウェアがあり、その中でも理想のなものの1つがCfengineです。Cfengineはサーバーをグループ化でき、グループごとにシステム設定ファイルやスケジュールタスクなどの設定を個別にカスタマイズできます。CfengineはC/S(クライアント/サーバー)構造に基づいており、すべてのサーバー設定と管理スクリプトプログラムはCfengine Serverに保存されます。管理対象サーバーはCfengine Clientプログラムを実行し、Cfengine ClientはSSL暗号化接続を介して定期的にサーバー側にリクエストを送信し、最新の設定ファイル、管理コマンド、スクリプトプログラム、パッチインストールなどのタスクを取得します。
Cfengineのような集中管理型サーバー管理ツールがあれば、大規模なサーバークラスタ管理を効率的に実現できます。管理対象サーバーとCfengine Serverはどこにでも配置でき、ネットワークが接続されていれば迅速かつ自動化された管理を実現できます。
コードリリースシステム
構成図:
Webサイトのアクセストラフィックが増え続けるにつれて、多くのネットワークサービスは負荷分散クラスタの形で外部にサービスを提供しています。クラスタ規模の拡大に伴い、クラスタ環境でのプログラムコードの一括配布と更新を満たすために、プログラムコードリリースシステムも必要です。
このリリースシステムは、以下の目標を達成するのに役立ちます。
本番環境のサーバーは仮想ホスト方式でサービスを提供します。開発者がメンテナンスや直接操作に関とする必要はありません。リリースシステムを提供することで、サーバーにログインすることなくプログラムを対象サーバーに配布できます。
2) 内部開発、内部テスト、本番環境テスト、本番環境リリースという4つの開発段階の管理を実現する必要があります。リリースシステムは各段階のコードリリースに対応できます。
3) ソースコード管理とバージョン管理を実現する必要があります。SVNはこの要件を実現できます。
ここでは一般的なツールであるRsyncを使用でき、対応するスクリプトツールを開発することでサーバークラスタ間のコード同期配布を実現します。
出典:http://blog.csdn.net/dinglang_2009/article/details/6863697