Page List

Search on the blog

ラベル SRE の投稿を表示しています。 すべての投稿を表示
ラベル SRE の投稿を表示しています。 すべての投稿を表示

2021年9月14日火曜日

class SRE implements DevOps

SREに関する講座「class SRE implements DevOps」を視聴した。
 

簡単なメモを残しておく。

What's the Difference Between DevOps and SRE?
  • DevOpsはDeveloperとOperatorの障壁を取り除くための指針
    • Developerは新しい機能を早くリリースしたい
    • Operatorはシステムが安定して動くように新しい機能をリリースしたくない
  • SREはDevOpsの実装の1つ
SLIs, SLOs, SLAs, oh my!
  • プロダクトごとに求められる availability は異なる
  • availability の定義もプロダクトによって異なる
  • SLI(Service Level Indicators) 過去5分間の95-percentile latencyが300ms未
  • SLO(Service Level Objectives) 年間を通してSLIが99.9%正常である
  • SLA(Service Level Agreements) 年間を通してSLIが99.5%未満しか正常でなかったらカスタマーに返金する
Risk and Error Budgets
  • Error Budget = どのくらいの unavailability を許容できるか
  • Error Budget が無くなったら、新しい機能のリリースはやめて信頼性の向上にフォーカスする
  • Error Budget でアクシデント/リスクを数値化することで、アクシデントは起こって当然だと認識できる
Toil and Toil Budgets
  • Overhead: Email, ミーティング、通勤
  • Toil: プロダクションサービスの運用に関わるタスクのうち、繰り返し手動で行われる自動化可能なもの
    • 障害対応もToil
    • 障害対応を自動化するツールを書くのはToilではない
    • すべてのToilが悪いというわけではない(新人が手動でシステムをいじって理解を深めるなど)
Now SRE Everyone Else with CRE! 
  • APIを公開しているサービスはコンシューマにSLOを共有するべき
  • Customer Reliability Engineering = Google Cloudでアプリケーションを作っているユーザのSRE実現をサポート
Managing Risks as a Site Reliability Engineer
  • Risk Analysis = 考えられる障害のダウンタイム、影響範囲、頻度などを使ってSLOを達成できるかどうか調べる
  • Risk Analysis を行うことで SLO 達成のために排除すべきリスクが分かる
  • Risk Analysis を行うことで、現実的な Error Budget が分かる
Actionable Alerting for Site Reliability Engineers
  • アクション可能で無い雑音のアラートはOFFにする
  • SLOを使って実際にユーザに問題が発生している場合にアラートを出すようにする
    • fast burn alert: 短期間のError Budget の消費量が異常 -> アラート、緊急対応
    • slow burn alert: 長期間のError Budget の消費量が異常 -> チケット、業務時間内での対応
Observability of Distributed Systems
  • structured logging: ユーザ情報が入った reqeust logs, サーバの debug logs
  • metrics: クエリの数、レイテンシーの分布、CPUロードなど
  • traces: 実行フローのタイミングや依存関係
  • 失敗している処理の共通点(リージョン、コードのバージョンなど)を見つけることで原因を特定しやすくなる
Incident Management
  • インシデント対応のときは明確なロールと責任を定義する
  • 計画と実行を一人で行うのは難しいので分業が必要
    • Incident Commander(IC): 戦略的な意思決定とロールのアサインを行
    • Operation Lead: システムの理解と変更に責任を持つ
  • 必要に応じて、ICはコミュニケーション機能やロジスティック機能(食べ物を買ってきたり、部屋の環境を整えたりする)を他の人に移譲することができる
Postmortems and Retrospectives
  • ICがドラフトを作るが、すべてのロールの人が必要な情報を追記していく
  • Blameless culture を持つことが大事
  • Distributed System は様々な要素が絡み合って動作するので、root cause だけではなくすべての要素について記述する

2021年9月13日月曜日

Availability と Reliability の違い

 いまいち違いが分かっていなかったのでメモ。結論からいうと、用いる指標が異なる。

Availability(可用性)は稼働率を指標として用いる。

稼働率 = (経過時間 - ダウンタイムの合計時間) / 経過時間

これに対して、Reliability(信頼性)は MTBF(平均故障間隔)、または MTTR(平均修復時間)を指標として用いる。

MTBF (Mean Time Between Failures) =  (経過時間 - ダウンタイムの合計時間) / インシデント数

MTTR (Mean Time To Repair) =  ダウンタイムの合計時間 / インシデント数

Availability の方はシステムが利用可能な時間の話で、Reliability の方はどれくらい壊れやすいか、壊れたときにどれくらい早く対応できるかという信頼性の話をしている。

例を使って考えてみる。

  • システムAは100日間のうち、1度インシデントが発生して、1日ダウンした
  • システムBは100日間のうち、2度インシデントが発生して、それぞれ半日ずつダウンした
このとき、Availabilityで見るとAもBも99%で同じになる。

しかし、Reliabilityで見ると異なる。MTBFはAが99日、Bが49.5日となって、Aの方が壊れにくいシステムであることが分かる。逆にMTTRはAが1日、Bが0.5日となっていて、Bの方がトラブルがあったときに早く回復できるシステムであることが分かる。

個人的な意見だが、インシデント回数はコントロールできない外部要因に依存するので、エンジニア的には MTTR の小さなシステム(壊れてもすぐに回復するシステム)を設計するのが良いのではと思う。また、新機能の開発を控えればMTBFは大きくなるので、MTBFの増加に力を入れてしまうと、積極的な新機能の開発が行われにくくなってしまってよくないのではという気がする。

稼働率とMTBF, MTTRには以下の関係が成り立つ。
稼働率 = MTBF / (MTBF + MTTR)