高速なリリースサイクルと安定稼働を同時に実現する。そんな難題に応えるエンジニアリング手法として注目されているのが「SRE(Site Reliability Engineering)」です。
ここでは、SREの基本やDevOpsとの違い、必要な指標などを解説します。さらに、SREを担うSREエンジニアや、SREチームについても解説します。
SRE(Site Reliability Engineering)は、Googleが提唱したシステム管理およびサービス運用手法です。信頼性をシステムにおける重要な機能の一部に位置づけ、さらにコード化することで自動化と標準化を行います。
手作業を減らすとともに運用タスクの再現が可能になり、結果としてヒューマンエラーや属人化を抑えつつ、頻繁なリリースと安定運用を両立させられるようになります。
2000年代半ばにGoogleが提唱して以来、クラウドの普及やアジャイル開発の台頭とともに広がり、今では大規模サービスだけでなく中小規模のプロダクトでも欠かせない考え方となりました。
近年、開発のスピードが非常に重要になっています。ウォーターフォール開発では半年以上かけて構築してきた機能を、アジャイル開発では数週間でリリースするほどの違いがあります。
しかし、開発スピードが早まるほど運用側の負担は増え、品質を保つことが難しくなります。DXやマイクロサービス化によってシステムの構成は複雑になりつつあるにもかかわらず、手戻りの発生がビジネス機会の損失に直結する状況です。
SREはこうした状況を改善するための手法として求められました。自動化することで手作業を減らし、スピーディーかつミスの少ないリリースが可能になります。
SREとDevOpsは、どちらもチーム間の壁をなくし自動化を推進する点で共通していますが、DevOpsは「理念」、SREは「エンジニアリング手法」としての位置づけであることが相違点といえます。
Googleの言葉を借りれば「class SRE implements DevOps(SREはDevOpsというインターフェイスの実装である)」という関係です。
SREを導入することで、運用タスクの標準化と自動化が進み、手作業が減ります。ヒューマンエラーが抑制されることで障害の発生を減らし、障害時の修復時間も短縮できるでしょう。
SREでは、継続的な監視によって、稼働率やレイテンシの低下を早期に検知し、その影響を最小化できます。開発チームは安定稼働を維持しながら改善に注力できるため、継続的なリリースと高品質な運用の好循環を実現できます。
SREは「測れないものは改善できない」という前提に立ったエンジニアリング手法です。信頼性を数値で示し、許容範囲と達成目標を決めた上で、継続的なモニタリングを行います。
そのモニタリング指標として、SLI(Service Level Indicator)、SLO(Service Level Objective)、SLA(Service Level Agreement)の3つが挙げられます。それぞれ解説します。
SLIは「Service Level Indicator」のことで、日本語ではサービスレベル指標という意味です。
サーバーの稼働率や、レイテンシ、スループットなどがSLIに該当します。これらをリアルタイムで計測することでシステム状態を客観的に把握できます。
SLOは「Service Level Objective」のことで、日本語ではサービスレベル目標という意味です。
例えば、「四半期あたりの稼働率99.99%以上」や「1週間のエラー率1%未満」などがSLOの典型的な例で、達成できない場合は原因解析・改善を行います。開発スピードと信頼性のバランスを調整する安全弁となります。
SLAは「Service Level Agreement」のことで、日本語ではサービスレベル契約という意味です。
顧客とベンダーが契約する際にSLAを定めますが、仮にサービスレベルがそれに満たない場合、罰則が発生することもあります。そのため、ベンダーはSLAを満たすよう努めます。
SREチームは、開発チームと運用チームの橋渡しとなります。チームのあり方は企業・組織により異なり、携わるプロダクトによっても異なります。また、プロダクトを横断するケースもあります。
基本的な役割は、「新機能の迅速なリリースを妨げずに、サービスの信頼性を維持・向上させること」となるでしょう。運用作業の自動化や、障害時の対応手順の整備、問題発生時の根本原因分析などです。
組織はSREチームを「何でも屋」にしないため、課題と責任範囲を明確にし、計測とフィードバックの好循環を作る必要があるといえるでしょう。
システム開発領域におけるSREチームの代表的な役割は次のようなものです。
・サーバー / ネットワーク構築
・OS・ミドルウェアの選定と最適化
・データベース構築
・セキュリティの導入
・開発工程の自動化
インフラの構築から、セキュリティ導入、そして自動化まで幅広く携わり、リリース頻度を高めつつ、品質を保つ体制を整えます。
システム運用領域におけるSREチームの代表的な役割は次のようなものです。
・サーバー / ネットワーク運用
・障害発生時の対応
・運用環境の改善
運用領域においては、インフラの保守・管理や、バグやエラー、障害が発生した際の対応を行います。また、運用環境の継続的な改善も重要な業務です。さらに、状況に応じて負荷分散装置の導入なども行います。
SRE(サイト信頼性エンジニアリング)を担うITエンジニアを、特に「SREエンジニア」と呼びます。開発チームと運用チームの橋渡し役となる、フルスタック運用開発者とも呼べる存在です。
SREエンジニアは、インフラ構築からCI/CD設計、運用、監視、障害対応まで幅広く携わり、システムの成長とともに信頼性を継続的に改善していきます。
一般的なインフラ管理者と異なるのは、自動化の実装や、信頼性を数値で語ることが職務の中心に据えられている点です。
SREエンジニアに必要とされるスキルとして、次のようなものが挙げられます。
・インフラ設計・運用経験
・プログラミングやスクリプトによる自動化スキル
・ネットワークおよびセキュリティの知識
こうした実務的な知識・スキルに加えて、開発チームと運用チームを橋渡しするコミュニケーション能力も求められます。また、KubernetesなどのコンテナオーケストレーションやObservabilityツールの実装経験があると、より活動の幅が広がるでしょう。
SREに特化した国家資格はありませんが、次のような資格を持っていると、必要なスキルの証明になります。
https://www.exin.com/ja/agile-devops-lean/exin-devops/exin-devops-professional/
DevOpsに関する専門的な知識を証明する資格です。SREエンジニアにはDevOpsの知識が必須となるため、取得が望ましい資格といえます。
ネットワーク機器の大手、Cisco(シスコ)が運営する資格です。シスコのプラットフォーム上に構築されたアプリケーションの開発・運用に関するスキルを証明できる資格です。
クラウドサービスに関する、「AWS認定」や「Microsoft DevOps Solutions」、「Professional Cloud Architect」などを取得することで、知識・スキルの証明になるとともに、業務に役立つ知識が得られます。
サーバー用OSとして最大のシェアを誇る「Linux」に関する資格です。サーバーの構築・運用・管理に必要なスキルを証明できます。
SREは、信頼性を機能の一部と捉えて自動化と標準化を進めることで、ヒューマンエラーを削減しつつ継続的なリリースを可能にする手法です。
SREを導入し、開発と運用の橋渡しを担うSREチームを設けることで、プロダクトのリリースの早さと品質を両立できます。信頼性向上と効率化を同時に実現したい組織にとって、取り組む価値の高いアプローチといえるでしょう。