RightScaleの観点から見たサーバオーケストレーションとAWS SWFの発表との関係
SWFはRightScale内部でも数ヶ月の間既にバックエンドシステムのサービスの一つして利用しており、RightScaleの提供するマルチクラウド管理機能の開発の効率化に大きく寄与しています。
僕の観点では、自動化はクラウドコンピューティングの最も重要な機能コンポーネントだと考えてます。自動化は、企業に取ってビジネス面で重要な機能(Pay as you go(従量課金)、Scale On Demand(ダイナミックなスケーリング)、Resilency(問題に対する対応能力)、Predictability(障害検知、トラフィック検知)、等)を可能にするし、何よりもシステム全体の信頼性を上げる事に寄与します。クラウドコンピューティングの価値は、これらの自動化によるメリットをシステム全体に適用出来るインフラとして最適なのです。
RightScale社は、この自動化に関する開発投資に創業当初から力を入れてます。RightScaleの初期バージョンから自動スケーリング(Auto Scaling)の機能を通して、サーバの自動的なスタート/停止と共にCPU負荷等の監視機能を充実させていました。この自動化機能を経験すると直ぐにわかる事ですが、新しいサーバインスタンスをCPU負荷の増加に連携してスタートさせる事自体は至極簡単な事で、誰でも出来る事なのです。難しいのは、そのスタートさせたサーバインスタンスを既に動いているシステムにスムーズに統合する所です、仮想マシンの立ち上げに加えて、必要となるソフトウェアスタックをバージョン、設定情報を全て寸分違わず揃え、サーバプールへの追加のみならず、併設されているロードバランサやデータベースシステムとの接続もシステムを停止する事無く行う必要があります。RightScaleの機能の大部分は、これらの設定を速やかにプロダクションシステムに追加して安定稼働を保証する為の諸手続きを全て自動化する機能です。
RightScaleの将来バージョンは、このプラットホームの上に、Server Orchestrationの機能を追加開発し、提供します。Server Orchestrationは、RightScaleが管理する、サーバやデプロイメント等のリソースを自動的に管理出来るワークフロー言語を利用します。最初の機能セットは、次の3つのオートスケーリング機能をカスタマイズすることが出来る機能です。
1)自動的にスケールアップ/ダウンする台数と時間を指定する
2)新規のサーバを自動的に起動する
3)動いているサーバを停止する
RightScaleは、毎分ユーザが規定した判断ロジック(Unser-defined Decision Function)を確認し、サーバアレーをスケールアップ/ダウンすべきかを判断します。Decision Function機能は、単純に立ち上げ/停止すべきサーバの数を返し、RightScaleはそれに従ってサーバ管理を実行します。
さらに、Decision FunctionはAPIを通して監視データを収集し、他の機能も提供することが出来ます。例えば、アプリケーションの特定の状態を把握し、条件によってはサーバの立ち上げの予測も行う様なロジックを作る事も可能になります。
Decision Functionがサーバの増加を必要としたとき、RightScaleはスケールアップの為のワークフローを起動してサーバの立ち上げを条件に従って行います。サーバの数に加え、サーバを立ち上げる場所や条件を詳細に規定することが出来ます。スケールダウンも同様に詳細の設定に基づいて行う事が可能で、ログの取得、バックアップの確保、等を行ってからサーバを停止する様な処理も可能になります。
RightScaleのオーケストレーションの機能を開発するにあたり、2つの重要な要件についてよく議論しました。
1)Concurrency(並列処理)
複数のサーバに対して同時に処理を行える設計にしないと規定時間内に処理を完了する事が難しくなってきます。例えば複数のサーバを同時に平行処理で立ち上げる構造にしないと台数が多くなると時間がやたらとかかる処理になってしまいます。
2) Fault Tolerance(障害対策)
障害が発生した時に、システムの回復をする時にこそ、Orchestrationの機能が大きな効果を発揮します。障害発生時には、他のプラットホーム、若しくはクラウド上でで再起動を自動的に行うことが出来ます。障害回復先が同じ障害の影響を受けている場合、オーケストレーションの機能自体が障害の影響を受けていた場合は?上記のスケールアップ/ダウン機能の多重化も考慮する必要性が出てくる訳で、ワークフローの階層的な構築を行い、サブワークフローの障害を親のワークフローが引き継げる様な構造が必要になってきます。
この辺の並列処理と障害対策の機能をしっかりしたものにする為に、RightScaleのオーケストレーションシステムはオープンソースである、Routeと呼ばれるワークフロー管理言語を採用し、これをベースに開発する事にしました。Route言語は、タスクを並列的に動かす時に構造的な方法でその処理の運用を設定する事が可能になります。例えば、複数のワークフローを「並行に行い、全部が成功するまで待つ」構造にしたり、または「並行に行い、一つ成功したら他を全てキャンセルする」、等といった設定が出来ます。
Amazon Web ServicesのSWFはこのRouteワークフローを通して障害対策機能を強化した運用を実現することが出来ました。SWFをワークフロー処理を行うエンジンとして位置づけ、Routeを通して、AWSの提供する複数のAvailability Zone上のサーバに対するワークフローを並列に動かす事が出来る様にしました。SWFはスケジュールに則ったワークフローの実行を行い、結果を収集し、Routeに報告する事により、Routeが次のステップに移行し異なるワークフローの指示を出せる様な構造です。結果として、AWS環境上で起きうる様々な障害に対して、非常に可用性の強いオーケストレーションシステムが誕生する結果になりました。
SWFがオープンになった現在、順次このオーケストレーション機能をRightScaleを通して提供出来る様にする事を期待しています。早々にプライベートベータ版を提供すべく準備を進めている状況です。