チームにSREとプラットフォームエンジニアが必要なタイミング
チームはこれまでうまくやってきた。デプロイは1日に複数回行われ、パイプラインは常にグリーン。コードはスムーズに本番環境に反映され、誰もが生産性を感じている。
しかし、やがてひび割れが現れ始める。
新しい機能がリリースされると、数時間以内にサーバーのメモリが枯渇する。最新リリースのデータベースクエリが全体のパフォーマンスを低下させる。デプロイ自体は成功したが、アプリケーションの動作がもっさりしており、誰も原因がわからない。
開発者は機能開発に忙しいが、本番障害対応に引きずり出され続ける。DevOps担当者はパイプラインや環境の修正に追われ、複数チームからの依頼に応対しながら圧倒されている。全員の作業が中断されるが、根本原因を深掘りする時間は誰にもない。
こうした状況こそ、Site Reliability Engineering(SRE)とプラットフォームエンジニアリングという2つのロールが意味を持ち始める瞬間である。
SREが実際に行うこと
SREは単なる運用の別名ではない。本番システムの信頼性に客観的な指標をもって焦点を当てるロールである。
何かが壊れてから直すのを待つのではなく、SREは明確な目標を定義する。「今月のアプリケーションの可用性は99.9%以上」「レスポンスタイムは200ミリ秒未満を維持」といったService Level Objectives(SLO)を設定する。これらの目標が低下し始めたら、SREは根本原因を調査し、応急処置ではなく恒久的な修正を確実に行う。
またSREは、チームが burnout に陥らないためのプラクティスも構築する。インシデント対応手順、非難ではなく学習に焦点を当てたポストモーテム、そして驚きを防ぐキャパシティプランニングである。SREがいなければ、チームは「何かが壊れる→直す→また別の何かが壊れる→また直す」という反応的なサイクルに陥り、なぜ同じパターンが繰り返されるのかを理解できないままになる。
SREと従来の運用ロールの決定的な違いは、測定と予防に重点を置く点である。SREは単にシステムを動かし続けるだけではない。チームがより速く、より頻繁にデプロイしても、システムが安定し続けることを保証する。
プラットフォームエンジニアリングが解決するもの
プラットフォームエンジニアリングは、別の種類の課題に対処する。
組織が成長するにつれ、各プロダクトチームは独自のパイプライン、環境、ツールを構築し始める。あるチームはある方法でデプロイし、別のチームはまったく異なる方法を使う。ドキュメントは追いつかず、新しいメンバーが独力でデプロイできるようになるまで数週間かかる。
プラットフォームエンジニアは、いわゆる内部開発者プラットフォームを構築する。これは、全チームが利用できる共有サービスの層である。環境のプロビジョニング、パイプラインの実行、データベースアクセスの管理、新バージョンのロールアウトなどだ。プロダクトチームはこれらの機能をゼロから構築する必要がなくなり、プラットフォームを使うだけで済む。
これはDevOpsを置き換えるものではない。各チームには依然として、固有のパイプラインやデプロイニーズを担当するメンバーがいる。しかしプラットフォームは一貫した基盤を提供し、全員の作業を軽くする。毎回車輪を再発明する代わりに、チームは堅牢で標準化されたものの上に構築できる。
これらのロールが必要な兆候
SREやプラットフォームエンジニアが必要になるエンジニアの人数やデプロイ回数の魔法の数字は存在しない。しかし、兆候は通常目に見える形で現れる。
- 本番インシデントが繰り返し発生する。同じ種類の障害が数週間おきに起こり、誰も恒久的に修正する時間がない。
- 開発者がデプロイが遅い、または複雑だと不満を言う。かつて数分で済んでいたものが、今では何時間もの調整を要する。
- インフラがもろく感じられる。何かを壊すのが怖くて、チームが変更をためらう。
- 新しい開発者が最初の変更をデプロイできるようになるまでに数週間かかる。
- 異なるチームが同じタスクにまったく異なるツールやプロセスを使っている。
これらのパターンに心当たりがあるなら、SREとプラットフォームエンジニアリングの導入を検討すべき時だ。これらのロールは初日から必要なわけではない。しかし、デリバリー速度が上がり、インフラの複雑さが増すにつれて、前進し続けるチームと運用の泥沼にはまるチームの分かれ目となる。
これらのロールがどのように連携するか
SREとプラットフォームエンジニアリングは互いに補完し合う。SREは本番稼働中のシステムの信頼性に焦点を当てる。プラットフォームエンジニアリングは、チームが確実に構築・デプロイできるようにすることに焦点を当てる。
以下の図は、SREとプラットフォームエンジニアリングが重複せずにどのように相互作用するかを示している。
実践的な例を挙げる。プラットフォームチームは、全プロダクトチームが使う標準的なデプロイパイプラインを構築する。SREチームは、それらのデプロイが本番の信頼性にどのような影響を与えるかを監視する。デプロイによってパフォーマンスが低下した場合、SREがそれを指摘し、プラットフォームチームは同様の問題を早期に捕捉できるようパイプラインを調整する。
どちらのロールも、開発者にかかる認知負荷を軽減する。開発者はインフラの詳細や信頼性の指標について考える必要がない。コードを書き、コミットすれば、プラットフォームが残りを処理する。SREはプラットフォーム自体の信頼性を確保する。
すぐに使える実践的なチェックリスト
チームにこれらのロールが必要かどうかを評価するなら、以下のチェックリストを確認してほしい。
- 繰り返し発生する本番インシデントがあり、誰も適切に調査する時間がない。
- 開発者が機能開発を中断して、運用上の問題に対応することが日常的になっている。
- 同じ種類のアプリケーションに対して、チームごとに異なるデプロイ方法を使っている。
- 新しい開発者がデプロイできるようになるまでに1週間以上かかる。
- 何かを壊すのが怖くて、インフラの変更を避けている。
- 本番システムの明確な信頼性目標が設定されていない。
3つ以上に「はい」と答えたなら、SREまたはプラットフォームエンジニアリングの計画を始めよう。小さく始めればよい。信頼性に専念する1人、または共有ツールを構築する1人でも、大きな違いを生み出せる。
具体的な結論
SREとプラットフォームエンジニアリングは、大企業だけの贅沢なロールではない。チームのデリバリーがスケールするにつれて現れる特定の問題に対する実践的な対応策である。本番障害が繰り返されるようになり、インフラが一貫性を失い、開発者が機能開発よりも運用に多くの時間を費やすようになったとき、これらのロールはすぐに元が取れる。彼らは官僚主義を増やすのではなく、摩擦を取り除く。そして、残りのチームメンバーが最も得意とすること、つまりソフトウェアの構築と出荷に集中できるようにする。