Site Reliability Engineering #4

4章サービスレベル目標

ユーザに対するサービスレベルを定義する。 定義するものはサービスレベル目標(SLI)サービスレベル目標(SLO)サービスレベルアグリメーメント(SLA)になる。

4.1 サービスレベルに関する用語

  • SLI
    • 提供されているサービスの性質に応じて定義される
    • リクエストのレイテンシ、エラー率、システムスループット。可用性、耐久性
  • SLO

    • SLIで計測されるサービスレベルのターゲット、または範囲を指す
    • ターゲットの場合は  SLI \leqq ターゲット の関係が成り立つ状態を目指す
    • 範囲の場合は  下限 \leqq SLI  \leqq 上限 の関係が成り立つ状態を目指す
    • ユーザの動向によって決まるメトリクス(ex. QPS)をSLOにすることは現実的ではない
  • SLA

    • ユーザとの間で結ぶ契約のこと
    • SLOを満たした場合/満たさなかった場合の規定を含む
    • 「SLOを満たさなかったときにはどうなるのか?」から分かる

SLOにはユーザの関心事を反映させ公表して期待を設定する。 期待を設定することでユーザのサービスに対する独自の期待や過剰な信頼を取り除くことができる。

4.2 指標の実際

提供するサービスの性質によってSLIを選択する。

指標の収集結果を分布で捉えると、スパイクといった5%が全体の95%に影響を与える動作を見つけられる。 収集結果を算術平均で捉えると埋もれてしまう。

4.3 目標の実際

サービスの性質によって決まり、パーセンタイルを活用する。

  • パフォーマンスカーブが重要な場合

    • Get RPC呼び出しの90%が1m以下で完了すること
    • Get RPC呼び出しの99%が10m以下で完了すること
    • Get RPC呼び出しの99.9%が100m以下で完了すること
  • スループット、レイテンシそれぞれが気なるユーザがいる場合

    • スループットタイプのクライアントのSet RPC呼び出しの95%が、1s以下で完了すること
    • レイテンシタイプのクライアントの、1kB以下のペイロードを持つSet RPC呼び出しの99%が、10ms以下で完結すること

SLOを常に満たし続けるのはデプロイ頻度の低下を招き、高価で過剰に保守的なソリューションが必要になることに繋がる。

SLOは経営に関わる次の制約の中で満たす必要があり、議論する必要がある。

  • スタッフ、市場投入までの期間、利用できるハードウェア、資金

現実的な期待をユーザのために設定するには安全マージンを確保する、過剰達成を避けて計画的なサービス停止を導入するなどができる。

4.4 アグリーメントの実際

SLAはビジネス、法務のチームが規定やペナルティを選択できるようにする。 顧客の属性が幅広いほどSLAの変更削除が難しくなるため、開示する内容は控えめにする。