マイクロサービスアーキテクチャ

著者:Sam Newman

出版社:オライリージャパン

4章 統合

4.7 REST

リチャードソン成熟度モデル

Richardson Maturity Model

例の中で使われているidがjsmithが使われているが、これはJohn Smithの略で日本における山田太郎のような一般的な人名として使われいると思われる → ジョン・スミス - Wikipedia

4.7.2 アプリケーション状態エンジンとしてのハイパーメディア(HATEOAS)

HATEOAS (Hypermedia As The Engine Of Appication State)

4.7.3 JSONか、XMLか、他の何かか

4.8.2 非同期アーキテクチャの複雑さ

4.13 バージョニング

4.13.1 最大限の先送り

4.13.3 セマンティックバージョニングの利用

4.13.4 異なるエンドポイントの共存

バージョンをURIに含めるか

4.14 ユーザインタフェース

4.14.5 フロントエンド向けのバックエンド(BFF)

BFF: Backends For Frontends

4.15 サードパーティソフトウェアとの統合

4.15.5 ストラングラー(絞め殺し)パターン

5章 モノリスの分割

5.1 すべては接合部次第

5.2 MusicCorpの分解

5.4 入り組んだ依存関係

5.6 問題の対処

5.11 データベースリファクタリング

5.18 バックアップデータポンプ

7章 テスト

pacto 既存のクライアント・サーバ間の対話を記録して、エクスペくテーションを生成する。既存のサービス向け
スモークテスト
ブルーグリーンデプロイメント
カナリヤリリース
平均故障間隔 MTBF: Mean Time Between Failures
平均修復時間 MTTR: Mean Time To Repair
CFR: Cross-Functional Requirements
実践アジャイルテスト おすすめ

8章 監視

8.4 ログ、ログ、さらにまたログ

8.6 サービスのメトリック

8.7 合成監視

セマンティック監視。定期的にテストのためのイベントを発生させて、全体にかかる時間を監視する。

8.8 相関ID

GUIDを生成して、後続のすべてのログに出力することでイベントを追えるようにする。
HTTPクライアントライブラリをラップして、ヘッダで相関IDを伝播する。

8.11 利用者の考慮

8.12 将来

8.13 まとめ

9章 セキュリティ

9.1 認証と認可

9.1.1 一般的なシングルサインオン(SSO)の実装

  • SAML (Security Assertion Markup Language)

9.2 サービス間の認証と認可

9.2.5 HTTP上のHMAC

  • HMAC (Hash-based Message Authentication Code)
  • JSON Web Token

9.3 格納データの保護

9.3.2 鍵がすべて

SQL ServerのTransparent Data Encryption (TDE、透過的データ暗号化)
暗号化を組み込みでサポート

9.6 節約する

9.9 セキュリティの組み込み

9.11 まとめ

10章 コンウェイの法則とシステム設計

10.1 証拠

10.1.2 Windows Vista

10.6 共有サービスに向かう要因

10.6.2 フィーチャーチーム

11章 大規模なマイクロサービス

11.1 障害はどこにでもある

Googleの受付に展示されているサーバはハードドライブがマジックテープで取り付けられていた。
「ハードドライブがよく故障するので、ねじ止めしたくない」らしい。

11.5 アンチフラジャイルな組織

11.5.2 サーキットブレーカー

11.5.3 隔壁

サーキットブレーカーのライブラリ

11.7 スケーリング

11.7.6 再出発

10倍の成長を見込んで設計するが、100倍になる前に書き直しを計画すべき

Google: Challenges in Building Large-Scale Information Retrieval Systems

11.8 データベースのスケーリング

11.8.5 CQRS

CQRS (Command-Query Responsibility Segregation: コマンドクエリ責務分離)

11.9 キャッシング

11.9.2 HTTPでのキャッシング

11.9.3 書き込みのキャッシング

  • ライトビハインドキャッシュ
    • ローカルキャッシュに書き込み、ある時点でデータを正規のデータベースに流す
    • 利点
      • 集中的に大量の書き込みがある場合
      • 同じデータを複数回書き込む場合
      • 下流サービスが一時的に利用できない場合

11.13 動的サービスレジストリ

11.13.1 ZooKeeper

11.13.2 Consul

11.13.3 Eureka

11.14 サービスの文章化

11.14.1 Swagger

11.14.2 HALとHALブラウザ

11.15 自己記述型システム

  • SOA
  • UDDI(Universal Description, Discovery, and Integration)
  • HumaneRegistry

12章 まとめ

12.1 マイクロサービスの原則

  • マイクロサービス 小規模で自律的なサービス
  • ビジネス概念に沿ったモデル化
  • 自動化の文化
  • 内部実装詳細の隠蔽
  • すべての分散化
  • 独立したデプロイ
  • 障害の分離
  • 高度な観測性
  • ビジネス概念に沿ったモデル化

12.1.2 自動化の文化の採用

フロントローディングでマイクロサービスをサポートするツールを作成させるとより効果的です。

12.1.3 内部実装の隠蔽

  • 境界づけられたコンテキスト
  • データベースの隠蔽
  • REST

12.1.4 すべての分散化

  • セルフサービス
  • 社内オープンソース
  • コレオグラフィ

12.1.5 独立したデプロイ

  • バージョン付されたエンドポイント
  • ホストごとに1つのサービス
  • リリースのリスクを減らす
    • ブルーグリーンデプロイメント
    • カナリア
    • コンシューマ駆動契約

12.1.6 障害の分離

  • アンチフラジャイル
  • タイムアウトの設定
  • 隔壁とサーキットブレーカー
  • 可用性と整合性

12.1.7 高度な観測性

  • セマンティック監視
  • 合成トランザクション
  • ログと統計データの集約
  • 相関ID