はじめに
サイトリライアビリティエンジニアリング(SRE)について学んだことをアウトプットしたいと思います。
今回は、サービスレベル指標(SLI)/ サービスレベル目標(SLO)編です。
サービスレベル
サービスを適切に管理するには、サービスの重要な振る舞いを定義して、その計測と評価の方法を決定する必要があります。
一般的にサービスレベルアグリーメント(SLA)という用語が知られていますが、SLAは複数の意味で使われており、文脈に応じて数多くの意味に取られることから、指標(SLI)、目標(SLO)、アグリーメント(SLA)と用語を分けて意味が明確となるよう定義します。
-
サービスレベル指標(SLI)
SLI(Service Level Indicators)は、サービスレベル指標の略です。
SLIは、提供しているサービスのレベルを計測する指標を定義します。
重要なSLIとしては、サービスの可用性、レイテンシ、スループット 等があります。 -
サービスレベル目標(SLO)
SLO(Service Level Objectives)は、サービスレベル目標の略です。
SLOは、SLIで計測されるサービスレベルのターゲット値またはターゲット値の範囲です。
例えば、SLIがレスポンスのレイテンシである場合、平均レイテンシを100ms以下にするというSLOを設定します。 -
サービスレベルアグリーメント(SLA)
SLA(Service Level Agreements)は、サービスレベルアグリーメントの略です。
SLAは、ユーザーとの間で結ぶ、明示的、あるいは暗黙の契約であり、SLOを満たした場合、満たさなかった場合に関する規定(払い戻しやペナルティ等)が含まれます。
ユーザの関心事に着目する
SLI/SLOを検討する際は、自分たちが計測できることではなく、ユーザーが気にすることは何か?を考えて、測定する指標を検討します。
ユーザーが気にすることを計測するのが、難しかったり不可能だったりする場合、何らかの方法でユーザーが求めることに近似した指標とすることもありますが、単純に計測しやすいことから始めてしまえば、あまり有益でないSLI/SLOができてしまう可能性がある為、慎重に選択する必要があります。
サービスの期待値を明確にする
SLI/SLOを定義することでサービスの期待値が明確になる為、ユーザーは自分のユースケースに適しているか理解することができるようになります。
ただし、ユーザーは提供されると言われたものに基いてではなく、実際に提供されるものに基いて構築を行うことを意識する必要があります。
サービスの実際のパフォーマンスが明言されているSLOより遥かに優れている場合、ユーザーはその実際のパフォーマンスに依存するようになります。
なので、サービスの可用性が過剰に高い場合は、システムの計画停止を意図的に行う等の運用をすることで、ユーザーから過度に依存されることを避けることができます。
さいごに
サービスとして100%の可用性を目指すことは現実的ではありませんから、サービスレベルをSLI / SLO / SLA として具体的に定義することは非常に重要だと思います。
また、ユーザーは実際に提供されるものに基いて構築を行うということを意識してサービスレベルを決定することも大事なことだと思いました。