Google Cloud Platform Japan Blog
最新情報や使い方、チュートリアル、国内外の事例やイベントについてお伝えします。
SRE のサポートを受けるべきアプリとは? : CRE が現場で学んだこと
2017年7月7日金曜日
編集部注 :
社内で多くのアプリケーションやサービスが稼働するようになると、SRE(や運用)チームのサポートが追いつかないケースが出てきます。今回の『
CRE が現場で学んだこと
』シリーズでは、企業内のアプリケーションやサービスの中で何を SRE にサポートしてもらうかを、うまく原則に基づいて防御的に決める方法について見ていきます。
Google では幸いなことに、ストレージやネットワーク、ロード バランシングといった横断的なインフラはもちろん、Google 検索や Google マップ、Google フォトなどの主要なアプリケーションも含め、すべてを Site Reliability Engineering(SRE)チームがサポートしています。とはいえ、SRE にはソフトウェア エンジニアとシステム エンジニアの両方を組み合わせたスキルが求められるため、それを満たす人材を見つけて採用するのは容易ではなく、今も需要が供給を上回る状態が続いています。
SRE チームがサポートできるアプリケーションの数には実質的な制限があります。このことを、私たちは時間の経過とともに学びました。また、他よりもサポートに手間がかかるアプリケーションの特徴もわかってきました。多くのアプリケーションを稼働させている企業では、すべてを SRE チームがサポートすることは無理だと思われます。
Q : どうすれば自社の SRE チームが限界に達しているとわかるのですか? どうすればサポートすべきアプリケーションをうまく選べるのでしょう? SRE チームはいつアプリケーションのサポートを止めるべきなのでしょうか?
いい質問ですね。これらの問題について詳しく見ていきましょう。
SRE によるサポートの実質的な限界
Google の場合、誰も燃え尽きることなくページャー担当者をローテーションさせるのに必要な SRE チームの最低人数は、経験則からいってエンジニア 6 人です。1 日 24 時間週 7 日のローテーションで待機し、目標とするレスポンス時間は 30 分以内、ページャーのアラートがエンジニアの睡眠を妨げることがないよう、待機時間は 1 人のエンジニアにつき連続 12 時間を超えないことが条件です。つまり、エンジニア 6 人のグループが 2 つ必要で、それぞれがページャーに対応する時間帯をほぼ日中に合わせられるよう、各グループは地理的に離れていることになります。
どんな場合においても、ページャーに対応する第 1 担当者が存在します。第 1 担当者にたまたま連絡がつかなかったり、第 1 担当者がインシデント対処中だったりして対応できないときは、第 2 担当者がページャーに応えます。
第 1 担当者と第 2 担当者は通常の運用業務をこなし、他のチーム メンバーには、信頼性向上、より良いモニタリング システムの構築、運用業務の自動化促進といったプロジェクト業務のために時間を費やしてもらいます。つまり、各エンジニアは 6 週間の中で 2 週間、そのうち 1 週間は第 1 担当者として、もう 1 週間は第 2 担当者として運用業務に注力することになります。
Q : エンジニアが 12~16 人いれば、開発チームが作成したアプリケーションすべてを確実にサポートできることになりますよね?
実はその答えはノーです。経験上、SRE チームが効率的に管理できるアプリケーションやサービスの数には明白な認知限界があることがわかっています。
個々のエンジニアが、それぞれのアプリケーションの稼働中に発生したトラブルに対応、診断して解決へと導くには、各アプリケーションのことを十分に知っておく必要があります。
したがって、複数のアプリケーションに対する同時サポートを簡素化するには、その複数のアプリケーションをできるだけ似たようなものにしておくとよいでしょう。共通のパターンやバックエンド サービスを使うように設計するとともに、ロールアウトやモニタリング、アラートなどの運用作業は共通のツールを使って標準化し、デプロイのスケジュールも同じようにしておくのです。もっとも、こうすることでアプリケーションあたりの認知的負荷は軽減できますが、なくなるわけではありません。
十分な人数の SRE を確保できたときは、2 チーム制にして(ここでも 2×6 という最低限の配属人数は守りましょう)、それぞれ異なる分野を担当させることも検討しましょう。
Google の場合、1 つの SRE チームがフロントエンドとバックエンドに分かれ、システムの規模が大きくなるにつれて、それぞれがフロントエンドのみ、バックエンドのみをサポートすることも珍しくありません(このようなチームを私たちは “mitosis” と呼んでいます)。
SRE チームがサポートできるサービスの上限は、以下のような要因によって大きく変わってきます。
サービスがきちんと稼働し続けるために必要な通常の運用タスク。たとえば、リリース、バグ フィックス、緊急性のないアラートやバグなどがこれに相当します。自動化することで、こうしたタスクは(なくすことはできないものの)軽減できるでしょう。
予定外で重要度の低いリクエストによる「割り込み」。これを減らそうと努力しても無駄であることがわかっています。一番効率的な対処法は、頻繁にやって来るリクエストの 50~70 % をセルフサービス ツールに任せることです。
緊急アラートへの対応、インシデント管理、その後のフォローアップ。これらに割く時間を減らす一番の方法は、サービスの信頼性を高め、アラートの精度を調整することです(アラートが発動したときは、サービスで実際に起こっている問題をきちんと示すようにするとよいでしょう)。
Q : 6 週間のうち 4 週間は SRE が運用作業を行っていないことになります。その時間を使って、SRE チームがサポートするサービスの量を増やせないでしょうか?
できないことはないですが、そのような行為は、Google では「種トウモロコシを自ら食べてしまうようなもの」と見なされます。機械ができることはすべて機械にやらせることがゴールです。それを実現するには、SRE に余裕を持ってもらい、サービスの新たな自動化といったプロジェクトに取り組んでもらいましょう。
経験上、50 % という運用作業のしきい値をチームが超えると、すぐに坂道を下って 100 % 運用となってしまいます。こうした状況に陥ると、今後発生するインシデントの頻度や時間、影響などをエンジニアの努力によって削減することが難しくなり、中長期的な運用上のメリットをもたらすエンジニアリングの恩恵を得られなくなります。SRE チームを運用でほぼフル稼働させてしまうと、エンジニアの設計や開発スキルによって得られる利点を逃してしまうのです。
特に注意していただきたいのは、SRE のエンジニア プロジェクトが上に挙げたような要因に対応し、運用負荷を軽減できる点です。上記の要因こそ、SRE チームがサポートできるサービスの数に上限があることの理由なのです。
ここまで読めば、SRE チームに新たなサービスを担当してもらいたいと思いつつも、実際には継続してサポートしてもらうのが難しいことがおわかりいただけるのではないでしょうか。
SRE のサポートに限界が来たらどうするのか
Google の場合、SRE がサポートしていないサービスは、原則として開発を担当したチームがサポートすることになっています。新しいアプリケーションを開発するのに十分な開発者がいるのであれば、サポートする開発者も十分いるだろう、というのが Google の考えなのです。Google の開発者は、モニタリングやロールアウト、インシデント管理を行うにあたって担当 SRE と同じツールを使うことが多いため、運用サポートの負荷も SRE と似通っています。
いずれにしても、Google ではアプリケーションを作成した開発者にしばらくサポートを直接担当してもらいたいと考えています。そうすることで、お客様がどのような経験をされているのかを開発者も実感できます。開発者がそのとき得た情報は、のちに SRE がサービス担当者として加わった際にも役立ちます。
Q : では、開発者に作ってもらいたいと考えている次のアプリケーションの扱いはどうしましょう? 現在のアプリケーションをサポートすることで手一杯なのではないですか?
確かにそうかもしれません。過度のアラートや自動化不足により、稼働中のアプリケーションの運用負荷が高くなっている可能性はあります。しかし、このことで開発チームには、よりサポートしやすいアプリケーションを作ることに時間を費やそうという実用的な動機が生まれます。サポートしやすいアプリケーションの開発は、アラートを調整し、自動化に開発時間を割き、機能変更のスピードを落とすことなどによって実現できます。
開発者が運用業務で手一杯になった場合でも、SRE が運用の専門知識や開発力を提供することで、何とか管理可能なレベルまで開発者の負荷を下げることができるかもしれません。ただし、SRE がサービスの運用責任を負うことになってはいけません。基本的な問題の解決にはつながらないためです。
1 つのチームがアプリケーションを開発し、別のチームが運用業務を引き受けると、モラル ハザードが発生します。開発スピードを上げたいと考えている開発者は、たまにメモリ不足でサーバーの再起動が必要になるようなちょっとしたバグを探し出してやっつけることには興味がありません。一方、運用チームはその再起動を 1 日に何度も実行するために、そのつどページャーで呼び出されるのです。
運用チームにとっては、彼らの睡眠を妨げるバグの修復こそ大切なことなのです。当然のことながら、開発者が自分の開発したシステムの運用まで担当すると、彼ら自身もサポートしやすいシステムを作ることに時間を費やしたいと思うようになります。後で説明しますが、これは SRE チームに自身のアプリケーションをサポートするよう説得する際にも重要なことなのです。
どのアプリケーションをサポートするべきか
SRE がサポートするアプリケーションに優先順位を付ける最も簡単な方法は、売上げや事業の重要度に応じて決めることです。つまり、サービスがダウンするとどうなるかを考えるのです。結局のところ、SRE チームに自社サービスをサポートしてもらうことで、サービスの信頼性や可用性が向上するのですから。
Q : いい考えだと思います。つまり、ビジネスへの影響度に応じて優先順位を付ける方法が常に正しいということですよね?
そうとも限りません。実際にはあまりサポートの必要がないサービスも存在するからです。(分散キーバリュー ストアのように)成熟しており、かつ単純で、更新の頻度も高くないインフラ サービスが良い例です。
このようなサービスは変更されることがほとんどないので、自発的に壊れる可能性も低いのです。そのサービスがユーザー向けアプリケーションと重要な依存関係にあったとしても、SRE が専属でサポートするほどではないでしょう。むしろ、サービスの開発者がページャーを持ち、たまに発生する運用作業を担当するようにしてください。
Google では、SRE チームが注力する分野は以下の 7 つだと考えています。これらは、開発者が通常はあまり注力しない分野です。
モニタリングと測定基準 :
たとえば、レスポンスのレイテンシ、エラー、未対応となっているクエリの率、リソースの利用率がピークに達しているかどうかなどを検知することです。
緊急対応 :
交代でオンコールに対応することや、トラフィックが落ちたことの検知、第 1 担当者や第 2 担当者およびエスカレーション、作戦を練ること、“
Wheel of Misfortune
”(不運のルーレット)などです。
キャパシティ プランニング :
四半期ごとの予測や、突然の持続的なスパイクへの対応、稼働率向上プロジェクトの実施などです。
サービス速度の上げ下げ :
さまざまな場所で稼働しているサービスの場合、(エンドユーザーのレイテンシを低減するなどの理由から)場所に応じて対応速度を上げたり下げたりするスケジュールの計画を立て、そのプロセスを自動化することでリスクや運用負荷を軽減させます。
変更管理 :
カナリア リリース、1 % experiments、ローリング アップグレード、不具合発生時の迅速なロールバック、エラー バジェットの査定などです。
パフォーマンス :
ストレス テストや負荷テスト、リソース利用の効率性監視と最適化のことです。
データの完全性 :
再構成できないデータを、読み込み時に復元性かつ可用性の高い状態で保存しておくこと。これには、バックアップから迅速に復元できるようにすることも含まれます。
「緊急対応」と「データの完全性」を除き、これらの専門分野によって Google のキーバリュー ストアが利益を得ることはありませんし、開発者の代わりに SRE がサポートを担当することで得られる限界利益も大したことはないというのが実情です。
一方、SRE のサポート能力をこうした分野に費やすことで得られる機会費用は大きく、他のアプリケーションも SRE の専門分野によってより多くの利益を享受できる可能性があります。
もう 1 つ、SRE の専門性が必要ないインフラ サービスに対して SRE が責任を持つ場合があります。それは、すでに稼働しているサービスと重要な依存関係にある場合です。このようなケースでは、サービスの変更に対する可視性や管理性を SRE の側で確保しておいたほうがずっとよいのです。
この投稿記事のパート 2 では、SRE がサポートするほうがよいと判断されたビジネス上の重要なサービスを、Google の SRE がどうやって担当しているのか、また担当すべきかどうかをどうやって判断しているのかについて紹介します。
* この投稿は米国時間 6 月 23 日、Customer Reliability Engineer である Adrian Hilton によって投稿されたもの(投稿は
こちら
)の抄訳です。
- By Adrian Hilton, Customer Reliability Engineer
0 件のコメント :
コメントを投稿
12 か月間のトライアル
300 ドル相当が無料になるトライアルで、あらゆる GCP プロダクトをお試しいただけます。
Labels
.NET
.NET Core
.NET Core ランタイム
.NET Foundation
Access Management
AlphaGo
Ansible
Anvato
Apache Beam
Apache Maven
API
Apigee
APIs Explore
App Engine
App Engine Flex
App Engine flexible
AppArmor
AppScale
AprilFool
AR
Artifactory
ASP.NET
ASP.NET Core
Attunity
AWS
Big Data
BigQuery
Billing Alerts
Bime by Zendesk
Bitbucket
Borg
BOSH Google CPI
Bower
BreezoMeter
BYOSL
Capacitor
Chromium OS
Client Libraries
Cloud API
Cloud Audit Logging
Cloud Bigtable
Cloud CDN
Cloud Client Libraries
Cloud Console
Cloud Consoleアプリ
Cloud Container Builder
Cloud Dataflow
Cloud Dataflow SDK
Cloud Datalab
Cloud Dataprep
Cloud Dataproc
Cloud Datastore
Cloud Debugger
Cloud Deployment Manager
Cloud Endpoints
Cloud Foundry
Cloud Foundry Foundation
Cloud Functions
Cloud IAM
Cloud IAP
Cloud Identity
Cloud Jobs API
Cloud KMS
Cloud Launcher
Cloud Load Balancing
Cloud Machine Learning
Cloud monitoring
Cloud Natural Language API
Cloud Networking
cloud Pub/Sub
Cloud Resource Manager
Cloud Resource Manager API
Cloud SDK
Cloud SDK for Windows
Cloud Source Repositories
Cloud Spanner
Cloud Speech API
Cloud SQL
Cloud Storage
Cloud Storage FUSE
Cloud Tools for PowerShell
Cloud Tools PowerShell
Cloud Translation
Cloud Translation API
Cloud Virtual Network
Cloud Vision
CloudBerry Backup
CloudBerry Lab
CloudEndure
Cloudian
CloudML
Cluster Federation
Codefresh
Codelabs
Cohesity
Coldline
Colossus
Compute Engine
Compute user Accounts
Container Engine
Container Registry
Container-Optimized OS
Container-VM Image
CRE
CSEK
Customer Reliability Engineering
Data Studio
Dbvisit
DDoS
Debugger
deep learning
Deployment Manager
Developer Console
Developers
DevOps
Disney
Docker
Dockerfile
Drain
Dreamel
Eclipse
Eclipse Orion
Education Grants
Elasticsearch
Energy Sciences Network
Error Reporting
ESNet
Evernote
FASTER
Fastly
Firebase
Firebase Analytics
Firebase Authentication
Flexible Environment
G Suite
gcloud
GCP 移行ガイド
gcsfuse
GitHub
Go
Go 言語
Google App Engine
Google Apps
Google Certified Professional - Data Engineer
Google Cloud
Google Cloud Certification Program
Google Cloud Client Libraries
Google Cloud Console
Google Cloud Dataflow
Google Cloud Datalab
Google Cloud Datastore
Google Cloud Endpoints
Google Cloud Explorer
Google Cloud Identity and Access Management
Google Cloud Launcher
Google Cloud Logging
Google Cloud Platform
Google Cloud Resource Manager
Google Cloud Security Scanner
Google Cloud Shell
Google Cloud SQL
Google Cloud Storage
Google Cloud Storage Nearline
Google Cloud Tools for IntelliJ
Google Code
Google Compute Engine
Google Container Engine
Google Data Analytics
Google Data Studio
Google Date Studio
Google Deployment Manager
Google Drive
Google Earth Engine
Google Genomics
Google Maps APIs
Google SafeSearch
Google Service Control
Google Sheets
Google Slides
Google Translate
Google 公認プロフェッショナル
GPU
Gradle
GroupBy
gRPC
HA / DR
Haskell
HEPCloud
HIPAA
Horizon
HTCondor
IaaS
IAM
IBM
IBM POWER9
icon
IERS
Improbable
InShorts
Intel
IntelliJ
Internal Load Balancing
Internet2
IoT
Issue Tracker
Java
JFrog
JFrog Artifactory SaaS
Jupiter
Jupyter
Khan Academy
Komprise
kubefed
Kubernetes
KVM
Landsat
load shedding
Logging
Looker
Machine Learning
Magenta
Managed Instance Group
Maps API
Maven
Maxon Cinema 4D
MightyTV
Mission Control
MongoDB
MQTT
MySQL
Nearline
Network Time Protocol
neural networks
Next
Node
NoSQL
NTP
NuGet パッケージ
OCP
OLDISM
Open Compute Project
OpenCAPI
OpenCAPI Consortium
OpenShift Dedicated
Orbitera
Organization
Orion
Panda
Particle
Percona
Pete's Dragon
Pivotal
Pivotal Cloud Foundry
PLCN
Pokemon GO
Pokémon GO
Poseidon
Postgre
PowerPoint
PowerShell
Protocol Buffers
Puppet
Pythian
Python
Rails
Raspberry Pi
Red Hat
Regional Managed Instance Groups
Ruby
Rust
SC16
ScaleArc
Security & Identity
Sentinel-2
Serving Websites
Shared VPC
SideFX Houdini
SIGOPS Hall of Fame Award
Sinatra
Site Reliability Engineering
SLA
Slack
SLI
SLO
Snap
Spaceknow
SpatialOS
Spinnaker
Spring
SQL Server
SRE
Stack Overflow
Stackdriver
Stackdriver Agent
Stackdriver Debugger
Stackdriver Diagnostics
Stackdriver Error Reporting
Stackdriver Logging
Stackdriver Monitoring
Stackdriver Trace
Stanford
Startups
StatefulSets
Storage & Databases
StorReduce
Streak
Sureline
Sysbench
Tableau
Talend
Tensor Flow
Tensor Processing Unit
TensorFlow
Terraform
The Carousel
TPU
Trace
Transfer Service
Translate API
Uber
Veritas
Video Intelligence API
Vision API
Visual Studio
Visualization
Vitess
VM
VM Image
VR
VSS
Waze
Webyog
Wide and Deep
Windows Server
Windows ワークロード
Wix
Worlds Adrift
Xplenty
Yellowfin
YouTube
Zaius
Zaius P9 Server
Zipkin
ZYNC Render
アーキテクチャ図
イベント
エンティティ
オンライン教育
クラウド アーキテクト
コードラボ
コンテスト
コンピューティング
サポート
ジッター
ショート動画シリーズ
スタートガイド
ストレージ
セミナー
ソリューション ガイド
ソリューション: メディア
データ エンジニア
データセンター
ビッグデータ
ファジング
プリエンプティブル VM
フルマネージド
マイクロサービス
マルチクラウド
リージョン
ロード シェディング
運用管理
可用性
海底ケーブル
機械学習
月刊ニュース
資格、認定
新機能、アップデート
人気記事ランキング
導入事例
内部負荷分散
認定試験
料金
Archive
2017
7
6
5
4
3
2
1
2016
12
11
10
9
8
7
6
5
4
3
2
1
2015
12
11
10
9
8
7
6
5
4
3
2
1
2014
12
11
10
9
8
6
5
4
3
2
Feed
月刊ニュースレターに
登録
新着ポストをメールで受け取る
Google
on
Follow @GoogleCloud_jp
0 件のコメント :
コメントを投稿