O’REILLY Learning「マイクロサービスアーキテクチャ 第2版」8〜12
content/uploads/2023/02/9784814400010.jpeg" alt="" width="400″ height="568″ class="alignnone size-full wp-image-6851″ />
https://learning.oreilly.com/library/view/maikurosabisuakitekutiya-di-2ban/9784814400010/
8章 デプロイ
論理から物理へ
マイクロサービスのデプロイの原則
・分離された実行
・自動化の重視
・IaC(Infrastructure as Code:コードとしてのインフラ)
・停止時間のないデプロイ
・望ましい状態の管理
Nomad:https://nomadproject.io
オンプレミスとクラウドにまたがるコンテナや非コンテナ型アプリケーションを大規模に展開、管理するためのシンプルで柔軟なスケジューラおよびオーケストレータ
Flux:https://www.weave.works/oss/flux/
Flux は、クラスタ内で GitOps を実現するためのオペレータです。
クラスタの設定とgitの設定が一致していることを確認し、デプロイを自動化します。
9章 テスト
Brian Marickのテスト4象限。
Lisa Crispin、Janet Gregory、Agile Testing: A Practical Guide for Testers and Agile Teams
・受入テスト
・探索的テスト
・単体テスト
・性質テスト
Mike Cohn 著書Succeeding with Agile
「テストピラミッド」
・単体テスト
・サービステスト
・UIテスト
モデルの問題点は、これらのすべての用語の意味が、人によって異なること。
アンチパターンは、「テストスノーコーン」(Test Snow Cone)、あるいは「逆ピラミッド」(Inverted Pyramid)と呼ばれる
「コンシューマ駆動契約」(CDC:Consumer-Driven Contract)
Pact:https://pact.io
Webアプリケーション、API、マイクロサービスを統合するための、迅速、簡単、かつ信頼性の高いテスト
Spring Cloud Contract:https://spring.io/projects/spring-cloud-contract
Spring Cloud Contractは、Consumer Driven Contractsのアプローチをうまく実装するためのソリューションを提供する包括的なプロジェクト。
トレードオフ
「平均故障間隔」(MTBF:Mean Time Between Failures)の最適化
「平均修復時間」(MTTR:Mean Time To Repair)の最適化
「非機能要件」(NFR:Non-Functional Requirements)
代わりに「機能横断要件」(CFR:Cross-Functional Requirements)という用語を作りました
10章 監視から可観測性へ
マイクロサービスアーキテクチャの監視(モニタリング)に関する課題
可観測性(オブザーバビリティ)の概念への関心の高まり
可観測性の概念は数十年前からありますが、ソフトウェア開発で使われるようになったのは、つい最近のこと
可観測性の構成要素
・メトリック集約
・分散トレーシング
・うまくいっているか
・アラート
・セマンティック監視
・本番環境でのテスト
OpenTelemetry:https://opentelemetry.io
効果的な観測を可能にする、高品質、ユビキタス、ポータブルなテレメトリー。
「サイトリライアビリティエンジニアリング」(SRE:Site Reliability Engineering)
SLA(Service Level Agreement、サービスレベル合意)
SLO(Service Level Objective、サービスレベル目標)
SLI(Service Level Indicator、サービスレベル指標)
EEMUA(Engineering Equipment and Materials Users Association)から有用な規則が発表されている。
「良いアラートとはどのようなものか」について、私が今まで見た中で最も優れています。
関連性:アラートに価値を持たせる。
一意性:アラートが、別のアラートと重複しないようにする。
適時性:アラートを迅速に取得し、利用する。
優先順位付け:アラートをどのような順序で処理すべきかを判断できるように、運用担当者に十分な情報を提供する。
理解可能:アラートの情報を明確で読みやすいものにする。
診断:何が問題かを明確にする。
忠告:運用担当者が取るべき措置をわかるようにする。
焦点を絞る:最も重要な問題に注目する。
11章 セキュリティ
最小権限の原則とは、アクセス権を与える際に、必要な機能を実行するために必要な最低限のアクセスを、必要な期間だけ許可するという考え。
複数の保護を用意して、攻撃者から身を守ることが必須。
米国国立標準技術研究所(NIST:National Institute of Standards and Technology)のモデル
5つの機能のモデル:https://oreil.ly/MSAuU
・特定
・保護:ハッキングしようとしている人から、重要な資産を「保護」する。
・検知:最善の努力にもかかわらず、攻撃が発生しているかどうかを「検知」する。
・対応:何か悪いことが起こった際に、「対応」する。
・復旧
12章 レジリエンス
「レジリエンス」(回復性)
David D. Woodsは、この分野でレジリエンスのさまざまな側面を分類
4つの概念
・堅牢性(ロバストネス、robustness)
・回復性(rebound)
・グレースフルな拡張性(graceful extensibility)
・持続的な適応性(sustained adaptability)
安定性パターン
・タイムアウト
・再試行(リトライ)
・バルクヘッド
・サーキットブレーカー
・分離性
・冗長性
・ミドルウェア
・冪等性
CAP定理は本質的に、分散システムにおいて互いにトレードオフとなる3つの事項がある。
「一貫性」(整合性、consistency)、「可用性」(availability)、「分断耐性」(partition tolerance)
この定理は、障害モードで、このうち2つの特性を維持できること。