宮水の日記

宮水の日記

主に書評や資格取得について記事を書いています。

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

今回は、「マイクロサービスわからないよ〜」となっている私に対して、SREさんがオススメしてくださった「プロダクションレディマイクロサービス」を読みました。

対象読者

  • モノリスを分割して、「次はどうしよう?」と思っている人
  • 0からマイクロサービスを構築し、最初から安定性、信頼性、スケーラビリティ、耐障害性、パフォーマンスを備えたマイクロサービスを作りたいと考えているソフトウェアエンジニアとSRE
  • マイクロサービスの基本概念、マイクロサービスアーキテクチャ、最新の分散システムの基礎を知っている人(知らないけど読みました)

この本で学べること

  • マイクロサービスの一般的、汎用的な考え方
  • 安定性、信頼性、スケーラビリティ、耐障害性、パフォーマンスを備えたマイクロサービスとはどんなサービスなのか、その抽象的な概念
  • マイクロサービスを改善、標準化するためにはどうすれば良いか、現実的・具体的に理解できる

この本に書いてないこと

  • 各章で取り上げられている個々のテーマについて、具体的に「何を使ったらいいか」「何をすればいいか」までは書かれていない。

1章 マイクロサービス

対象読者に、マイクロサービスの基本概念、マイクロサービスアーキテクチャ、最新の分散システムの基礎を知っている人と書かれていたのですが、知らない人向けに1章に入門を書いてくださっていました。

  • モノリスとマイクロサービスの違い
  • マイクロサービス環境のことをマイクロサービスエコシステムと呼び、4層のレイヤがあること
  • マイクロサービスを導入する際の組織的な課題

4層のレイヤの考え方は初めて知りました。漠然と色々な技術がバラバラになっているイメージがあったので、レイヤごとに分類できることを知って、マイクロサービスが具体的に何で構成されているのか少しイメージが湧きました。

2章 本番対応

マイクロサービスを標準化するための課題、本番対応の8つの標準についてです。

マイクロサービスアーキテクチャの採用によって、開発者は言語やライブラリ・開発ツールなどを自由に決められるようになりました。では、どのように各々のサービスが成功したかどうか測定すれば良いでしょうか?

そこで使われるのがサービスの可用性についてのSLA(サービスレベル契約)です。
99%の時間に利用可能なサービスにするぞ、というような目標を立てます。

さらに「本番対応」として、8つの原則を定量化し、アクション可能な要件として測定可能にします。
それが、安全性、信頼性、スケーラビリティ、耐障害性、大惨事対応、パフォーマンス、監視、ドキュメントです。
2章では、この8つの原則の要件について述べられていました。

次の章から、各々の原則をさらに詳しくみていきます。

3章 安定性と信頼性

安定性と信頼性を備えたマイクロサービスを作るための原則についてです。

  • 開発サイクル
  • デプロイパイプライン
  • サービス間の依存関係
  • サーキットブレーカーの配置
  • マイクロサービスが使われなくなったときの対処法

など。

4章 スケーラビリティとパフォーマンス

スケーラブルでパフォーマンスが高いマイクロサービスを構築するための原則についてです。

スケーラブルでパフォーマンスが高いマイクロサービスとは、同時に大量のタスクやリクエストを処理できるだけでなく、それらを効率よく処理でき、将来のタスクやリクエストの増加に対する備えがあるマイクロサービスです。

  • 質的な成長の判断基準(速さ)/ 量的な成長の判断基準(アクセス数)
  • トラフィック管理について
  • リソース(CPU、メモリ、データストレージなど)の効率的な使い方
  • マイクロサービスエコシステムにおけるデータベースの選び方

など。

5章 耐障害性と大惨事対応

大惨事に対する備えができた耐障害性のあるマイクロサービスを構築するための原則についてです。

  • 単一障害の除去
  • 大惨事や障害の一般的なシナリオ
  • 障害の検出と修正方法
  • 回復性テスト(単体テスト結合テスト、エンドツーエンドテスト)
  • 障害が起こったときの組織レベルでのインシデント
  • 機能停止処理の方法

など。

6章 監視

マイクロサービスの監視と標準化によって監視の複雑化を避ける方法についてです。

  • 主要メトリック(主要メトリックとは、アプリケーション、マイクロサービス、システムの健全性、状態、動作を必要十分な形で説明するこれらのものの性質のこと。)
  • ロギング(何をロギングするか)
  • アラート(適切なしきい値、その後のアクション)
  • オンコールについて

など。

7章 ドキュメントと組織的な理解

マイクロサービスの適切なドキュメントの問題と、開発チームと技術組織全体でアーキテクチャと組織運営の理解を深める方法についてです。

  • ドキュメントにはこんなこと書くといいよ
  • 組織のみんなが理解できるようなもの書こうね

など。

まとめ

最初オススメいただいたときは、インフラやマイクロサービス特有の用語がたくさん出てくるので読めるか不安でしたが、P177から、用語集がまとまっていてとても読み進めやすかったです!

まず、私はマイクロサービスを完全に誤解していて、今までの自分のタスク範囲はマイクロサービスのたったの一部分であったことに気づきました。今までは、マイクロサービスの全体像がイメージできなかったり、サービスがバラバラになるからデプロイとか依存関係とか難しそうだと漠然とした不安を抱えていましたが、 この本で抽象的な概念と用語が理解できました!

超ざっくりですが、これからの仕事のミーティングでは、「あ、今マイクロサービスのこの部分の話をしているんだな」→「一般的にはこういうことが満たされていればいいサービスなんだな」というようなことを意識しながら話が聞けるようになると思いました🙆‍♀️ 来年からは、この本片手に会議に参加したいと思います💪

さて、抽象的な概念を知ることができたので、「具体的に何を使ってこれらの要件を実現させていくのか?」ということを考えてみようと思います!そしてその前に、もう少しインフラを勉強しようと思いました。

ここまで読んでいただきありがとうございました!