【読書】プロダクションレディ マイクロサービス

2020年7月24日

はじめに

お世話になります、hosochinです
先に言っておきます、1~4章までは読みましたが他はざっと目を通した程度です

今回はオライリーの
「プロダクションレディマイクロサービス」
を読んでみたので内容を整理してみようと思います

マイクロサービスとは

複数の小さなサービスの集合体としてシステムを構築し、各サービス同士をHTTP経由のAPIやメッセージングなどの軽量な通信で連携する手法

IT用語辞典引用

マイクロサービスアーキテクチャを採用するメリット・デメリット

メリット

複雑で大規模なモノリシックなアプリケーションのもつスケーラビリティの低さ、効率の悪さ、ベロシティの低さ、新テクノロジーの採用の難しさ…
これらを解決できること

デメリット

  • チームの孤立化とチーム間のコミュニケーション不足に陥りやすい
  • 技術的負債
    • 開発スピードの速さと引き換えに、もっともよいソリューションを先延ばしにしてしまいやすい
    • システム障害の種類が増える
      • 細かく分割された部品のうち、一部の部品の障害が他に影響し予期せぬ新たな障害を生みやすい
  • リソースの奪い合い
    • ハードウェアやインフラストラクチャリソースは有限であり、チーム間での奪い合いが起きる
    • 人員のリソースも同様

安定性と信頼性について

安定性と信頼性の定義

  • 開発、デプロイ、新しいテクノロジーの導入、依存関係の非推奨、廃止によってマイクロサービスエコシステム全体が不安定にならないこと
  • 常に全体から依存されるマイクロサービスであること

安定性と信頼性のポイント

  • 標準化された開発サイクルがある
    • 一元管理されたリポジトリがある
    • 本番環境の状態を正確に反映した開発環境がある
    • 適切なテストなlintテスト、単体テスト、統合テスト、エンドツーエンドテストが揃っている
    • コードレビューの手続きや方針が用意されている
    • テスト、パッケージング、ビルド、リリースのプロセスが自動化されている
  • 標準化されたデプロイパイプラインがある
    • デプロイパイプラインにステージングフェーズが含まれている
    • デプロイパイプラインにカナリアフェーズがある
    • あらゆる障害を補足できるくらいの期間を使って、カナリアフェーズでデプロイを実行している
    • カナリアフェーズは本番トラフィックのランダムなサンプルを正確にホスティングしている
    • 本番環境へのデプロイはすべてのホストに対して漸進的に展開している
    • 緊急時にステージング、カナリアフェーズを省略するための手順が用意してある
  • 依存関係がわかっており、障害が起こった時のためにバックアップ、代替えサービス、フォールバック、キャッシュが用意されている
  • 安定性、信頼性のあるルーティング、検出が備わっている
    • マイクロサービスの信頼性に対する健全性チェックが絶えず実行されている(「200 OK」が返ってくることの確認など)
    • 不健全なホストにはロードバランサがルーティングしないようになっている
    • 不健全なマイクロサービスがリクエストを発行するのを防ぐサーキットブレーカーが配置されている

デプロイパイプラインの例

  1. まずステージング環境で新リリースをテスト
  2. 次に本番トラフィックの5%~10%しか送られてこない小規模なカナリア環境にデプロイ
  3. すべてのホストにデプロイされるまで順番に本番サーバへの展開

気になったキーワードとか

マイクロサービスとエンドポイントはバージョニングさせない

  • APIは常に変わるものとして扱うべき
  • バージョン指定し始めるとメンテナンスがかなり大変

ホットフィックスはアンチパターン

  • 緊急のコード修正だからといってデプロイパイプラインの前のフェーズを省略した場合、本番環境に新たなバグを持ち込む可能性もある
  • まずは可能な限り最後の安定ビルドにロールバックすべき

プログラミング言語の限界

  • マイクロサービスアーキテクチャでは言語の選択がきわめて重要な意味をもつ
  • プログラミング言語のスケーラビリティ、パフォーマンスの限界に注意しなければならない
  • 開発言語としてどの言語を採用するかは、言語のパフォーマンスとスケーラビリティに対する制約の大小を決め手にすべき

ドキュメントを開発サイクルの一部にする

  • ドキュメントの更新、改善をサービスの開発サイクルの必要不可欠な一部にすべき
  • READMEとコードのコメントはドキュメントではない
  • すべてのチームの開発者がすべてのマイクロサービスのドキュメントを難なく見つけられる状態であること

まとめ

現在の業務でマイクロサービスアーキテクチャを採用しているため、ちょっと読んでみました
0からマイクロサービスを構築しようとしている人、モノリスを分割してマイクロサービスにしていこうとしている人は一読してみると良いと思います