IT Service & Maintenance
本番環境に到達したソフトウェアは、完成したわけではありません。それは、そのライフサイクルのなかで最も長く、最も重大な段階に入ります。そして、うまく運用することは、構築することとは別個の専門分野です。ITサービスと保守は、システムを本番環境で健全に保ちます。すなわち、システムが逸脱したときにそれを検知し、なぜ起きたのかを理解し、迅速にサービスを復旧させ、障害の再発を許す条件を着実に取り除いていくのです。本稿では、運用を、稼働中のソフトウェアに適用されるソフトウェアエンジニアリングとして捉え、信頼性は製品として購入するものでも、方針として宣言するものでもないと論じます。信頼性は、設計され、測定され、勝ち取られるものなのです。
なぜ運用がいまや難題なのか
エンタープライズコンピューティングの歴史の大半において、困難で名誉ある仕事は構築でした。運用は下流のコストセンターであり、システムを動かし続けるために人員を割かれ、止まれば非難される存在でした。その構図は、静かに崩壊しました。システムはいまや標準として分散化され、数十から数百のサービス、サードパーティのAPI、マネージドデータストア、そしてそれ自体がソフトウェアであるインフラから構成されています。顧客にとって意味を持つ挙動は、誰一人として完全に頭のなかで把握しきれないコンポーネント間の相互作用から生まれます。そうした世界では、難題はもはや機能を書くことではありません。稼働している全体を理解し、健全に保つことなのです。
これと並行して、賭け金も上がりました。デジタルサービスはいまや多くの組織が取引を行う主要なチャネルであり、ダウンタイムは失われた収益と損なわれた信頼として直接測定されます。規制当局もこれに気づいています。オペレーショナルレジリエンスは、社内の努力目標ではなく監督上の期待事項へと次第に位置づけられ、重要なサービスをマッピングし、影響許容度を設定し、復旧を証明することが明示的に要求されています。同時に、変化のペースも加速しました。チームは継続的にデプロイし、あらゆる変更が潜在的なインシデントとなります。1日に50回リリースする組織が、四半期ごとの変更審査会に自らを守ってもらうことはできません。
だからこそ、サービスと保守は専門職化を迫られてきました。運用とは、ダッシュボードを見張って反応する人々のローテーションを意味するという旧来のモデルは、この複雑さ、この変化の速度を持つシステムには通用しません。いま重要なのは、次の3つの問いに迅速かつ誠実に答える能力です。すなわち、ユーザーの視点からサービスは健全か、健全でないならなぜか、そしてこの種の問題の再発を止めるものは何か。これらにうまく答えることはエンジニアリングの仕事であり、それを軽んじて扱うことこそ、運用上のほとんどの苦しみの根源なのです。
第一原理:サービスマネジメントとSREの交わり
成熟した運用には2つの伝統が影響を与えており、生産的な姿勢はその両方を保持することです。第一はサービスマネジメントであり、ITILのようなフレームワークで表現され、語彙と一連の規律をもたらします。すなわち、インシデント(サービスを復旧する)と問題(根本原因を取り除く)の区別、定義されたレベルを持つサービスという概念、変更管理と構成管理、そして運用作業は場当たり的に行うのではなく統制されるべきだという考え方です。その強みは構造と説明責任にあります。その失敗のかたちは、機械的に適用されたときに、成果よりもプロセス遵守を最適化する官僚主義に陥ることです。
第二の伝統はサイトリライアビリティエンジニアリングであり、異なる前提から出発します。信頼性は、説いて聞かせる美徳ではなく、設計し、測定し、トレードオフする性質だというものです。SREは、運用をソフトウェアの道具立てで扱うことを主張します。すなわち、バージョン管理された構成、自動化された修復、そしてトイルと名づける手作業で反復的な仕事への絶え間ない攻撃です。その中心的な知的転回は、サービスレベル目標を通じて信頼性を定量化し、完全な信頼性と目標とする信頼性との差を、消費できる予算として扱うことにあります。
両者の和解は、いったん言葉にしてしまえば単純です。サービスマネジメントは組織上の文法を提供します。サービスとは何か、誰がそれを所有するのか、変更とインシデントは説明責任を伴ってどう扱われるのか。SREはエンジニアリングの手法を提供します。実際にどう健全性を測定し、対応を自動化し、どこに投資するかをどう決めるのか。よく運営された機能は、どちらか一方を選びません。役割とライフサイクルに関するITILの明快さを用いて、SREのエンジニアリング実践に永続的な住処を与えるのです。失敗とは、いずれかを教条として採用することです。ITILの機械的な適用はチケットの押し付け合いを生み、組織構造を欠いたSREの素朴な採用は、英雄的な個人と所有者のないサービスを生みます。両者の根底にある第一原理は同じです。運用とは設計されるべきシステムであり、その挙動は観測可能で、測定可能で、意図的に改善されるべきものだということです。
実践が向かっている先
健全なシステムをいかに健全に保つかを、いくつかの動向が作り変えつつあります。最も重大なのは、モニタリングとは区別されるオブザーバビリティの成熟です。モニタリングは、あらかじめ定義した指標をしきい値と照らして監視することで、事前に問うことを思いついた問いに答えます。オブザーバビリティは、事後に新しい問いをシステムに投げかけられるようにする性質であり、豊かで高カーディナリティなテレメトリを発することによって実現されます。すなわち、構造化されたイベント、サービスの境界を越えてリクエストを追跡する分散トレース、そして顧客、リージョン、バージョンごとに切り分けられるだけの十分な次元を持つ指標です。実際的な原動力は、分散システムでは障害モードを予測できないため、まだ想像すらしていない問いのために計装しなければならないという点にあります。
標準化がこれを加速させました。OpenTelemetryは、トレース、指標、ログを生成しエクスポートする共通の方法として登場し、計装を特定のベンダーのバックエンドから切り離し、ITランドスケープを再計装することなくツールを変更することを現実的なものにしました。それと並んで、指標の異常が、それを説明するトレースとログへ直接つながるように、3種類のシグナルを相関づける規律は、願望から期待へと移りました。
第二の潮流は、事後対応型から予測型の運用への移行です。カオスエンジニアリングは、顧客が発見するより先に弱点を発見するために、システムに意図的に障害を注入し、レジリエンスを前提から検証された性質へと変えます。プログレッシブデリバリーは、カナリアリリースとフィーチャーフラグを通じて、あらゆるデプロイを、テレメトリが悪化した瞬間に停止できる実験として扱い、変更とロールバックの距離を縮めます。第三の動向は、機械学習の運用への慎重ながらも現実的な適用です。すなわち、静的なしきい値に頼るのではなく正常な挙動を学習する異常検知、そしてアラートの嵐を単一のありうる原因へとまとめる相関づけです。誠実な評価としては、これらのツールはノイズを減らし候補を浮かび上がらせますが、いまだエンジニアリングの判断を代替するには至っておらず、それらを神託のように扱うことは、オブザーバビリティが取り除こうとしたまさにその不透明さを再導入してしまう、というものです。
運用できるシステムを設計する
信頼性は、インシデントが起きるずっと前に、設計における選択によってその大半が決まります。基礎となる原理は、システムは構築上、観測可能でなければならないということです。計装は、トラブルが訪れたときに後付けで取り付けるものではありません。サービスは、構造化され相関づけられたテレメトリを第一級の出力として発し、単一のユーザーの経路が、それが触れたすべてのコンポーネントを横断して再構成できるような識別子を伴わせるべきです。問い合わせのできないシステムは、運用することができず、ただ推測するしかありません。
第二の原理は、二値的な可用性ではなく、グレースフルデグラデーションを設計することです。よく設計されたシステムは障害を隔離し、1つの依存関係の喪失が全体を崩壊させるのではなく機能を減らすにとどめます。タイムアウト、バックオフとジッターを伴うリトライ、障害のある依存関係を叩き続けるのをやめるサーキットブレーカー、そしてリソースの枯渇を封じ込めるバルクヘッドは、任意の洗練ではありません。これらは、封じ込められた故障と連鎖する障害との違いなのです。ユーザーに面した目標は、部分的な障害が、真っ白なページではなく、劣化した体験を生むことにあります。
第三は、組織化の尺度としてのサービスレベル目標の規律です。優れたSLOは、人々が実際に経験することを反映するサービスレベル指標を通じて、ユーザーの視点から定義されます。すなわち、彼らが決して目にすることのないマシンのCPU使用率ではなく、リクエストが十分に速く、成功裏に処理された割合です。目標はその指標に対する目標値を設定し、目標値と100パーセントとの差がエラーバジェットとなります。これは信頼性を経済的な意思決定として捉え直します。バジェットが手つかずであれば、チームはそれをベロシティに費やし、より速くリリースし、より多くのリスクを取ることができます。バジェットが尽きていれば、同じ測定が、安定性への投資のための一時停止を義務づけます。エラーバジェットは、リリースしたい開発者と守りたい運用者との間の論争を、共有された定量的な合意へと変換します。アラートもまた、これらの目標から導かれるべきです。成熟したパターンは、バジェットが消費される速度に対してアラートを発し、呼び出しが、あらゆる一過性のわずかな乱れではなく、ユーザーへの真の脅威に対応するようにします。
健全なシステムはいかに静かに腐っていくか
アラート疲れは、最も一般的で腐食性の高い失敗です。あらゆる異常が誰かを呼び出すと、エンジニアはアラートを無視することを学び、本当に重要な一件がノイズのなかに埋もれます。原因は、ほとんどの場合、症状ではなく原因に対して、そしてユーザーに見える影響ではなく内部指標に対してアラートを発していることです。治療法は規律です。目標への脅威に対してのみ呼び出し、それ以外のすべては、午前3時に人間へではなく、精査されるべきキューへと振り向けるのです。
パッチ未適用のランドスケープは、怠慢による失敗です。パッチ適用とライフサイクル管理は華やかさに欠け、先送りしやすく、先送りは複利で膨らみます。修復されない脆弱性はすべて攻撃対象領域を広げ、サポート期限を過ぎたまま放置されたコンポーネントはすべて、誰も触れる勇気がなく、誰も安全に更新できないシステムになります。効果的な実践は、パッチ適用を、周期的なプロジェクトではなく、段階的な展開と健全性の検証を伴う継続的で自動化されたフローとして扱い、あらゆるコンポーネントのライフサイクルを追跡して、サポート終了がインシデント中に発見されるのではなく計画されるようにします。
非難を伴う事後文化は、あらゆる障害の最も価値ある産物である学びを、静かに破壊します。レビューが責任を負わせる人物を探すとき、エンジニアは再発を防ぐであろう率直な詳細を差し控えます。障害を、個人の過失ではなくシステムとその安全装置の性質として扱う、非難のない事後レビューこそが、インシデントを永続的な改善へと変換する唯一の確実な方法です。インシデント管理と問題管理の混同は、これに関連する罠です。サービスの復旧はインシデントを終わらせますが、問題を終わらせるわけではなく、フォロースルーに決して人員を割かない組織は、同じ障害を際限なく再体験します。最後に、構成ドリフト、すなわち稼働中のシステムが、文書化されない手作業の変更を通じて、意図され文書化された状態から逸脱していく現象は、あらゆる環境を脆弱な一点物に変え、信頼できる復旧を不可能にします。その解毒剤は、インフラと構成をコードとして定義し、意図された状態がバージョン管理され、監査可能で、再現可能であるようにすることです。
Nashuaのサービスと保守へのアプローチ
Nashuaは運用をエンジニアリングの専門分野として扱い、そのエンゲージメントは、クライアントを事後対応の火消しから、測定され改善可能な信頼性へと移行させるように組み立てられています。出発点は常にアセスメントです。すなわち、ITランドスケープが実際にどう稼働しているかを理解し、ビジネスにとって重要なサービスをマッピングし、どこでオブザーバビリティが手薄か、どこでトイルが多いか、どこでライフサイクルのリスクが蓄積してきたかについて誠実に向き合うことです。これは、サーバーのカタログではなく、ユーザーの経験に根ざした像を生み出します。なぜなら、それこそが分別ある優先順位を導き出せる唯一の視点だからです。
そのベースラインから、Nashuaはシステムを観測可能かつ測定可能にすることに取り組みます。それは、指標、トレース、ログを相関づけるテレメトリを実装し、クライアントが単一のバックエンドに固定されないようオープンな標準を優先し、そのテレメトリを用いて実際のユーザー成果を反映するサービスレベル目標を定義することを意味します。目標が定まれば、エラーバジェットは、変更と安定性という永遠の緊張について、組織に共通言語を与え、アラートはノイズではなく真の脅威を中心に再構築できます。並行して、Nashuaはシステムを長期にわたって健全に保つ運用のループを確立します。すなわち、サービスを迅速に復旧するインシデント対応、再発する原因を取り除く問題管理、各事象を改善へと変える非難のないレビュー、そして先送りされたプロジェクトではなく継続的で自動化されたフローとして管理されるパッチ適用とライフサイクルです。
一貫した狙いは、自動化を通じてトイルを減らし、その実践をクライアント自身のチームに根づかせ、能力がエンゲージメントを超えて残るようにすることです。Nashuaの姿勢は、目標はツールやフレームワークを導入して立ち去ることではなく、自らの信頼性を測定し、自らの障害を理解し、外部からの促しなしに改善する機能を後に残すことにある、というものです。信頼性エンジニアリングは、一度きりの成果物として納品されるのではなく、働き方として移譲されるのです。
Nashuaが違いを生むところ
Nashuaが引く区別は、購入としての信頼性と、能力としての信頼性の間にあります。ツールは購入でき、フレームワークは採用できますが、そのいずれもそれ自体では健全なシステムを生みません。両者とも、正しいものを計装し、誠実な目標を設定し、テレメトリが明らかにするものに基づいて行動するというエンジニアリングの判断がなければ、不活性です。Nashuaの貢献はその判断であり、厳密さをもって適用され、意図的に移譲されることで、その実践が外部プロバイダーへの依存ではなく、クライアント自身のものになるようにします。
また、作業が何を前提としてよいかを変える、実際的な帰結もあります。エンゲージメントが、まだ存在しない能力を必要とするとき、それは調達サイクルやベンダーのロードマップを待つ必要がありません。enterprise platformは、エージェンティック・エンジニアリングを通じて、ほぼあらゆる機能を速いペースで受け入れられるように構築されています。すなわち、必要なものを平易な言葉で記述し、迅速に生成しますが、常に確固としたアーキテクチャ原則の範囲内で、厳格な品質保証のもとに行われるため、速さが決して一貫性、セキュリティ、統制を犠牲にすることはありません。その効果は、単に便利というより戦略的です。それは自製か購入かの境界線を動かし、選択肢を保つコストを低く抑え、アーキテクチャが戦略に従うことを可能にします。戦略が、たまたま棚にあったものに合わせて曲げられるのではなく。
うまく運営された運用と苦戦する運用とを最終的に分けるのは、いかなる単一のツールの洗練度でもなく、全体の一貫性です。すなわち、実際の問いに答えるオブザーバビリティ、信頼性を意図的な選択にする目標、学習するインシデントと問題のループ、そしてITランドスケープが静かに朽ちるのを決して許さないライフサイクルの規律です。Nashuaの役割は、その一貫性をクライアントとともに構築し、そして一歩下がって、自らのシステムを本番環境で健全に保つことをエンジニアリングの日常として行う組織を後に残すことです。それが、本番環境で生き延びることと、そこで自信をもって運用することとの違いであり、Nashuaが存在する理由となる違いなのです。
