2. システム設計の考え方

ミッションクリティカルな業務システムを設計する上での考え方について説明します。

 
2.1. システムの可用性について

今日のミッションクリティカルな業務システムは、計画、非計画に関わらずシステム全体の停止が許されず、24 時間365 日のサービス提供が求められるます。このような可用性に対する厳しい要求に対しては障害など予期せぬ事象による影響を最小限としシステム全体が停止すること(非計画停止)を防ぐこと、およびあらかじめ計画して行うパッチ適用やサーバ増強などを行うためにシステム停止(計画停止)を行う場合の、システムへの影響を最小化することが必要です。

 
2.2. システムの拡張について

システムの処理能力の拡張を行うための手法については以下に説明する「スケールアップ」、「スケールアウト」の考え方があります。システムの特性に応じて適切な拡張を行う必要があります。

一般的にスケールアウトによる拡張が有効となるのは、全く同様なアプリケーションが複数のサーバで同時に動作し負荷分散が行える場合です。さらにサーバ間の連携が必要ない場合は、n台構成にすることにより1台の場合のほぼn倍の性能を実現することが可能となります。ただし、複数サーバ構成とした時、処理を依頼するクライアントがアクセスするサーバを意識することは好ましくありません。よって、単一のサーバもしくは装置が全クライアントからのリクエストを受け、複数のサーバに処理を振り分ける仕組みが必要となります。データベースサーバのように全く同様なアプリケーションが複数のサーバで同時に実行できない場合などはスケールアップで拡張を行います。

システムを拡張する場合の要件としては以下の要件が挙げられます。システム設計時にこれらの要件が満たされるかどうか検証を行う必要があります。

 
2.3. 負荷分散機構

スケールアウトによりシステム拡張ができる場合、負荷分散を行うための装置やソフトウェアを利用する構成が一般的になっています。

負荷分散機構

負荷分散機構を用いた代表的な構成は図のようになっています。処理を割り振るルールにはいくつかの方式がありますが、ここではもっとも単純なラウンドロビン方式の例をあげます。クライアントは負荷分散機構に処理をリクエストします。負荷分散機構は、最初のリクエストはサーバA にその次はサーバB に、その次はサーバC にというように、順番にリクエストを割り振ります。これによりクライアントから個別のサーバを隠蔽し、仮想的な巨大なサーバを実現することが可能となります。ただし、負荷分散機構の割り振り先のサーバは同一の処理を行う必要があります。またサーバ間で排他が必要な処理はオーバーヘッドにより負荷分散を用いた処理の処理能力に制限を設けますので、できるだけ避ける必要があります。

次に負荷分散の実現方式について以下に挙げます。

また、負荷分散機構を検討する上で重要なポイントとしては障害時の縮退機能と負荷分散のポリシーです。次に負荷分散のポリシーについて説明します。

負荷分散機構を提供する装置やソフトウェアによって選択できる負荷分散方式やポリシーが異なりますので各製品でどのような負荷分散ができるのか考慮する必要があります。WebOTXのアプリケーションサーバはラウンドロビン、重み付けラウンドロビンの負荷分散を提供しています。

 
2.4. クラスタ構成

サーバが障害発生時においてもシステムを継続して運用させるためには、サーバを複数台にで構成(クラスタ構成)し、障害のあったサーバの業務を他のサーバで引き継がせる必要があります。クラスタ構成においては次の仕組みが必要となっています。障害を検出する仕組みと、障害発生後、どのようにして業務運用を続行させるかを考慮する必要があります。

 
2.4.1. フェイルオーバ型クラスタ

フェイルオーバを利用したクラスタ構成で、クラスタソフトウェアと連携させることにより実現できます。フェイルオーバ型クラスタでは、ハートビートを利用したサーバ間の相互監視によるサーバマシン自体の障害検出、強制サーバ停止によるシステムの切り替え、グループ管理による、アプリケーションごとのフェイルオーバの3 つの機能により高可用を実現しており、従来から高度な可用性が要求されるシステムで一般的に採用される構成です。

クラスタソフトウェアについて

クラスタソフトウェアと連携したフェイルオーバ型クラスタ構成の一般的な特徴について説明します。詳しくは個々のクラスタソフトウェアの機能を確認してください。

 
2.4.2. 負荷分散型クラスタ

同一処理を行う複数台のマシンの前に負荷分散機構を置く構成です。拡張性を確保するには、できるだけ複数サーバ間の連携をなくす必要があります。負荷分散型クラスタ構成では、高可用で拡張性の高い業務システムが効率的に実現できます。処理要求はフロントの負荷分散機構に対して行われ、負荷分散機構は管理するノードにその処理を割り振ります。障害時には、負荷分散機構が障害が発生したノードを検知し、処理の割り振り先から外します。つまりノードの縮退により可用性を確保しています。この時の障害検知方法は負荷分散機構の機能に依存します。