BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース レジリエントなサーバレスシステムの設計と構築 - QCon Londonでの John Chapin氏の講演より

レジリエントなサーバレスシステムの設計と構築 - QCon Londonでの John Chapin氏の講演より

原文(投稿日:2019/03/12)へのリンク

QCon London 2019で行ったプレゼンテーションで,John Chapinは,サーブレステクノロジの基本と,レジリエントなサーバレスシステムの設計と構築を行う方法について解説した。さらに氏は,世界規模で分散された高可用性アプリケーションを構築し,AWS上の複数リージョンで運用する,というデモも披露した。

Symphoniaの創業者のひとりであるChapin氏は,例としてAWSを使用しているが,説明の内容は他のクラウドベンダにも適用可能である,としている。サーバレスに関する説明では,最初にファンクション・アズ・ア・サービス(FaaS) — ビジネスロジックを実行するサービス — と,バックエンド・アズ・ア・サービス(BaaS) — アプリケーションが使用するデータベースやメッセージングシステムなど — を取り上げて,詳細については自身のフリーブックを参照した。サーブレスの重要な特徴は次のようなものだ。

  • ホストやプロセスの管理が不要
  • 自動スケーリングとプロビジョニング
  • 正確な使用量に基づくコスト,最低ならば0
  • 暗黙的な高可用性

これらの特徴は,クラウドによって得られるメリット以外に,いくつかのメリットを実現する。

  • 総所有コスト(TCO)の低減
  • スケーリングの柔軟性
  • リードタイムの短縮

しかしながら,クラウドへの道を踏み出すということは同時に,自前のハードウェアを使用していた時に比べると,一部のコントロールを諦めるということでもある。

  • 構成上の選択肢が制限される。
  • 最適化の機会が少なくなる。
  • 問題解決の放棄。システムがダウンしても,我々にできることは何もない。プロバイダが問題を解決するのを待つしかないのだ。

レジリエンスに関してChapin氏は,AWSのCTOであるWerner Vogels氏のブログ記事での指摘を引用している。

障害は必然であり,時間が経てばどんなものにでも発生します ...

Chapin氏はこの意味を,我々が今日開発しているシステムはあまりに大きく複雑であるため,障害は統計的に不可避なのだ,と捉えている。システムはほぼ常に,どこか一部が故障しているものであるから,我々はそれに対処しなければならない。Vogel氏はブログ記事で,障害を受け入れるように,とも述べている。氏の記事ではそれを,クラウドサービスを運用するベンダの面から論じているが,Chapin氏は,サーブレス開発者である我々も同じ概念を考慮する必要がある,と述べている。例えば,

  • システム障害は発生する。その数は,規模が大きいほど多くなる。
  • 障害を当然のこととして受け入れよ。
  • 分離メカニズムを使って障害の影響範囲を限定せよ。
  • 運用を継続せよ。
  • 迅速かつ自動的にリカバリせよ。

サーバレスの範疇においては,ベンダの管理するサービスの使用は必然である。その場合は2つのクラスの問題が存在する,とChapin氏は言う。ひとつはアプリケーションの障害である。これはあなたの問題であり,あなたが解決しなければならない。ふたつめは,基本的にそれ以外のすべての障害である。これもあなたの問題だが,あなたが解決することはできない。ベンダに関わる障害を軽減するために,Chapin氏が勧めるのは,レジデンスを備えたアーキテクチャやシステムを構築し,それをもって障害に備えることだ。ベンダの提供するツールも活用する必要がある。

  • AWSリージョンのような分離メカニズム
  • Route 53のように,リージョンをまたいで動作するように設計されたサービス
  • Chapin氏が強く推奨する"Reliability Pillar"のような,推奨アーキテクチャプラクティス

AWSでは,分離メカニズムとしてリージョンとアベイラビリティゾーンが使用されている。リージョンには最低2つの相互に隣接するアベイラビリティゾーンが含まれており,同じ国内にあることが保証されている。アベイラビリティゾーンはリージョン内の分離したデータセンタで,独立した建物にあって,独立した電源とネットワーク接続を備えており,何らかの理由でオフラインになっても,他のアベイラビリティゾーンに影響しないように設計されている。この動作に関する詳細な情報を得る上でChapin氏が推奨するのは,AWSのアーキテクトであるJames Hamilton氏のプレゼンテーションである。その中で氏は,Amazonグローバルネットワークの概要について説明している。

AWSにおけるサーバレスのレジリエンスは,リージョンと世界全体の高可用性を基本としている。すなわちサービスは複数のリージョンにまたがって,それぞれのリージョン内の複数のアベイラビリティゾーンで実行される。リージョンの高可用性は自動的なものだが,世界規模の高可用性を実現するには,アプリケーションをそのように設計する必要がある。その他のサーバレスアプリケーションの特徴は,次のようなものだ。

  • 基本的にイベント駆動であり,信頼性の高い外部ストレージに状態を格納する。したがって障害が発生した場合,処理中のデータはほとんど,あるいはまったく存在しない。
  • 継続的デプロイメント。つまり,再生の必要な永続的インフラストラクチャは存在せず,高い移植性が期待できる。

エンドツーエンドのデモで氏は,基本的にはチャットアプリケーションとして動作する,世界規模で分散された高可用性APIを構築する。データをレプリケーションすることで,複数のリージョンにデプロイすることが可能になる。これによってリージョンのダウン時もアプリケーションは持続可能で,すべてのデータが引き続き利用できる。デモではリージョンのダウンをシミュレーションする(アプリケーションからエラーを返すようにする)ことで,これを実際に示して見せている。

プレゼンテーション用のサンプルコードとスライドがChapin氏によって公開されている。カンファレンスの主要なプレゼンテーションは録画されており、今後数ヶ月にわたってInfoQで公開される予定である。次回のQConカンファレンスであるQCon.aiは、AIとマシンラーニングに重点を置くもので、2019年4月15~17日にサンフランシスコで開催される。QCon London 2020は、2020年3月2~6日に開催が予定されている。

この記事に星をつける

おすすめ度
スタイル

BT