書籍「AWSで実現するモダンアプリケーション入門」を読んだ
本記事について
僭越ながら、「AWSで実現するモダンアプリケーション入門 〜サーバーレス、コンテナ、マイクロサービスで何ができるのか」を読んだ書評をまとめさせていただきました。
総評
めちゃよかったです!!!
本書を読む前のイメージは、AWS のトレンドを追いそれらを使ってモダンなアプリケーションをつくる手法について解説された本なのかな〜という先入観があったのですが、良い意味で期待を裏切られました。本書におけるモダンアプリケーションとは 「常に変化を受け入れ続ける開発戦略」 と定義づけしており、単なる最近の AWS サービスの技術を用いたハウツー本などではなく、 迅速なイノベーションが求められる状況でその要求に柔軟に対応するための手法の1つとしてのモダンアプリケーションをどう実現するか という考え方に重きを置いた本という風に解釈しました(その上で AWS だとどうするか、を解説した本かなと)。各章ごとにモダンアプリケーションを実現するための構成要素や重要な抽象概念について取り上げ、それをさらに AWS で実現するならどういったアーキテクチャでやると良いか、という流れで解説されていました。加えて架空の企業の運用事例をシナリオとして例示し、それに沿った形で進行していくのもイメージがつきやすかったです。普段 AWS を利用している方はもちろん、AWS を利用しない方にもモダンアプリケーションを実現するための技術選定やアーキテクチャに関する普遍的な考え方を身につける一助になる本なのではないでしょうか。
各章のサマリ
1章 モダンアプリケーションとは何か
モダンアプリケーションとは何かといった説明をはじめ、モダンアプリケーションを利用する背景、メリット、ベストプラクティスについて焦点を当てて書かれていました。イノベーションフライヤーホールと MVP(Minimum Viable Product:実用最小限の製品)を背景に、その要件を満たすためにモダンアプリケーションを使うことにどのようなメリットがあるか、またそれをどういったプラクティスに基づけばよいかといった内容でした。
2章 サンプルアプリケーションの紹介
3章以降で題材となる、本書の中のみに登場する架空の企業の事例に関するシナリオが描かれていました。ここでは電子書籍サービスを提供する Sample Book Store という企業をもとに、どういったアーキテクチャでサービスが運用されているのかなどについて仮定されていました。また、その上で発生する課題(ユーザー体験、システム、組織)についても定義されていました。
3章 アプリケーション開発におけるベストプラクティスを適用
アプリケーション開発の大枠として重要になるベストプラクティスが紹介されていました。Twelve-Factor App と Beyond the Twelve-Factor App のプラクティスをもとにそれらを噛み砕いて、本書のシナリオにどう適用させていくかといった内容です。
4章 データの取得による状況の可視化
モニタリングやオブザーバビリティについての考え方や実践方法などが書かれていました。必要となるデータ(ビジネスデータ、運用データ、システムデータ)を3種類の観点から捉え、それらの収集・運用方法についてのプラクティスが書かれていました。ビジネスデータであれば、必要となるデータを目的ごとに可視化するのではなく、1ヶ所に集めた上で加工・分析をする。システムデータはリクエスト駆動とリクエスト駆動ではないサービスを区別し、適切なメトリクスを収集すると良い(RED Method、USE Method)。といった内容などです。
5章 サーバーレスやコンテナテクノロジーによる運用改善
サーバーレスとコンテナ技術を用いた運用改善について書かれていました。サーバーレスであることがモダンアプリケーションの条件ではないが、モダンアプリケーションを実現する上で重要な武器になるといったスタンスで解説されているようでした。サーバー管理が不要になることや柔軟なスケーリング・可用性の高さ、コスト面での優位性(従量課金等)の魅力について説かれていました。さらにサーバーレスを使ったワークロードの実装を行うにあたって、下記の点などが丁寧に解説されていました。
- 大規模リクエストの対応
- アプリケーションエラーハンドリング
- 冪等性の考慮
- モニタリング
- 実装の拡張性
6章 CI/CDパイプラインによるデリバリーの自動化
CI/CD を導入する上で重要となる考え方や実践方法について書かれていました。パイプライン・ファーストという考えのもと、筆者は開発の初期段階でのパイプラインの構築を推奨する旨とその理由などについて主張されていました。ソースステージ、ビルドステージ、デプロイステージといった構成要素についても取り上げ、用途によって、各ステージでどういったサービスを選定すればよいのかなどが解説されていました。
7章 要件にあったデータベースの選択
データベースの選定について書かれていました。Purpose-built Database の考えに基づき、求める機能と要件に見合ったデータベースを選択することの重要性について解説されていました。ユースケースによってRDBMS や NoSQL などのどのデータベースを選択するのかやどういった際にインメモリデータベースを利用するのがよいかといった選定に関する考え方についてなどです。DynamoDB を用いた NoSQL のテーブル設計についても簡単に触れられていました。
8章 モダンアプリケーションパターンの適用によるアーキテクチャの最適化
8章ではその他のモダンアプリケーションパターンが数多く紹介されていました。
詳細には解説しませんが、取り扱われていたトピックと要約を以下に記載しておきます。
- シングルページアプリケーション(SPA:Single Page Application)
- 必要箇所のみの描画でユーザーの体験の向上
- API Gateway:API呼び出しの複雑性を集約する
- API Gateway/BFF パターンを用いた通信コストの削減
- メッセージング:サービス間の非同期コラボレーションの促進
- キュー/パブサブモデルによる同期処理の改善
- Saga によるマイクロサービスにおけるデータ整合性の維持
- 補償トランザクションによる分割サービス間での処理失敗時のハンドリング
- CQRS:データの登録と参照の分離
- 異なるアクセスパターンの要件に見合ったデータベース利用の実現
- イベントソーシング:イベントの永続化
- 履歴データとしてイベントをイミュータブルに保存し永続化
- サーキットブレーカー:障害発生時のサービスの安全な切り離し
- 意図しない高負荷やリソースの消費を即座に検知して遮断
- サービスディスカバリ:サービスを見つける
- 固有のインスタンスを意識せずにサービス間の通信を高可用に行う
- サービスメッシュ:大規模サービス間通信の管理
- マイクロサービスにおけるの各種サービスの通信制御課題の解消
- フィーチャーフラグ:新機能の積極的なローンチ
- フィーチャーフラグを用いたコード反映によりコンフリクトやコードの修正量過多によるボトルネックを解消
- 分散トレーシング:サービスを横断するリクエストの追跡
- サービスを横断したデータの追跡による状況把握の可視化
おわりに
アジリティを高め、変化に対応していくためのインフラアーキテクチャを設計・構築する上で重要となる考え方が身に付くとても良い本でした。現場でも活かしていければいいなと思っています。
Discussion