クラウドネイティブなアプリケーションの実装パターン
続いてのトピックは「クラウドネイティブなアプリ開発」。“足回り”となるクラウドネイティブなアーキテクチャの上に乗せるアプリケーションをどのように開発していくかについて西谷氏は解説を続けました。
このトピックにおいて西谷氏が挙げたのが「The 12 Factor App」。これはモダンなWebアプリケーション開発のための方法論をまとめたもので、西谷氏曰く「直接的にマイクロサービスと関連する話ではないですが、ぜひ一読しておくべき」ドキュメントとなっています(※こちらについては日本語訳も整備されているので、興味のある方はぜひ読んでみてください)。言及されている主なトピックは以下のとおりです。
- Codebase(コードベース)
- Dependencies(依存関係)
- Config(設定)
- Backing services(バックエンドサービス)
- Disposability(廃棄容易性)
- Dev/prod parity(開発/本番一致)
- Log(ログ)
- Admin process(管理プロセス)
西谷氏はこれらを踏まえ、「マイクロサービスであればこういうことを考えて実装した方が良いです」といった“アプリケーションの実装パターン”についてもいくつか例を挙げて説明しました。シンプルなものから複雑なものまでいくつかの典型的なパターンがあり、チームで許容できるやり方を取捨選択して決め、また、最初に選んだやり方を最後まで貫く必要はなく、柔軟に変更していくことが良い、と西谷氏はパターンの活用方法、向き合い方についてコメントしました。
- Graceful Degradation(ステータスコード:500のエラーは返さない、一部に障害があっても全体停止は引き起こさせない)
- Throttling(内部サービスによる偶発的なDoSへの対応)
- Fail Fast(エラーを検知したらなるべく早く返す)
- Static Fallback(エラー発生時には何らかの静的なコンテンツもしくは値を返す)
- Retry(エラー発生時は少し待った上でリトライする)
- Caching(サービス呼び出しに対するレスポンスのキャッシュ)
- Circuit Breaker(発生したエラー数を記録し、閾値を超えたらフォールバックプランを実行)
- Smooth Internal Traffic(キューの利用、スパイク的な負荷をハンドリング)
少数精鋭のチームで開発ライフサイクルを高速化
最後となる3つ目のテーマは「クラウドネイティブなデプロイ」について。DevOpsはソフトウェア開発のライフサイクルであり、デリバリーパイプラインを作り、顧客からのフィードバックを得るというライフサイクルを回していき、効率的にスピードアップさせる、というのがポイントです。
Amazonでは、アイデアを早く形にしてフィードバックに対応していくために、大規模な構成ではなく、少数精鋭のチームで物事を行うことでより機動的にプロジェクトを進められると考えられています。この考えをAmazon社では「Two Pizza Rule」と呼んでいます。意味としては、“2枚のピザで賄える人数が、チームとしてちょうど良い数である”とのことです。AWSの場合、このチームのことを“サービスチーム”と呼んでおり、各AWSサービスの開発から運用・サポートに至るまでの一連の流れすべてをこのサービスチーム単位で行っています。マイクロサービスな開発サイクルの場合、コンポーネントごとにデリバリーパイプラインが用意されていて、実行・リリースがされています。
そんなDevOpsを支援するAWSのサービスも現在用意されています。
CodePipelineは、Amazonと同様の継続的デリバリとリリースの自動化を実現。Amazonの内部ツールとして利用されていたものをサービスに昇華させたCodeDeployは、簡単で信頼性の高いデプロイを実現しています。CodeCommitは、一般的なGitのツールをAWS上で利用可能としたものになっています。
最後に西谷氏は「今回お話したトピックはそれぞれで1つのセッションができる位の奥深いものです。興味を持ったものがあればぜひ深掘りしてみてください」と総括し、セッションの発表を締めました。