クラウド時代のソフトウエア開発
開発者の期待
世の中に出回っているクラウド関連製品のほとんどは、ソフトウエア開発者から見れば不完全です。ソフトウエア開発プロセスの短期化という目的に対して、部分的には貢献できるものの、開発担当者がインフラ関連のタスクから完全に解放され、ソフトウエア開発だけに全神経を注げるかというと、改善の余地がまだまだあります。
例えば、テスト環境の複製や本番環境への移行の際に、手作業で1つ1つ確認しながら各種の設定をする必要があります。こうした作業は、手間がかかるだけでなく、ミスを誘発します。
例として、1つのアプリケーション・システムを想定してみます。高可用性が求められており、スケール・アウトやスケール・アップなどが必要な、アクセス数が非常に多いアプリケーションです。このシステムのデプロイメントを実施してみます(図4)。
まず、仮想サーバーに障害が発生した場合に、何らかの手法で自動修復する機能が必要です。例えば、アプリケーション・サーバーは、リクエストに対して、絶えず応えられなければなりません。また、データベース・サーバーには、冗長化されたデータ保全環境が求められます。
このような設定作業は、熟練したインフラ管理者でさえ、簡単なものではありません。開発者やテスト担当者からすると、こうした設定作業は、本来であれば自分が解決すべきものではありません。しかし、対応を求められることが多いのが実情です。
図4: 高可用性を必要とする一般的なWebアプリケーションの環境構成 |
アプリケーション・サーバーの冗長化(自動修復)
クラウド環境下では、アプリケーション・サーバーの冗長化は、マウス操作だけで実現できます。あらかじめインフラ技術者が初期設定を施しておく必要があるものの、その設定を利用することで、開発者やテスト担当者であっても、容易にインフラを構築できるようになります。
アプリケーション・サーバーを冗長化しておけば、クラウド管理ソフトが障害検知から復旧までを、自動的に実施できるようになります。
具体的には、アプリケーション・サーバーに何らかの障害が発生した場合、監視システムが障害を検知し、クラウド管理システムに通知します。クラウド管理システムは、仮想サーバーをプロビジョニングし、新たにアプリケーション・サーバーを起動し、アプリケーションをデプロイメント(配備)します。
もちろん、アプリケーション・サーバーのほかに、ロード・バランサ(負荷分散装置)、DNSサーバー、監視システムなどの設定も、並行して実施しておく必要があります。
図5: クラウド管理ソフトによるアプリケーション・サーバーの障害復旧 |
データベース・サーバーの冗長化(自動修復)
データベース・サーバーの自動修復も可能です。クラウド管理システムがプライマリ・データベースの障害を検知し、スタンバイ・データベースをプライマリ・データベースへと自動的に昇格させます。同時に、新規に仮想サーバーを立ち上げ、新規のスタンバイ・データベースをプロビジョニングします。
図6: クラウド管理ソフトによるデータベース・サーバーの障害復旧 |
バイナリのインストールやパッケージのアップデート、サーバーに関する各種設定などは、自動化することが望ましいです。自動化によってミスが減り、効率が上がるからです。そもそも、有能な人材は、こうしたインフラに関するタスクに時間を削ぐべきではありません。本来の仕事であるアプリケーション構築に集中すべきなのです。