クラウドネイティブで実現する マイクロサービス開発・運用 実践ガイド
書籍情報
発売日 : 2023年09月25日
著者/編集 : 正野 勇嗣/山田 真也/宇都宮 雅彦/横井 一輝/岡本 隆史
出版社 : 技術評論社
発行形態 : 単行本
ページ数 : 456p
書籍説明
内容紹介
マイクロサービスはその実装の複雑さから、アーキテクチャを変えるだけでなく、組織構成の見直しやCI/CDによるオートメーション、複雑なシステムをどう可視化するかなどが、その成功に不可欠であることが分かってきました。近年では、クラウドネイティブ/Kubernetesの適用により、マイクロサービス固有のフレームワークに依存することなく、より簡潔にマイクロサービスを実装できるようになり、再び注目されています。本書では、特定のマイクロサービスフレームワークに過度に依存することなく、Kubernetes上でマイクロサービスを設計・実装・運用するためのノウハウを解説します。
目次
>> 概要編
■第1章 マイクロサービス概論
1.1 本書について
1.1.1 本書に込めた思い
1.1.2 マイクロサービスの捉え方
1.1.3 本書の価値
1.1.4 本書の構成
1.2 マイクロサービスの概要
1.2.1 マイクロサービスとは
1.2.2 マイクロサービスの起源と歴史
1.2.3 なぜマイクロサービスが必要なのか
1.2.4 マイクロサービスに対する誤解
1.2.5 マイクロサービス化を可能とする技術
1.3 マイクロサービス化を成功に導くプラクティス
1.3.1 アジャイルとマイクロサービスの親和性
1.3.2 マイクロサービス時代のアーキテクチャ
1.3.3 マイクロサービスをどの単位で分ければ良いか
1.3.4 組織とケーパビリティ
1.3.5 見える化する技術の重要性と多様化
>> 実践編
■第2章 マイクロサービスの実装
2.1 サンプルアプリケーションの概要と開発環境構築
2.1.1 本書で実装するマイクロサービスの全体像
2.1.2 マイクロサービス開発環境の構築
2.2 アプリケーションの実装
2.2.1 リクエスト/レスポンス型通信によるマイクロサービスの実装
2.2.2 BFFによるバックエンドサービスの統合
2.2.3 シングルページアプリケーションの実装
2.2.4 マイクロサービスのデプロイ
2.2.5 イベント駆動型通信によるマイクロサービスの実装
■第3章 サンプルアプリケーションへの非機能の実装
3.1 書籍オンラインショップ「Book Shop」の動作確認
3.1.1 本節で解説する内容
3.1.2 「Book Shop」の動作確認
3.1.3 「Book Shop」の機能紹介
3.2 サービスのモニタリングと可用性の向上
3.2.1 ヘルスチェックとProbeによるモニタリング
3.2.2 グレースフルシャットダウンによる安全なサービスの停止
3.3 サービスメッシュによるサービス連携
3.3.1 横断的関心事を扱うサービスメッシュ
3.3.2 バックエンドサービス間のトラフィック管理
3.3.3 バックエンドサービス間の通信セキュリティ
3.4 ユーザの認証・認可
3.4.1 ユーザの認証・認可とOpenID Connect
3.4.2 Keycloakを使った認証・認可の実装
■第4章 マイクロサービスにおけるデータ管理
4.1 サービス間のデータ整合性の維持
4.1.1 SAGAによるトランザクション管理
4.1.2 TCCによるトランザクション管理
4.1.3 イベントソーシングによるデータ永続化
4.2 マイクロサービスでのクエリ操作
4.2.1 APIコンポジションを使ったクエリ
4.2.2 CQRSを使ったクエリ
■第5章 マイクロサービスのテスト
5.1 ユニットテスト
5.1.1 マイクロサービス開発におけるユニットテストのポイント
5.1.2 Go言語を用いたテストコードの例
5.1.3 ユニットテストと静的解析
5.2 インテグレーションテスト
5.2.1 APIテスト
5.2.2 E2Eテスト
5.3 システムテスト
5.3.1 機能テスト
5.3.2 非機能テスト
■第6章 マイクロサービスのためのCI/CD設計
6.1 CI/CDの概要
6.1.1 CI/CDとは何か
6.1.2 マイクロサービスの開発にCI/CDが重要な背景
6.1.3 CI/CDに取り組み始めるにあたり
6.2 CI/CDの設計
6.2.1 CI/CD全体に関わる設計
6.2.2 CIに関わる設計
6.2.3 CDに関わる設計
6.3 実装するCI/CDの全体像
6.3.1 CI/CDパイプラインの全体像と解説内容
6.3.2 CI/CDの設計サマリ
■第7章 マイクロサービスアプリケーションにおけるCI/CDの実装
7.1 GitLab CIによるCIの実装
7.1.1 ここで解説する内容
7.1.2 CIパイプラインの実装
7.2 Argo CDによるGitOpsの実装
7.2.1 Argo CDとは
7.2.2 実装するCDパイプラインの全体像
7.2.3 Argo CDのセットアップ
7.2.4 GitOpsの実装
■第8章 発展的なCI/CD戦略
8.1 Argo Rolloutsによるプログレッシブデリバリの実装
8.1.1 Argo Rolloutsとは
8.1.2 Argo Rolloutsによるプログレッシブデリバリのパイプライン全体像
8.1.3 Argo Rolloutsのセットアップ
8.1.4 プログレッシブデリバリの実装
8.2 CI/CDの高みを目指すために
8.2.1 発展的なソフトウェア開発ライフサイクル手法
8.2.2 CD成熟度モデル
8.2.3 より高度なCI/CDのプロセス設計
■第9章 マイクロサービスの信頼性を支えるオブザーバビリティ
9.1 オブザーバビリティの世界へようこそ
9.1.1 オブザーバビリティとは何か
9.1.2 オブザーバビリティと監視の関係
9.1.3 オブザーバビリティをはじめよう
9.2 シグナルの種類と性質を知る
9.2.1 主要な3つのシグナル
9.2.2 その他のシグナル
9.3 オブザーバビリティの実装プロセスを考える
9.3.1 出発点はどこにあるか
9.3.2 計測の手段を検討する
9.3.3 どのようなプロセスで実装するか
9.4 シグナルのパイプラインを設計する
9.4.1 シグナルの収集方法を設計する
9.4.2 シグナルの保存方法を設計する
9.4.3 シグナルの利用方法を設計する
9.4.4 定期的に見直す
9.5 より良いオブザーバビリティを目指して
9.5.1 ユーザ体験を改善する
9.5.2 開発者体験を改善する
9.5.3 障害をシミュレートする
9.5.4 組織文化をモダナイズする
9.5.5 定量的な評価を導入する
9.5.6 ビジネスへのフィードバックループを作る
9.5.7 長い旅のはじまり
>> 発展編
■第10章 マイクロサービスの実践プラクティス
10.1 マイクロサービスの特徴を表すフレームワーク
10.1.1 マイクロサービスの9つの特徴
10.1.2 The Twelve-Factor AppとBeyond the Twelve-Factor App
10.1.3 マイクロサービスの分割とDDD
10.2 マイクロサービスデザインパターン
10.2.1 マイクロサービス間のデータ整合を取るためのパターン
10.2.2 レガシーモダナイゼーションパターン
10.3 マイクロフロントエンド
10.3.1 フロントエンドの技術トレンド
10.3.2 フロントエンドの分割と統合
10.3.3 マイクロフロントエンドの構築とデプロイ
■第11章 マイクロサービスの今後
11.1 開発スタイル
11.1.1 AIやデータを活用した開発:AIDev
11.1.2 運用:AIOps
11.1.3 セキュリティ
11.2 マイクロサービスのアーキテクチャトレンド
11.2.1 WebAssembly
11.2.2 eBPF
11.2.3 Edge Computing on Kubernetes
■第1章 マイクロサービス概論
1.1 本書について
1.1.1 本書に込めた思い
1.1.2 マイクロサービスの捉え方
1.1.3 本書の価値
1.1.4 本書の構成
1.2 マイクロサービスの概要
1.2.1 マイクロサービスとは
1.2.2 マイクロサービスの起源と歴史
1.2.3 なぜマイクロサービスが必要なのか
1.2.4 マイクロサービスに対する誤解
1.2.5 マイクロサービス化を可能とする技術
1.3 マイクロサービス化を成功に導くプラクティス
1.3.1 アジャイルとマイクロサービスの親和性
1.3.2 マイクロサービス時代のアーキテクチャ
1.3.3 マイクロサービスをどの単位で分ければ良いか
1.3.4 組織とケーパビリティ
1.3.5 見える化する技術の重要性と多様化
>> 実践編
■第2章 マイクロサービスの実装
2.1 サンプルアプリケーションの概要と開発環境構築
2.1.1 本書で実装するマイクロサービスの全体像
2.1.2 マイクロサービス開発環境の構築
2.2 アプリケーションの実装
2.2.1 リクエスト/レスポンス型通信によるマイクロサービスの実装
2.2.2 BFFによるバックエンドサービスの統合
2.2.3 シングルページアプリケーションの実装
2.2.4 マイクロサービスのデプロイ
2.2.5 イベント駆動型通信によるマイクロサービスの実装
■第3章 サンプルアプリケーションへの非機能の実装
3.1 書籍オンラインショップ「Book Shop」の動作確認
3.1.1 本節で解説する内容
3.1.2 「Book Shop」の動作確認
3.1.3 「Book Shop」の機能紹介
3.2 サービスのモニタリングと可用性の向上
3.2.1 ヘルスチェックとProbeによるモニタリング
3.2.2 グレースフルシャットダウンによる安全なサービスの停止
3.3 サービスメッシュによるサービス連携
3.3.1 横断的関心事を扱うサービスメッシュ
3.3.2 バックエンドサービス間のトラフィック管理
3.3.3 バックエンドサービス間の通信セキュリティ
3.4 ユーザの認証・認可
3.4.1 ユーザの認証・認可とOpenID Connect
3.4.2 Keycloakを使った認証・認可の実装
■第4章 マイクロサービスにおけるデータ管理
4.1 サービス間のデータ整合性の維持
4.1.1 SAGAによるトランザクション管理
4.1.2 TCCによるトランザクション管理
4.1.3 イベントソーシングによるデータ永続化
4.2 マイクロサービスでのクエリ操作
4.2.1 APIコンポジションを使ったクエリ
4.2.2 CQRSを使ったクエリ
■第5章 マイクロサービスのテスト
5.1 ユニットテスト
5.1.1 マイクロサービス開発におけるユニットテストのポイント
5.1.2 Go言語を用いたテストコードの例
5.1.3 ユニットテストと静的解析
5.2 インテグレーションテスト
5.2.1 APIテスト
5.2.2 E2Eテスト
5.3 システムテスト
5.3.1 機能テスト
5.3.2 非機能テスト
■第6章 マイクロサービスのためのCI/CD設計
6.1 CI/CDの概要
6.1.1 CI/CDとは何か
6.1.2 マイクロサービスの開発にCI/CDが重要な背景
6.1.3 CI/CDに取り組み始めるにあたり
6.2 CI/CDの設計
6.2.1 CI/CD全体に関わる設計
6.2.2 CIに関わる設計
6.2.3 CDに関わる設計
6.3 実装するCI/CDの全体像
6.3.1 CI/CDパイプラインの全体像と解説内容
6.3.2 CI/CDの設計サマリ
■第7章 マイクロサービスアプリケーションにおけるCI/CDの実装
7.1 GitLab CIによるCIの実装
7.1.1 ここで解説する内容
7.1.2 CIパイプラインの実装
7.2 Argo CDによるGitOpsの実装
7.2.1 Argo CDとは
7.2.2 実装するCDパイプラインの全体像
7.2.3 Argo CDのセットアップ
7.2.4 GitOpsの実装
■第8章 発展的なCI/CD戦略
8.1 Argo Rolloutsによるプログレッシブデリバリの実装
8.1.1 Argo Rolloutsとは
8.1.2 Argo Rolloutsによるプログレッシブデリバリのパイプライン全体像
8.1.3 Argo Rolloutsのセットアップ
8.1.4 プログレッシブデリバリの実装
8.2 CI/CDの高みを目指すために
8.2.1 発展的なソフトウェア開発ライフサイクル手法
8.2.2 CD成熟度モデル
8.2.3 より高度なCI/CDのプロセス設計
■第9章 マイクロサービスの信頼性を支えるオブザーバビリティ
9.1 オブザーバビリティの世界へようこそ
9.1.1 オブザーバビリティとは何か
9.1.2 オブザーバビリティと監視の関係
9.1.3 オブザーバビリティをはじめよう
9.2 シグナルの種類と性質を知る
9.2.1 主要な3つのシグナル
9.2.2 その他のシグナル
9.3 オブザーバビリティの実装プロセスを考える
9.3.1 出発点はどこにあるか
9.3.2 計測の手段を検討する
9.3.3 どのようなプロセスで実装するか
9.4 シグナルのパイプラインを設計する
9.4.1 シグナルの収集方法を設計する
9.4.2 シグナルの保存方法を設計する
9.4.3 シグナルの利用方法を設計する
9.4.4 定期的に見直す
9.5 より良いオブザーバビリティを目指して
9.5.1 ユーザ体験を改善する
9.5.2 開発者体験を改善する
9.5.3 障害をシミュレートする
9.5.4 組織文化をモダナイズする
9.5.5 定量的な評価を導入する
9.5.6 ビジネスへのフィードバックループを作る
9.5.7 長い旅のはじまり
>> 発展編
■第10章 マイクロサービスの実践プラクティス
10.1 マイクロサービスの特徴を表すフレームワーク
10.1.1 マイクロサービスの9つの特徴
10.1.2 The Twelve-Factor AppとBeyond the Twelve-Factor App
10.1.3 マイクロサービスの分割とDDD
10.2 マイクロサービスデザインパターン
10.2.1 マイクロサービス間のデータ整合を取るためのパターン
10.2.2 レガシーモダナイゼーションパターン
10.3 マイクロフロントエンド
10.3.1 フロントエンドの技術トレンド
10.3.2 フロントエンドの分割と統合
10.3.3 マイクロフロントエンドの構築とデプロイ
■第11章 マイクロサービスの今後
11.1 開発スタイル
11.1.1 AIやデータを活用した開発:AIDev
11.1.2 運用:AIOps
11.1.3 セキュリティ
11.2 マイクロサービスのアーキテクチャトレンド
11.2.1 WebAssembly
11.2.2 eBPF
11.2.3 Edge Computing on Kubernetes
著者情報
正野 勇嗣
正野勇嗣
正野勇嗣、山田真也、宇都宮雅彦、横井一輝、岡本隆史
山田 真也
山田真也
宇都宮 雅彦
宇都宮雅彦
横井 一輝
横井一輝
岡本 隆史
岡本隆史