概要
オライリーの「プロダクションレディマイクロサービス」
を読んだので、内容やノウハウをメモする。
全体感
UberのSREがプロダクションレディなマイクロサービスはどのようなものかについてチェックリスト的にまとめた書籍。
全体としては書籍の体は保っているものの、本当にチェックリストのようだった。
付録には本当にチェックリストという名目で箇条書きで掲載されており、確かにこれが網羅できていればプロダクションレディと言えそう。
一方で、これを全てやるのは至難の業。少なくとも日本国内だとこんなしっかりとしている企業は無いのではないかというレベル。
総じてイデア的に使うものであり、必要十分条件ではないと感じた。
(この書籍の内容が出来ていればプロダクションレディかもしれないが、プロダクションレディなサービスがこの書籍の内容を満たすとは限らない。)
ノウハウ
本番対応の原則は以下の8つの項目である。
- 安定性
- 信頼性
- スケーラビリティ
- 耐障害性
- 大惨事対応
- パフォーマンス
- 監視
- ドキュメント
安定性
安定して動く、バグがない、のようなものではない。
CI/CDが整っているか、開発プロセスはわかりやすいか、など開発者目線での安定感が要点。
信頼性
テストは十分か、完璧なステージング環境があるか、カナリアリリースが行われているか、など。
スケーラビリティとパフォーマンス
その名の通り。これらはまとめて語られていた。ボトルネックの明確化やキャパシティプランニングが適切に行われているかなど。
耐障害性と大惨事対応
これらもまとめて語られていた。単一障害点が無いこと、起こりうる大惨事が明確になっていること、障害対応手順の標準化など。
監視
ロギング、アラーティング、オンコールなどが適切に行われていること。ダッシュボードが整備されていること。
面白かったのは以下。
オンコールランブックは、半分寝ている開発者でも難なくたどれるように書かれていなければなりません。
Susan J. Fowler. プロダクションレディマイクロサービス (p.233). Kindle 版.
確かにその通りなのだが、「半分寝ている」という表現がちょっと面白かった。そんなランブックを書くことが果たしてできるのかという疑問は残るものの、やはり理想としては間違いない。
ドキュメント
本番対応のよいドキュメントの目標は、サービスについての知識を一元的に管理するリポジトリを作って、メンテナンスすることです。共有すべき知識は、サービスについてのありのままの事実と、サービスが何を行い、組織全体でどのような位置を占めるかについての組織的な理解の両方です。そのため、ドキュメントが貧弱だという問題は、ドキュメント(事実)の欠如と理解の欠如の2つの下位問題に分けることができます。これら2つの下位問題を解決するには、すべてのマイクロサービスを通じてドキュメントを標準化するとともに、マイクロサービスについての理解を共有するための組織的な構造を用意する必要があります。
Susan J. Fowler. プロダクションレディマイクロサービス (p.224). Kindle 版.
ドキュメントに関する項目があるのが非常に意外だった。他の項目は当たり前な部分が多いが、この項目に関しては新たな示唆が得られた気がする。
他にも引用しておくと以下のようにも書かれていた。
多くの開発者は、リポジトリ内にREADMEファイルを置くかコードにコメントをばらまいておけば、ドキュメントとして十分だと思っています。READMEファイルは必要不可欠であり、すべてのマイクロサービスのコードには適切なコメントが含まれていなければなりませんが、READMEは本番対応のドキュメントではなく、コメントはチェックアウトしてコード中を探し回らなければならなければ役に立ちません。
Susan J. Fowler. プロダクションレディマイクロサービス (p.226). Kindle 版.
ドキュメントの有無は本当に大きい。「コードを読めばわかる」なんて表現は、個人的には場当たり的にコードを書く能力、時間しかありませんと言っているようなものだと思う。
例えばマイクロサービスとして利用している他チームのAPIを呼ぶ際に適切なタイムアウト値が知りたいとする。そんなとき「コードを読んでください」なんて言えない。API仕様書などの明示できるドキュメントが無ければ、利用者全員に対して個別に回答しなければいけないかもしれない。
全体として大規模なサービスになればなるほどマイクロサービスの利用者も増えるので、大手ほどこの問題が発生する可能性が高いはず。この書籍は全体的にそういう対象について議論しているように見える。
まとめ
「プロダクションレディマイクロサービス」について感想やノウハウをまとめた。
誰かの参考になれば幸いです。