では、パブリッククラウドサービス(IaaS)は企業では使い物にならないのでしょうか。当然そんなことはありません。現時点でも多くの企業でIaaSは活用されており、必要なSLAは充足されています。
では、それら企業はIaaS上でどうやって必要な可用性を満たしているのでしょう。それが正しくクラウドを導入するための勘所のひとつです。必要な可用性をクラウドの世界で満たすには、“アプリケーション”がそれを担う必要があります。その意味で、クラウドの世界では、「企業は可用性を実現するアプリケーションに投資する」と言われています。
Azureでは、仮想マシンの可用性を高め、SLAを提供するため、“可用性セット(Available Set)”という機能を提供しています。これは2台以上の仮想マシンを1セットとして、障害ドメイン(電源モジュールやネットワークを同一とする管理単位)や保守ドメイン(パッチ適応やアップグレードなどを一斉に実施する管理単位)を“必ず”またがせ仮想マシンを配置する機能です。これによりAzureでは99.95%のSLAを提供できています。
ただし、この可用性セットの恩恵を受けるためにはアプリケーションがロードバランスできるような仕組みになっていなくてはいけません。
2016年12月にAzureのSLAが更新され、単一仮想マシンでも99.95%のSLAが提供可能になりました。ただし、これもAzure Service Healingにより仮想マシンが自動で再起動されることを前提としたものであり、仮想マシンが再起動した場合でもアプリケーションがサービスを継続できるようになっていなければ、システムとしての高可用性は実現されません。
このような前提条件から、クラウドで動作させることを前提にするアプリケーションの実装の勘所は、「アプリケーションをステートレス(システムが現状を示すデータを保持しないまま、入力内容によって出力が決定する状態)にする」必要があるということです。
ロードバランスを実施する場合でも、再起動後アプリケーションサービスを継続する場合でも重要となるのが“ステートレス”のアプリケーション実装です。
アプリケーションがステートを持っていなければ、どの仮想マシンでそのアプリケーションの処理が実施されても問題は発生せず、容易にロードバランスすることができます。また、再起動後のサービス継続も問題はありません。また、Azureやその他の代表的なパブリッククラウドサービスでは今までのエンタープライズシステムで一般的に使われていたマルチパスストレージが標準機能では使用できません。つまり、オンプレミス環境では当たり前だった高可用性用の冗長化構成(High Availability)システムを構築することができないのです。
この点からもステートレスなアプリケーションの作りにして、ロードバランスや自動再起動が可能なシステムを構築することが求められます。また、クラウドの特徴を生かすため、スケールアウト型のシステムという観点でもステートレスアプリケーションは重要です。