動的アプリケーションとは、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