4章 統合
4.7 REST
リチャードソン成熟度モデル
例の中で使われている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 非同期アーキテクチャの複雑さ
- CatastrophicFailover
- 壊滅的フェールオーバー
- Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions (Addison-Wesley Signature Series (Fowler))
4.13 バージョニング
4.13.1 最大限の先送り
- TolerantReader
- ポステルの法則(Robustness Principle)
- RFC 760 - DoD standard Internet Protocol 2.10. Robustness Principle
- 送信するものに関しては厳密に、受信するものに関しては寛大に
- RFCの題名にあるDoDはおそらくDepartment of Defense(国防総省)
- RFCは、なぜ「意見募集」という名前だったのか?:Geekなぺーじ
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 すべては接合部次第
- レガシーコード改善ガイド 2009年
- 翻訳書「レガシーコード改善ガイド」の注目トピック連載一覧:CodeZine(コードジン)
- 「レガシーコード改善ガイド」のススメ 第1回:レガシーコードの定義、テストの重要性とは (1⁄2):CodeZine(コードジン)
- レガシーコードとは、単にテストのないコードである
- 「編集して祈る」か、「保護して変更する」か
- 「保護」できるテストは自動実行できる単体テスト
- 「レガシーコード改善ガイド」のススメ 第2回:コードを理解するため、仕様化テストで文書化する (1⁄2):CodeZine(コードジン)
- 仕様化テスト(characterization test)
- ステップ1:テストコードで対象となるコードを呼び出す
- ステップ2:失敗することが分かっている表明を書く
- ステップ3:失敗からどんな振る舞いかを確認する
- ステップ4:コードが実現する振る舞いをするようにテストを変更する
- ステップ5:以上の手順を繰り返す
- 「レガシーコード改善ガイド」のススメ 第3回:既存のコードに極力手を加えずに機能を追加する (1⁄2):CodeZine(コードジン)
- スプラウトクラス
- 追加したい機能をメソッドして持つ新しいクラスを作って、古いクラスから呼ぶ。
- 新しいクラスには単体テストを用意する。
- レガシーコードの中にテスト済みのコードが少しだけ作り込まれた状態を「発芽」にたとえて表現。「スプラウト(sprout)」は「発芽させる(動詞)」「新芽(名詞)」を意味する。
- 「レガシーコード改善ガイド」のススメ 第4回:既存のコードに極力手を加えずにテストで保護する (1⁄2):CodeZine(コードジン)
- DBに接続している部分をテスト用にオーバーライド & private -> protected
- このへんはテストフレームワークで対処できそう
- 「接合部」(Seam): 元のコードを編集しなくても、コードの振る舞いを変えることができる部分
- DBに接続している部分をテスト用にオーバーライド & private -> protected
- 「レガシーコード改善ガイド」のススメ 第5回:レガシーコードを攻略するための原則とプラクティス (1⁄3):CodeZine(コードジン)
- 機能スケッチ(feature sketch)
- 「レガシーコード改善ガイド」のススメ 第1回:レガシーコードの定義、テストの重要性とは (1⁄2):CodeZine(コードジン)
5.2 MusicCorpの分解
5.4 入り組んだ依存関係
5.6 問題の対処
- Hibernate - Wikipedia - ORM
- SchemaSpy
- CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化
- スキーマのメタデータを解析して、webブラウザで閲覧可能なドキュメントを作成するツール
- CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化
5.11 データベースリファクタリング
5.18 バックアップデータポンプ
7章 テスト
pacto 既存のクライアント・サーバ間の対話を記録して、エクスペくテーションを生成する。既存のサービス向け
スモークテスト
ブルーグリーンデプロイメント
カナリヤリリース
平均故障間隔 MTBF: Mean Time Between Failures
平均修復時間 MTTR: Mean Time To Repair
CFR: Cross-Functional Requirements
実践アジャイルテスト おすすめ
8章 監視
8.4 ログ、ログ、さらにまたログ
- Logstash: Collect, Parse, Transform Logs | Elastic
- Kibana: Explore, Visualize, Discover Data | Elastic
- Graphite
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 セキュリティの組み込み
- OWASP Zed Attack Proxy Project - OWASP
- 脆弱性のテストツール
- presidentbeef/brakeman: A static analysis security vulnerability scanner for Ruby on Rails applications
- Ruby on Railsに対する脆弱性のテストツール
- Microsoft Security Development Lifecycle
- セキュアなソフトフェアを作るための開発プロセス
9.11 まとめ
- OWASP (Open Web Application Security Project)
10章 コンウェイの法則とシステム設計
10.1 証拠
10.1.2 Windows Vista
10.6 共有サービスに向かう要因
10.6.2 フィーチャーチーム
11章 大規模なマイクロサービス
11.1 障害はどこにでもある
Googleの受付に展示されているサーバはハードドライブがマジックテープで取り付けられていた。
「ハードドライブがよく故障するので、ねじ止めしたくない」らしい。
11.5 アンチフラジャイルな組織
- Amazon.co.jp: Antifragile: Things That Gain from Disorder (Incerto) 電子書籍: Nassim Nicholas Taleb: Kindleストア
- The Antifragile Organization - ACM Queue
- Weathering the Unexpected - ACM Queue
- Netflix/SimianArmy: Tools for keeping your cloud operating in top form. Chaos Monkey is a resiliency tool that helps applications tolerate random instance failures.
11.5.2 サーキットブレーカー
11.5.3 隔壁
サーキットブレーカーのライブラリ
- Java
- .NET
- Ruby
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でのキャッシング
- cache-control
- Expires
- ETag
- Amazon.co.jp: REST in Practice: Hypermedia and Systems Architecture 電子書籍: Ian Robinson, Jim Webber, Savas Parastatidis: Kindleストア
- HTTP/1.1: Caching in HTTP
11.9.3 書き込みのキャッシング
- ライトビハインドキャッシュ
- ローカルキャッシュに書き込み、ある時点でデータを正規のデータベースに流す
- 利点
- 集中的に大量の書き込みがある場合
- 同じデータを複数回書き込む場合
- 下流サービスが一時的に利用できない場合
11.13 動的サービスレジストリ
11.13.1 ZooKeeper
11.13.2 Consul
- Consul by HashiCorp
- SRVレコード
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