# Google SRE Workbook - Chapter 7: Simplicity ## 要約 本章は、SRE にとっての単純さを「信頼性を高め、修復を速くし、理解・保守・試験を容易にする設計目標」として扱う。単純さはコードだけの性質ではなく、システムアーキテクチャ、設定、デプロイ、監視、運用プロセスにまたがるエンドツーエンドの性質である。章前半では循環的複雑度のようなコード指標と、システム複雑性の代理指標を対比し、オンコール習熟時間、説明時間、設定方式の多様性、デプロイ構成の多様性、システム年齢を挙げる。中盤では、SRE が本番システム全体を見る立場にあるため、複雑性という外部性を見つけて抑制しやすいことを示す。後半では、Borg から Omega への置換計画、広告配信スタックの統一、共通マイクロサービス基盤、pDNS と Svelte の循環依存解消を通じて、全面リライトよりも段階的な標準化・統合・依存削減が有効な場合を示す。 ## 主要主張 - 単純なソフトウェアは壊れにくく、壊れたときも修復しやすい。単純さは信頼性の副次効果ではなく、SRE が直接追求すべき運用設計目標である。 - コード複雑度は比較的測れるが、分散システムの複雑度は厳密に測りにくい。したがって「新人がオンコールに入るまでの期間」「全体像を説明する時間」「設定・バイナリ・フラグ・環境の多様性」「API 利用者が実装詳細へ依存していく時間経過」を代理指標にする。 - 複雑性は外部性である。新機能や局所最適の導入者が費用を負担せず、あとから運用する SRE や隣接チームが認知負荷・障害リスク・移行費用を払う。 - SRE はサービス境界を越えた依存関係、共通監視、容量、設定、デプロイ経路を見るため、単純化の推進役になれる。 - 一見単純な汎用 API は、型・互換性・文書化の費用を呼び出し側へ移すことがある。Protocol Buffers や Apache Thrift のような構造化型は局所的には複雑でも、エンドツーエンドでは単純になる。 - Borg から Omega への全面移行は、移動標的への追従、改善見積もりの誤り、数百万行の設定移行、二重運用の費用により難しかった。結果として Omega の発想を Borg と Kubernetes に還元した。 - 単純化は削除と標準化で進む。重複データ参照、増幅するリトライ、多段の循環依存、設定方式の乱立は「システムスメル」であり、図示と標準化により発見・削減できる。 - 単純化をキャリア上報われる作業にしなければ、開発者も SRE も着手しない。単純化用の時間枠、削除への称賛、横断的な少人数ローテーションが必要である。 ## SRE Book との関係 - [[@2016__OReilly__SRE Book - Chapter 5 Eliminating Toil]] のトイル削減を、作業削減からシステム構造の削減へ拡張する章である。 - [[@2016__OReilly__SRE Book - Chapter 7 Automation at Google]] の自動化観と接続するが、自動化以前に対象システムを単純化し、標準化する必要を強調する。 - [[@2016__OReilly__SRE Book - Chapter 18 Software Engineering in SRE]] の「SRE がソフトウェアエンジニアリングで運用問題を解く」という主張を、複雑性外部性の統治として具体化する。 - [[SRE Book]] が原則を示したのに対し、本章は広告配信、Borg/Omega/Kubernetes、pDNS/Svelte などのケースで実務判断を補う。 ## 概念候補 - [[システム単純化]] - [[複雑性外部性]] - [[システムスメル]] - [[循環依存]] - [[設定標準化]] - [[共通マイクロサービス基盤]] - [[プラットフォームエンジニアリング]] ## 実体候補 - [[John Lunney]] - [[Robert van Gent]] - [[Scott Ritchie]] - [[Diane Bates]] - [[Niall Murphy]] - [[Mike Curtis]] - [[Google]] - [[Borg]] - [[Omega]] - [[Kubernetes]] - [[Protocol Buffers]] - [[Apache Thrift]] - [[AdMob]] - [[AdSense]] - [[DoubleClick]] - [[pDNS]] - [[Svelte]] ## 統合時の更新候補 - [[SRE]]: SRE の役割に「複雑性外部性の抑制者」を追加する。 - [[トイル]]: トイル削減と単純化の違いを追記する。トイルは反復作業の削減、単純化は認知負荷と構造的依存の削減である。 - [[プラットフォームエンジニアリング]]: 共通マイクロサービス基盤と段階的標準化を、内部開発者基盤の前史として接続する。 - [[インターネットスケールサービス設計]]: 循環依存、リトライ増幅、重複データ参照を設計上の失敗パターンとして追加する。 - [[Google]]: Borg/Omega/Kubernetes と広告配信統合の SRE 事例を追加する。 ## 出典 - John Lunney, Robert van Gent, Scott Ritchie, Diane Bates, Niall Richard Murphy. "Simplicity." In *The Site Reliability Workbook: Practical Ways to Implement SRE*. Google / O'Reilly Media, 2018. https://sre.google/workbook/simplicity/