サイト信頼性エンジニアリング(SRE)は、インフラおよび運用上の問題にソフトウェア エンジニアリング プラクティスを適用することで、非常に拡張性が高く信頼性の高いソフトウェア システムを作成するためのエンジニアリング分野です。プロのサイト信頼性エンジニアは、開発チームと運用チームのバランスを取りながら自動化やソフトウェアの開発方法など組織の目標レベルに合わせた信頼性システムのツールやチームの対応策を生み出すことができます。この役割の道を開いたのはGoogleです;詳細については、 Google eブック『Site Reliability Engineering』を参照してください。
まとめると、サイト信頼性エンジニアリングとは、インフラや運用上の問題にソフトウェアエンジニアリングのプラクティスを適用しているというわけです。
サイト信頼性エンジニア(SRE)は開発(Dev)と運用(Ops)の間にいる存在ですが、必ずしもDevOpsそのものとは重なりません。SREの概念は2003年頃から存在しており、その意味ではDevOpsよりも古いと言えます。SREという用語は、Googleのサイト信頼性チームを立ち上げたBen Treynor氏によって広められました。Treynor氏によると、SREは「ソフトウェア エンジニアがいわゆるオペレーションを命じられたときの業務」です。
DevOpsとSREのいずれの分野も、アプリケーションのライフサイクル全体を通じて、開発(Dev)と運用(Ops)がお互いのプロセスを把握できるように支えることで、リリースサイクルを強化することを目的としています。また、自動化と監視を推奨し、開発者が変更に向けて作業を開始してから、運用環境に導入されるまでの時間を短縮します。サイト信頼性エンジニアリング(SRE)とDevOpsは、コードや製品自体の品質を損なうことなく、この結果を実現することを目指します。
サイト信頼性エンジニアリング(SRE)とDevOpsは、異なりつつも同程度に価値のある2つの切り口で考えます:
DevOpsは何をすべきかを考えます。
そして、サイト信頼性エンジニアリング(SRE)はどのようにすべきかを考えます。
サイト信頼性エンジニアリング(SRE)は、サービスレベル指標(SLI)とサービスレベル目標(SLO)を測定する一方、DevOpsチームは失敗率と成功率を継続的に測定します。DevOpsが柱として掲げる次のインフラ改善項目について、責任を共有しています。サイト信頼性エンジニアリング(SRE)はSLIとSLOに基づいてパフォーマンスを評価し、システムの安定性と信頼性を確保するための取り組みをしています。これらにより、サービスや品質のパフォーマンスを向上させることができるのです。
サイト信頼性エンジニアリング(SRE)は企業のサイロ化の状況について議論することはありませんが、周囲にその問題について議論するよう促します。サイト信頼性エンジニアリング(SRE)は、企業横断的にツールとテクニックを使用して、すべての従業員にサイト信頼性エンジニアリング(SRE)における当事者意識を与えることで、この議論は実現します。
サイト信頼性エンジニアリング(SRE)は、エラーや障害そ最小限に抑えることができます。SLIスコアとSLOスコアを使用して、システムの健全性を監視し、問題が発生した場合には迅速に対処できるのです。
サイト信頼性エンジニアリング(SRE)は、エラーや障害を解決するために、SLIスコアとSLOスコアを利用して積極的に活動しています。SLIスコアは、さまざまな指標を使って要求ごとに障害数を計算できます。たとえば、要求のレイテンシ(応答時間)、1秒あたりの要求のスループット(処理能力)、または1回の要求あたりのエラー数などが含まれます。これにより、システムのパフォーマンスや信頼性に関する具体的なデータを把握することができ、データを分析して障害の原因や問題点を特定するための手がかりを得るのです。
サイト信頼性エンジニアリング(SRE)は変化をもたらすために仕事をしていますが、その変化はゆっくりと系統だった方法で行われます。企業はスピードを重視するため、頻繁に製品アップデートをリリースするよう要求します。そこで、DevOpsとSREは迅速に対応しつつも、安定して制御されたペースを維持しなければなりません。
DevOpsとSREは、変更管理に基づいたベストプラクティスをうまく活用し、変更による影響を最小限に抑えるように働きかけます。
リリース前には、何度も度重なるテストが繰り返され、新機能やシステムアップデートの歳に加わる影響を予測して、問題が発生した場合には円滑に対応することができるというわけです。
手作業を取り除くことで、開発者や運用担当者に価値を提供する範囲内で、自動化を進めます。各部署で取り扱うツールを統合し、シームレスな作業フローを生み出します。共通のツールやプラットフォームを導入することで効率的な作業が可能になります。
サイト信頼性エンジニアリング(SRE)では問題の早期検知や自動回復ができ、障害が発生する前に問題を特定して、対応策を講じることができるからです。自動スケーリングは、負荷分散の仕組みを導入することで、システムの性能を最適化し、適切なリソースを割り当てることができるからといえます。
サイト信頼性エンジニアリング(SRE)チームは、すべてが正しい方向に進んでいることを確認するために様々な方法を取り組んでいます。例えば、様々なシナリオにアラートを設定したり、ピアのコードレビューを推進したり、ユニットテストを使用したりすることで、サイト信頼性エンジニアリング(SRE)はコード品質と安定性の向上を図るために、ピアのコードレビューを推進することができます。コードレビューでは、チームメンバーがお互いのコードを評価し、バグや潜在的な問題を特定し、品質の向上やベストプラクティスの共有が促進されます。
サイト信頼性エンジニアリング(SRE)とDevOpsは、成功や失敗を測定し、すべてのアプリケーションにおいて持続的な信頼性を確保することを目指しています。信頼性は単にインフラの問題ではなく、アプリケーションの品質、パフォーマンス、セキュリティなどすべての段階に関わります。SREは、ソースコードから導入までの全プロセスに対応し、開発と運用の真の橋渡しとして評価されています。サイト信頼性エンジニアリングとは、成功や失敗の測定方法と、アプリケーションの継続的な信頼性確保の手法を理解するための分野であることがおわかりいただけたでしょうか?
これらの分野は相互に重複しながらも、それぞれ独自の貢献を行い、テクノロジーランドスケープの変化に対応して進化していきます。