目的
どのようにすれば本番運用に対応した(プロダクションレディ)マイクロサービビスを作れるか?UberのSREとして働いているSusan J.Fowlerからそのエッセンスを学ぶ。
Q1. まず、そもそもマイクロサービスって何でしたっけ?
Q2. 本番運用に対応したマイクロサービスを構築するのに必要なことは?
Q3.
キーワード
モノリス、マイクロサービス、マイクロサービスが従うべき標準、マイクロサービスエコシステム、コンウェイの法則
マイクロサービスとは
-
多くの有名企業がモノリシックなアプリケーションの構築を止め、マイクロサービスアーキテクチャを採用してきた
-
今日のアプリケーションは論理的には、3つの要素に分解できる ー フロントエンド(クライアントサイド)、バックエンド、データストア
-
アプリケーションはいくつかの機能から構成される。これらの機能を一つのコードとして構築するのがモノリス。そうではなくて、機能毎に独立したコンポーネント(マイクロサービス)として構築し、それらを組み合わせることにより、アプリケーションを実現するのがマイクロサービスアーキテクチャ
-
マイクロサービスは、1つのことだけを非常によくこなす小さなアプリケーション
-
個々のマイクロサービスに、自律性、独立性、自己完結性を与える
-
通常マイクロサービスアーキテクチャを採用する企業は、1つのアプリケーションを作り上げたあと、スケーラビリティの限界にぶつかり、組織的な課題に直面してからそうする
-
モノリスの分割の手順、
- コンポーネント化してマイクロサービスを切り出す
- 個々のマイクロサービスに担当チームを設ける
- インフラストラクチャチームの編成
-
一連のマイクロサービスが全体としてうまく機能するために、インフラストラクチャと、各マイクロサービスが備えるべき標準が必要
-
マイクロサービスはインターフェースと実装を分離することにより、実装の自由度を得ることができる(プログラミング言語、ミドルウェア、データストア)
-
マイクロサービスエコシステム(マイクロサービスが適切に動作するために必要な環境)
https://www.susanjfowler.com/blog/2016/12/18/the-four-layers-of-microservice-architecture- レイヤ1 : ハードウェア
- レイヤ2 : 通信
- 通信プロトコル(RPC, REST)
- サービスディスカバリ、サービスレジストリ、負荷分散
- レイヤ3 : アプリケーションプラットフォーム
- マイクロサービスに依存しないすべての内部ツール、サービスを含んでいる
- 開発プロセス、デプロイソリューション、ロギング監視
- レイヤ4 : マイクロサービス
-
マイクロサービスはもっとも単純なものでもかなり複雑なシステムになる (基盤が重要である)
本番対応するとは
- マイクロサービスアーキテクチャを採用すると、開発者にはかなりの自由が与えられるが、全体の可用性を確保するためには、個々のマイクロサービスが、アーキテクチャ、運用、組織をめぐる高い標準を満たす必要がある
- 標準化の目標は可用性
- 本番対応できるアプリケーションやサービスとは、本番トラフィックを任せられる信頼のあるアプリケーション、サービス
- 8つの原則 ー 安定性、信頼性、スケーラビリティ、対障害性、大惨事対応、パフォーマンス、監視、ドキュメント
本番対応の8つの標準
安定性
- 安定性の要件
- 安定した開発サイクル
- 安定したデプロイプロセス
- 安定した導入、非推奨手続き
信頼性
- 信頼性の要件
- 確実なデプロイプロセス
- 依存関係の障害に対処するための計画、影響の緩和と障害からの保護
- 確実なルーティングと健全性チェック
スケーラビリティ
- スケーラビリティは、並行性とパーティション分割を必要とするが、この2つをモノリスで実現するのは難しい
- スケーラビリティの要件
- 質的、量的な成長の判断基準
- リソースのボトルネックと要件の明確化
- バーストトラフィックの対応
- 依存関係のスケーリング
- データストアのスケーリング
パフォーマンス
- マイクロサービスがどれくらい効率よくリクエストを処理するか
- コストが高いネットワーク呼び出しを大量に行うマイクロサービスは、パフォーマンスが高いとは言えない
対障害性
- 単一障害点を明確にして解決する
- 障害の検出、修正戦略を用意する