Book
microservices

[読書メモ] プロダクションレディマイクロサービス

目的

どのようにすれば本番運用に対応した(プロダクションレディ)マイクロサービビスを作れるか?UberのSREとして働いているSusan J.Fowlerからそのエッセンスを学ぶ。
Q1. まず、そもそもマイクロサービスって何でしたっけ?
Q2. 本番運用に対応したマイクロサービスを構築するのに必要なことは?
Q3.

キーワード

モノリス、マイクロサービス、マイクロサービスが従うべき標準、マイクロサービスエコシステム、コンウェイの法則

マイクロサービスとは

  • 多くの有名企業がモノリシックなアプリケーションの構築を止め、マイクロサービスアーキテクチャを採用してきた
  • 今日のアプリケーションは論理的には、3つの要素に分解できる ー フロントエンド(クライアントサイド)、バックエンド、データストア
  • アプリケーションはいくつかの機能から構成される。これらの機能を一つのコードとして構築するのがモノリス。そうではなくて、機能毎に独立したコンポーネント(マイクロサービス)として構築し、それらを組み合わせることにより、アプリケーションを実現するのがマイクロサービスアーキテクチャ
  • マイクロサービスは、1つのことだけを非常によくこなす小さなアプリケーション
  • 個々のマイクロサービスに、自律性、独立性、自己完結性を与える
  • 通常マイクロサービスアーキテクチャを採用する企業は、1つのアプリケーションを作り上げたあと、スケーラビリティの限界にぶつかり、組織的な課題に直面してからそうする
  • モノリスの分割の手順、
    • コンポーネント化してマイクロサービスを切り出す
    • 個々のマイクロサービスに担当チームを設ける
    • インフラストラクチャチームの編成
  • 一連のマイクロサービスが全体としてうまく機能するために、インフラストラクチャと、各マイクロサービスが備えるべき標準が必要
  • マイクロサービスはインターフェースと実装を分離することにより、実装の自由度を得ることができる(プログラミング言語、ミドルウェア、データストア)
  • マイクロサービスエコシステム(マイクロサービスが適切に動作するために必要な環境)
    ms4.png
    https://www.susanjfowler.com/blog/2016/12/18/the-four-layers-of-microservice-architecture

    • レイヤ1 : ハードウェア
    • レイヤ2 : 通信
      • 通信プロトコル(RPC, REST)
      • サービスディスカバリ、サービスレジストリ、負荷分散
    • レイヤ3 : アプリケーションプラットフォーム
      • マイクロサービスに依存しないすべての内部ツール、サービスを含んでいる
      • 開発プロセス、デプロイソリューション、ロギング監視
    • レイヤ4 : マイクロサービス
  • マイクロサービスはもっとも単純なものでもかなり複雑なシステムになる (基盤が重要である

本番対応するとは

  • マイクロサービスアーキテクチャを採用すると、開発者にはかなりの自由が与えられるが、全体の可用性を確保するためには、個々のマイクロサービスが、アーキテクチャ、運用、組織をめぐる高い標準を満たす必要がある
  • 標準化の目標は可用性
  • 本番対応できるアプリケーションやサービスとは、本番トラフィックを任せられる信頼のあるアプリケーション、サービス
  • 8つの原則 ー 安定性、信頼性、スケーラビリティ、対障害性、大惨事対応、パフォーマンス、監視、ドキュメント

本番対応の8つの標準

安定性

  • 安定性の要件
    • 安定した開発サイクル
    • 安定したデプロイプロセス
    • 安定した導入、非推奨手続き ## 信頼性
  • 信頼性の要件
    • 確実なデプロイプロセス
    • 依存関係の障害に対処するための計画、影響の緩和と障害からの保護
    • 確実なルーティングと健全性チェック ## スケーラビリティ
  • スケーラビリティは、並行性とパーティション分割を必要とするが、この2つをモノリスで実現するのは難しい
  • スケーラビリティの要件
    • 質的、量的な成長の判断基準
    • リソースのボトルネックと要件の明確化
    • バーストトラフィックの対応
    • 依存関係のスケーリング

    - データストアのスケーリング

パフォーマンス

  • マイクロサービスがどれくらい効率よくリクエストを処理するか
  • コストが高いネットワーク呼び出しを大量に行うマイクロサービスは、パフォーマンスが高いとは言えない ## 対障害性
  • 単一障害点を明確にして解決する

- 障害の検出、修正戦略を用意する

大惨事対応

監視

ドキュメント