システムに自律運用能力を持たせるNoOps
ゼンアーキテクツの岡氏は、2013年に日経SYSTEMSの特集「これが日本のトップアーキテクト」にて、トップアーキテクト18人の一人として選出された。Azureベースの案件も数多く手掛けており、「さまざまなプロジェクトですばらしい設計をしている」と、Azureテクノロジースペシャリストとしてクラウドベースシステムのアーキテクチャーや実装支援活動をしている川崎氏も一目置く人物だ。
セッションはまずOpsの10年戦争を振り返ることから始まった。今も続いているOpsの10年戦争の発端となったのが、2008年の「DevOps革命」である。DevOpsはインフラのソフトウェア化により、構成変更の自動化を促進するといったもの。つまり開発~運用のライフサイクルを高速に回せるようになった。2年前にGoogleが提唱したSRE(Site Reliability Engineering:信頼性エンジニアリング)はまさにDevOpsの実装例というべきもの。「詳しくは書籍を読んでほしい」と岡氏。
とはいえ「DevOpsやSREで障害がなくなるわけではない。アプリケーションのバグやアプリのVRのメモリリーク、ミドルウェアの不具合、ネットワーク障害などの部分をなんとかしないと、運用を担当する開発者が開発を行う時間が減る。そこで運用のための設計といった発想が必要になる」と岡氏は説明を続ける。これまでもシステム設計時に運用は考慮されてきていた。クラウド上で稼働するシステムの設計原則としてDesign for Failureがある。すべてが故障する前提で設計し、障害からの復旧を計画している。そしてこの発展系がNoOpsというわけだ。
NoOpsはシステムに自律運用能力を持たせることで、人間による運用を最小化すること。そのためには、次の3つの能力が必要になる。「Self Healing(故障発生時のサービス無影響+自己修復の能力)」「In-Flight Renewing(変更・更新に対する無停止メンテナンスの能力)」「Adaptive Scale(負荷変動に弾力的に適応する自律的リソース調整の能力)」だ。
NoOpsで何が得られるのか。エンドユーザーにとってはサービス停止時間が最小化され、レスポンスタイムの安定、コストも最適化される。運用担当者は、「運用業務がなくなることはないが、障害対応作業の非同期化が実現するため、障害の原因特定や再発防止策の策定業務などに、ゆっくり後から取り組めるようになる」と岡氏はそのメリットを説明する。しかもシステムは自動で回復しているので、空いた時間で開発ができる。
NoOpsはDevOpsの発展系と説明したとおり、Design for FailureとDesign for Resiliency(回復性設計)を組み合わせて実現できるという。回復性設計では障害は起きるものとして捉え、ダウンタイムやデータ損失を回避すべく障害に対応することを目指す。最大の目的は障害発生時にもアプリケーションが完全に機能している状態を維持することだ。
「中でも一番、回復性があるとうれしいのがミドルウェアだろう。だが自分たちのプロジェクトに自前で回復性を持たせるのは難しい。だからこそ、プラットフォームとして回復性がネイティブに実装されているマネージドサービスの利用をお勧めする」と岡氏は説明する。マネージドサービスでも単純ホスティングではなく、クラウドネイティブで回復性を実装しているServerlessを選ぶことが重要だという。