SRE (Site Reliability Engineering:サイト・リライアビリティ・エンジニアリング)は、システムの信頼性を最も重要視する考え方です。信頼性という一丁目一番地に加えて、システムの可用性向上、および運用コストの削減の2つを加えた3つがSREという考え方の土台になります。
よく出てくる疑問が、SREのSについて、「なぜSiteなのか?Systemではないのか?」というものです。SREは、2000年代初頭にGoogle社がエンジニアに業務設計を任せた際に実施された手法が体系化されたものです。当時はGoogleなどの大規模なインターネットサービスについて、一律に「Webサイト」として認識されていたため、Siteと名付けられました。この手法が広く使われるようになり、現在では企業全体のシステムに適用されるようになりましたが、名称はそのまま使われています。
SREの本質を考えるにあたり、重要なポイントがあります。それは、「手作業で解決してきた業務」を「ソフトウェアの問題」として捉え直すというアプローチです。具体的には、ソフトウェア開発の手法やノウハウをIT運用に適用し、手動で行われていた運用作業をソフトウェア化します。これは、自動化を推進することと同義です。その上で、サービスの信頼性や健全性を可視化します。さらに、ソフトウェアエンジニアとIT運用チームの連携を強化します。
SREは、ソフトウェア開発とインシデント対応のライフサイクルの信頼性を確保することによって顧客価値を創出し、以下のメリットをもたらします。
すべてのSREプラクティスはシステムの信頼性を向上させることを目的としており、次の5つの主要なカテゴリに分類されます。
この取り組みの大きな部分を占めるのがデプロイ環境の整備です。これは、エンジニアと協力しながら新しいサービスのオブザーバビリティを確保するための活動です。これによって信頼性に関わる問題に対してよりプロアクティブかつ迅速なアプローチをとることができます。
SREを語る際に、よく取り上げられるのが「4つのゴールデンシグナル」です。これは、分散システムを効果的に監視するためのフレームワークの1つで、システムが健全であることを示すベンチマークです。それぞれについて見ていきましょう。
SREでは、これらを継続的に監視します。基準を下回ったサービスを改善し続けることで、サービスの信頼性を維持し、パフォーマンスを一定のレベルに保つことを目指します。
SREはDevOpsの活動と密接に連携しており、開発チームと運用チーム間には緊密なコミュニケーションが必要です。そのためこれらのチームが成功するには、信頼、連携、継続的改善の文化が不可欠です。
また、SREエンジニアは、開発と運用のスキルを兼ね備えていることはもちろん、従来のソフトウェアエンジニアリングのツールとプラクティスを理解している必要があります。システムを包括的に把握することに加え、信頼性を高めるための新しい方法を取り入れる柔軟性も必要とされます。
さらに、SREには積極的なコミットメントが求められます。これは、単にツールやパッチを適用してシステムの欠陥を修正する作業ではありません。SREに求められているのは、文化を変えることや、運用に関する新しいプロセスや考え方を導入することです。他の取り組みと同様に、SREも最初は1人の推進者から始まるかもしれませんが、SREのプラクティスを成熟させていくためには、最終的に上層部からの賛同が必要となります。
SREとDevOpsは、どちらも開発スピードを高めながらソフトウェア品質を向上させるための開発手法です。しかし、それぞれが最も大切だとしている点には、違いがあります。SREは大規模かつ複雑なシステムの信頼性を高めることが第一の目標であるのに対し、DevOpsは開発と運用の連携を促進するカルチャーの確立を主な目的としています。
両者には数多くの共通点もあります。たとえば、KPIの設定によるシステムパフォーマンスの可視化、信頼性と可用性の向上への取り組み、システムの継続的な改善などが当てはまるでしょう。ただし、それらを実現するためのアプローチには微妙な違いがあります。
SREのアプローチは、システムの自動監視、問題の自動検出、アラートの自動発信など、システムを自動化することで、問題解決能力を高めることに注力します。インフラ改善や自動化ツールの開発・活用を通じて、システムの信頼性向上を目指すことになります。
一方、DevOpsでは、開発と運用のギャップを埋めることで、迅速かつ柔軟なソフトウェアリリースを実現しようとします。そして、そのために、CI/CD(継続的インテグレーション/継続的デリバリー)をうまく使いこなすことが重要になります。
つまり、システムの信頼性向上を最優先するSREに対し、DevOpsは開発のスピードアップを第一に考えるわけです。とはいえ、両者は決して対立するものではありません。前述したようにSREはDevOpsの活動と密接に連携することで目標を達成しやすくなることを理解しておいてください。
DevOpsにおけるSREの役割は、DevOpsチームが開発したアプリやサービスをエンドユーザーが必要なときにいつでも使用できるようにしておくことです。SREとDevOpsは一括りに語られることが多いですが、これらは2つの異なる分野です。
DevOpsは、プラクティスとして、また一連の原則としての両側面から認識されています。プラクティスとしてのDevOpsは、ITデリバリーのためのアプローチであり、人、手法、ツールを連携させることで、開発チームと運用チームのサイロ化を解消します。
DevOpsは、その名前が示すように、アプリケーションのコードを作成するソフトウェア開発(Dev)と、それらのアプリケーションを本番稼働させてエンドユーザーに提供し、信頼性の維持を図るIT運用(Ops)との間を隔てるギャップを埋めることを目的としています。
原則としてのDevOps(DevOps文化)は、アジャイルの普及により生まれたものです。アジャイルは、段階的なデリバリー、チームコラボレーション、継続的な計画と学習に焦点を当て、より優れたソフトウェア開発プラクティスを導くための原則を確立しました。ソフトウェア開発とIT運用を連携させることで、DevOpsはソフトウェア開発ライフサイクル(SDLC)全体にわたってアジャイルの原則を拡張し、継続的な改善を目標としてワークフロー全体を最適化します。DevOpsがうまく機能すると、コーディングの反復と導入が迅速化するだけでなく、新しいアイデアを市場に投入するまでの時間が短縮され、バグが減少し、インフラの安定性が向上します。
SREは、DevOpsの原則において重要な機能を果たしており、プラクティスとしてのDevOpsとも重なる部分が多いものの、責任範囲はより限定的です。DevOpsでは、開発者が実際に製品のオーナーシップを持って運用することが求められます。しかし、開発者は絶えずアプリの新機能を開発しなければならないため、そういった取り組みが現実的ではない場合がほとんどです。
SREエンジニアは、ソフトウェア開発とIT運用の両方の知識を活かして、デプロイ、設定、監視などのコードの管理を監督できます。大まかに言うと、SREは新しいソフトウェアや機能の迅速なデプロイ、およびITインフラの安定性を確保することで、開発と運用間の関係を強化します。
自動化による反復的な手作業の削減は、SREが重点的に取り組むべき課題です。そのために、SREエンジニアは、ログ分析やパフォーマンス調整などの多くの自動化された運用タスクを活用しています。また、自動化は、MTTR (平均修復時間)の短縮、ダウンタイムやシステム停止による影響の軽減、さらには監視やアラート、パッチ適用などのインシデント対応アクティビティのための詳細なコンテキストを提供するためにも欠かせません。
自動化は、スピード、一貫性、効率、適応性が重要視される最新の開発環境では必須といえます。そして、最も重要なポイントは、日常業務の反復的な運用タスクの数が減り、SREチームのメンバーが新しいツールの作成、インフラの変更の監視、信頼性向上のためのその他のタスクの実行に集中できるようになることでしょう。
SREを効果的に実践するには、システムについて、またそれらがどのように連携しているかについて包括的な視点を持つことが必要です。SREエンジニアは、システムを全体的に捉え、個々のコンポーネントだけでなく、それらの相互接続も重視しなければなりません。これを踏まえ、『The Site Reliability Workbook』に記載されている以下の7つの原則に従うことで、効果的にSREを実践することができます。
SREエンジニアは、さまざまな責任を担っています。SREの一般的な役割には次のものがあります。
ここ数年、生成AIが大きな注目を集める中、SREとLLMを組み合わせることで、より高度な成果が期待できるのではないかという議論が深まってきています。
まずは、ナレッジの管理について。過去のインシデント情報や障害対応履歴などをLLMに学習させることができそうです。エンジニアに、これらの情報を網羅的につかんでいる生成AIと対話しながら仕事を進めてもらうことで、業務のスピードと確実性を向上させることが期待できます。
ログやイベント、アラートなどのデータを学習させると、障害管理の自動化が進むかもしれません。この部分は、自社のシステム/ネットワーク環境に特化した情報が必要になる領域が広いため、過去の情報をどのように学習させるべきかという議論も行われています。
最終的には、LLMを使ってSRE分野における予測分析をできるようになることが理想とされており、多くの議論はその方向で進められているようです。
稼働時間を長くして維持することは、あらゆる組織が取り組み続けている課題です。しかし、効果的なSREプロセスを有する企業はシステムの回復力が高く、その結果としてリリースの成功率も向上するため、競合他社よりも優位に立つことができます。インシデントが発生した場合でも、短い平均確認時間と平均修復時間(MTTA/MTTR)で対応できます。本番環境の問題の修正に要する時間が減ることで、開発、SRE、運用のすべてのチームは、それぞれの分野でビジネス価値の提供に注力できるようになります。その結果、信頼性はソフトウェア開発を滞らせる要因ではなく、ソフトウェア開発における機能の1つとなるのです。
Splunkは、SREに対して、高い付加価値を提供できるソリューションを提供しています。Splunkを使えば、オンプレミス環境、クラウド環境、ハイブリッド環境を問わず、あらゆるシステムから生のデータをリアルタイムに収集できます。データは、直感的に理解しやすいビジュアルなダッシュボード上でリアルタイムに分析・可視化することが可能。大規模かつ複雑なシステム環境における実績も十分です。
Splunkを活用することで、システム全体を可視化し、高い信頼性を担保できます。そして、Splunkは効率的な開発・運用を実現することにも役立ちます。システムの規模や複雑さ、Splunkは、SREというアプローチを取り入れるすべてのプロジェクトを強力にサポートすることができます。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。