Introduction
SREは、サイト信頼性エンジニアリングのことを指しています。システム開発の運用フェーズにおいて、ツール類を使用してシステム管理や問題解決、運用業務を自動化する仕組みのことです。システム開発で、運用フェーズに移行するまでの作業の信頼性を高めることで、システム全体の品質の向上につながります。
この記事では、SREとは何か、SREの指標、DevOpsとの違い、SREで実現できることなどについて解説します。
目次
SREとは?
SREとは「Site Reliability Engineering」の略で、サイト信頼性エンジニアリングと訳されます。システム開発の運用フェーズで、ツール類を使用してシステム管理や問題解決、運用業務を自動化するものです。
ここでは、SREについて詳しく解説します。
SREとはシステム運用の信頼性を高めるためのアプローチ
SREとは、信頼性の高い本番環境システムを実行するための、システム管理とサービス運用へのアプローチです。Google社が提唱したもので、システムの信頼性を重要な機能として位置づけている点が、従来のアプローチとは異なります。
これまで運用チームは、ほとんどのタスクを手作業で行ってきました。運用のタスクは、ハードウェアやソフトウェアの初期設定、設定の変更、バックアップなど多岐に渡ります。
作業をするのが個人であるため、仮に運用経験を積んで高いスキルを取得した精鋭部隊が育ったとしても、業務の属人化が進むだけで、組織として安定した品質を保っているとはいえない状態です。
このような運用作業を整理して標準化し、ツールを用いて自動化しようというのがSREの考え方です。
現在はクラウドコンピューティングが浸透して、運用タスクを自動実行できる基盤が揃ってきています。そこに運用の知識とコーディングのスキルをあわせもったSREエンジニアが主導して、作業の自動化を進めていきます。
運用作業が標準化され自動化されることで、作業の効率と信頼性が向上して、安定してスピードと品質に優れた運用が可能になります。
GoogleからSREが提唱された背景
SREがGoogle社によって提唱された背景には、システム開発におけるスピードと信頼性の両立が求められていることがあります。近年ではシステム化が加速し、新しい機能の追加やバージョンアップなどが頻繁に行われています。そのため、開発から運用までの流れに、スピードと信頼性が求められるようになりました。
システム開発のスピードアップと信頼性の向上を両立するのは、非常に困難です。スピードをあげると品質が下がり、品質をあげるために確認フェーズを増やすとスピードは下がってしまうためです。
とくに、開発から運用に移行するフェーズにおいてのスピードが課題となっています。本番環境をつくる過程であるためにミスはできませんが、開発が終わっているものをリリース待ちで長期間寝かせておくわけにもいきません。このデプロイメントフェーズをスピーディーに信頼性をもって実施する必要があります。
そこで、SREを導入すれば、開発から運用までの流れにおいて、スピードと信頼性の両立が可能です。開発から運用の業務の流れを自動化することで、スピードアップと信頼性の向上を実現できるでしょう。
SREが重要視されている理由
SREが重要視されている理由として、従来のウォーターフォール型開発から、アジャイル型開発への転換が進んでいることがあげられます。このアジャイル開発とSREがとても相性のよい組みあわせになります。
ウォーターフォール型開発とは、最初にシステムの要件や仕様を固めてから、設計、実装、テスト、運用を進める開発手法です。開発スケジュールをある程度確定させることが可能なので、プロジェクトを進めやすいというメリットがあります。開発期間も半年や1年かけるケースも多く、運用の準備も時間をかけて行うことができました。
一方、アジャイル型開発とは、1週間から2週間という短いスパンの開発を繰り返す開発手法です。追加する機能ごとに開発を進めて何度もリリースするため、ユーザーの要望をとり入れやすく、仕様変更しやすいメリットがあります。企業の競争力を高めるためには、ユーザーの要望にスピーディーに対応していくことが重要なので、アジャイル型開発にとり組む企業が増えています。
しかし、アジャイル型開発を導入すれば、自動的にユーザーの要望をすばやくとり入れられるわけではありません。アジャイル型開発によって短いスパンで開発ができたとしても、それを運用にのせてリリースするまでに時間がかかってしまっては元も子もありません。SREを活用することで、開発から運用までのデプロイメントフェーズをスピーディーに、高い信頼性を保ちながら繰り返し実行できることが求められます。
SREの実践にあたって重要な指標
SREを実践する際には、サービスの信頼性を保つための指標を決めて、継続してモニタリングすることが必要です。そうすることで、どの程度の信頼性を保つべきかを明確にできます。
ここでは、SREにおける信頼性の指標についてご説明します。
SLI
SLIとは「Service Level Indicator」のことで、サービスレベル指標という意味です。具体的には、サービスの稼働率、サービスのレスポンス、システムのスループットなどを指標とします。
SLO
SLOとは「Service Level Objective」のことで、サービスレベル目標という意味です。
たとえば、サーバーの稼働率をSLIとして定めた場合、「一定期間内の稼働率を99.99%以上とする」などの具体的な値がSLOにあたります。このように、具体的に定めた目標値を達成することを信頼性の定義とします。
SLA
SLAとは「Service Level Agreement」のことで、サービスレベル契約という意味です。システム開発や運用を行うベンダーと、顧客の間で交わすサービスレベルに関する合意のことです。
顧客がベンダーに仕事を依頼する際に、SLAを定めて契約を交わし、ベンダーはその契約どおりの信頼性を保つために業務を行います。
信頼性を保つという作業は、明確な指標がなければ達成することは困難です。どこまでシステムや作業の品質を高めればよいかというラインが決まっていなければ、どこまで対応すればよいかわかりません。そこで、上記のとおり、稼働率やシステムのスループットなどの目標値を明確に定め、契約を交わします。そうすることで、求められる信頼性が明確になるのです。
もちろん、信頼性が保てないような兆候が発生した場合は、即座に対応が必要です。SREでは、SLIの監視を自動的に行い、対応が必要な事象が発生したら即時にアラートを発出します。また、機械的に対応できるような事象であれば、自動でその対応を実行するような仕組みもとり入れます。
SREとDevOpsの違いとは?
SREとよく似たものにDevOpsがありますが、両者の違いは何なのでしょうか?ここでは、DevOpsとは何か、両者の違いについて解説します。
DevOpsとは?
DevOpsとは、開発チームと運用チームが作業を円滑に行うための仕組みです。DevOpsは「Development and Operations」の略語で、開発(Development)と運用(Operation)を組みあわせたものです。
システム開発が完了したら、その後に運用フェーズに入ります。具体的には、開発が完了するとコンパイル、本番環境へのデプロイ、疎通確認、メンテナンスなどが必要です。通常、開発チームと運用チームの担当者や部署は別々で、仕事内容や考え方などが異なります。そのため、開発チームと運用チームの衝突が起きることがよくあります。
たとえば、開発チームはシステムに機能を追加することが仕事なので、頻繁にリリースできることを期待します。一方で運用チームは安定してシステムを運用することが仕事なので、システムの変更を嫌う傾向があります。
この反省から生まれたのがDevOpsで、開発チームと運用チームが対立するのではなく、両チームが一体化して、システム、さらにはそのシステムが生み出すビジネスの価値を高めていこうという考え方です。
DevOpsとの違い
DevOpsの目標は、開発チームと運用チームの一体化です。両者が一体化することで、開発からリリース、運用までのサイクルをスムーズに行うことを目指します。
一方のSREの目標は、自動化ツールなどを用いて、運用のタスクをスピードアップしつつ、信頼性を高めることです。
両者ともに、ビジネスの価値を高めるために開発運用のアジリティを高めるという目的では共通しています。特にDevOpsから入ってもSREから入っても、共通にとり組むのがデプロイメントフェーズの標準化・自動化です。違うところとしては、DevOpsは開発視点が厚めなのに対して、SREはリリース後の安定運用にも力点を置いていることといえるでしょう。
▼あわせて読みたい▼
>>DevOpsとは?アジャイル開発との違い、導入するメリット・デメリットについて解説のページへ
>>DevOps(デブオプス)って何だ?Dev(開発)とOps(運用)以外の人たちは何をする?のページへ
開発においてSREとDevOpsは密接にかかわっている
上記でご説明したとおり、SREとDevOpsの関係はとても深いです。どちらも開発フェーズと運用フェーズをつなぐことを目的としており、運用フェーズも含めた開発作業の品質を高めるためのものです。実際、SREとDevOpsのツールや作業内容は、重複している点が多数見られます。
そこで「どちらも同じような役割をもっているなら、どちらかを導入すればよいのでは」という疑問が生じるでしょう。両者のサービス内容は重複していますが、どちらも導入することは可能です。たとえば、DevOpsをすでに導入済みの現場に、SREを段階的に導入することもあります。
SREによって実現できること
SREを導入すると、どのようなことを実現できるのかをご説明します。
運用の安定性を高められる
運用のあらゆる場面で、作業をツール化して自動化を進めることが可能です。これにより、手作業で発生することが多かったミスや、漏れによるエラー、不具合の発生を抑えられます。
また、SLIの監視を盛り込むことで、異常事態の事前検知や即時の初動対応を行うことができます。新機能リリース直後の初期問題にも迅速な対応が可能になります。
運用の作業を効率化できる
運用の作業が自動化されることは、効率化やスピードアップにつながります。運用チームは空いた時間を運用の仕組みの改善に振り向けることができ、さらなる効率化も可能となります。
特にデプロイメントフェーズでは非常に多くの細かなタスクが発生します。これを効率化してスピードアップすることによって、開発が完了したシステムをすばやくリリースすることができるようになります。
運用タスクの属人化を防止できる
運用タスクの自動化にとり組むことで、タスクの整理やタスク内容の明確化が可能になります。また、自動化できると、誰でも実行することが可能になります。
作業の手順などちょっとしたノウハウも明確な形で自動化にとり込まれ、それを組織内で横展開することも可能になるでしょう。
システム開発やビジネスのアジリティを向上する
運用のタスクがスピードアップして、アジャイル開発の成果を速やかにリリースに結びつけることができます。これは、ビジネスのアジリティをあげるために大きな力となるでしょう。
頻繁なリリースはまた、開発チームと運用チームの交流も密にします。開発と運用の連携がよくなり、一体となってシステムの価値、ビジネスの価値に貢献できるようになるでしょう。
SREエンジニアに求められるスキル
運用のタスクを自動化するために、運用に関する豊富な知識と、自動化のコーディングができるスキルが求められます。
運用環境に必要なセキュリティ、ネットワーク、クラウド、データベースに関する知識、また開発環境に必要なリポジトリ、CI、各種の管理ツールの技術も必要とされます。
さらに、技術的なスキルだけではなく、開発チームと運用チームをつなぐために、高いコミュニケーションスキルも求められるでしょう。
まとめ
この記事では、SREとは何か、SREの指標、DevOpsとの違い、SREで実現できることなどについて解説しました。
情報システムで重要なのは、開発業務の品質向上や効率アップだけでなく、開発から運用フェーズに移る際や、運用を開始してからも高い信頼性が求められます。それを実現するのが、SREです。運用フェーズに移る際や運用開始後に、不具合やエラーが多いとお悩みの場合には、SREの導入を検討してみてください。
ご相談はこちらから
>>お問い合わせページへ
>>料金についてページへ
監修
永井 敏隆
大手IT会社にて、17年間ソフトウェア製品の開発に従事し、ソフトウェアエンジニアリングを深耕。SE支援部門に移り、システム開発の標準化を担当し、IPAのITスペシャリスト委員として活動。また100を超えるお客様の現場の支援を通して、品質向上活動の様々な側面を経験。その後、人材育成に従事し、4年に渡り開発者を技術とマインドの両面から指導。2019年、ヒンシツ大学の講師としてSHIFTに参画。
担当講座
・コンポーネントテスト講座
・テスト自動化実践講座
・DevOpsテスト入門講座
・テスト戦略講座
・設計品質ワークショップ
など多数
――――――――――
ヒンシツ大学とは、ソフトウェアの品質保証サービスを主力事業とする株式会社SHIFTが展開する教育専門機関です。
SHIFTが事業運営において培ったノウハウを言語化・体系化し、講座として提供しており、品質に対する意識の向上、さらには実践的な方法論の習得など、講座を通して、お客様の品質課題の解決を支援しています。
https://service.shiftinc.jp/softwaretest/hinshitsu-univ/
https://www.hinshitsu-univ.jp/
――――――――――