Post

[SRE] SLO, SLI 및 SLA란?

[SRE] SLO, SLI 및 SLA란?

SLO, SLI 및 SLA란?

  • 서비스 레벨은 일정 기간 내에 사용자에게 제공되는 서비스를 측정 가능한 용어
    • 서비스 레벨 목표(Service-level objectives, SLO)는 시스템에서 기대되는 가용성을 설정한 목표이다.
    • 서비스 레벨 지표(Service-level indicators, SLI)는 시스템의 가용성을 파악하기 위한 핵심 측정치와 지표이다.
    • 서비스 레벨 계약(Service-level agreements, SLA)은 시스템이 SLO를 충족하지 못할 경우 발생하는 상황과 합의된 내용을 설명하는 법적 계약이다.

예를 들어,
웹 애플리케이션의 SLO가 1주일 중 99%에 해당하는 시간 동안 2초 이내에 비디오 재생을 시작하는 것이라고 가정한다면,
SLI는 웹사이트에서 2초 이내에 재생을 시작한 비디오의 비율을 측정한다. SLA에는 이러한 SLO와 고객과 서비스 공급업체가 합의한 기타 SLO와 적용되는 서비스 범위, 그리고 성능을 측정하는 데 사용되는 메트릭인 SLI가 모두 포함된다.

서비스의 성능과 안정성을 측정하는 방법에 초점을 맞추는 사이트 안정성 엔지니어링(Site Reliability Engineering, SRE)으로 인해,
분산 시스템의 업타임과 안정성을 유지하기 위한 모범 사례들이 보편화되었다.
2016년 3월, Google은 서비스 레벨 목표부터 시작해 메트릭을 모델링, 선택 및 분석하는 프레임워크에 대해 설명하는 ‘사이트 안정성 엔지니어링: Google이 프로덕션 시스템 운영하는 방법(Site Reliability Engineering: How Google Runs Production Systems)’을 발표했다.

SLO란?

  • SLO(서비스 레벨 목표)는 시스템에서 기대하는 가용성을 설정한 목표로, 일정 기간 동안의 백분율로 표시된다.

서비스 레벨 목표는 ‘가용성’과 ‘업타임’이라는 공통된 의미를 기반으로 팀들이 협업하는 데 도움이 된다.
SLO를 안정성과 가용성을 측정하는 표준으로 사용할 수 있다.
이전 예시에서 설명한 것처럼, SLO는 1주일 중 99%의 시간 동안 웹 애플리케이션의 비디오가 2초 이내에 재생되어야 한다는 것이다.

SLI란?

  • SLI(서비스 레벨 지표)는 사용자가 시스템의 가용성을 경험하는 방식을 정량적으로 측정한 것이다.
  • 서비스 레벨의 성공 비율을 백분율로 나타낸다.

서비스 레벨 지표는 SLO와 관련해 설명이 되지만, SLI는 시스템 안정성에 대한 실시간 신호를 제공한다.
SLI는 임계치보다 빠른 요청의 비율 또는 파이프라인으로 들어오는 기록의 비율을 측정하여 정확한 값을 산출할 수 있다.
앞의 예시의 경우, SLI는 웹사이트에서 2초 이내에 재생을 시작한 비디오의 비율을 측정한다.
이를 통해 SLO와 얼마나 차이가 나는지 알 수 있다.
SLI는 임계치보다 빠른 요청의 비율 또는 파이프라인으로 들어오는 기록의 비율을 측정하여 정확한 값을 산출할 수 있다.
앞의 예시의 경우, SLI는 웹사이트에서 2초 이내에 재생을 시작한 비디오의 비율을 측정한다.
이를 통해 SLO와 얼마나 차이가 나는지 알 수 있다.

SLA란?

  • SLA(서비스 레벨 계약 또는 협약)는 고객이 서비스를 사용할 때 기대하는 서비스 레벨을 정의한다.

서비스 레벨 계약은 서비스 제공업체와 고객 간의 계약으로, 공급업체가 제공할 서비스를 문서화하고 공급업체가 충족해야 하는 서비스 표준을 정의한다.
SLA에는 SLO를 위반할 경우 어떤 구제책이나 페널티가 있는지를 설명한다.

앞의 예시의 경우, SLA에는 웹 애플리케이션에 대한 모든 SLO는 물론 포함될 서비스 범위, SLO에 대한 성능 측정에 사용되는 모든 SLI가 포함된다.
계약에는 또한 서비스 제공업체와 고객의 책임도 포함된다.

서비스 레벨, SLO, SLI 및 SLA는 누가 사용할까?

SRE 팀, 안정성 엔지니어 및 교차 기능 팀은 서비스의 ‘안정성’을 정의하고 측정하는 데 어려움을 겪는 경우가 많다.
교차 기능 팀은 서비스나 시스템의 모든 측면에서 중요한 메트릭에 대한 포괄적인 뷰를 생성하여 업타임과 성능을 쉽게 측정할 수 있어야 한다.

서비스 레벨은 SRE 팀과 안정성 엔지니어가 애플리케이션과 인프라에서 주요 구성 요소를 식별하는 데 도움이 된다.
이들은 하나 이상의 구성 요소가 외부 고객들에게 기능을 노출시키는 경우 알아야 하기 때문이다. 이러한 교차점을 시스템 경계라고 한다.
시스템 경계는 사이트 안정성 엔지니어가 시스템의 성능 및 안정성의 실제 상황을 설명하기 위해 서비스 레벨 지표와 목표를 측정 지표에 적용하는 지점이다.

서비스 범위를 설정하고 어떤 메트릭이 SLI이 되어야 하고, SLO 준수 요구 사항이 무엇인지를 결정하려면 많은 노력이 필요하다.
복잡하기 때문에 아예 시도하지 않고 포기하는 경우도 많다.
안정성 엔지니어와 SRE 팀은 모든 팀을 위해 전체 스택에서 가용성 및 업타임에 대한 기준을 신속하게 설정할 수 있도록, 시스템의 성능 이력을 기반으로 맞춤화된 정확한 SLI 및 SLO가 필요하다.

SRE 팀이 항상 서비스 레벨 관리에 대한 책임을 지는 것은 아니지만, 서비스 레벨이 책임 범위에 포함되는 경우가 많다. SLI를 추적하고 SLO에 연결하면, 시스템 성능에 대한 목표를 설정할 수 있다.
Google의 SRE 지침은 레이턴시, 트래픽, 오류 및 포화를 서비스 레벨의 4가지 황금 신호로 정의하고 있다.
예를 들어,
API 호출을 확인하고 고객이 좋은 경험을 하기 위해 성공해야 하는 일반적인 요청의 비율(예: SLO 95%)을 기준으로 성공/실패 요청 수(SLI)를 추적할 수 있다.

SRE 팀은 고객에게 어느 정도 레벨의 SLA를 보장해 줘야 할지 보다 잘 이해하기 위해, 애플리케이션과 서비스 내의 핵심 구성 요소에 대해 엄격한 SLO를 설정한다.
이를 기준으로 팀은 SLO를 준수하려면 얼마나 신속하게 문제를 해결해야 하는지 이해하기 위한 방법으로 오류 예산을 적용할 수 있다.
서비스 레벨은 팀이 메트릭을 집계하고 전체 조직에서 업타임, 성능 및 안정성을 투명하게 파악할 수 있도록 해준다.
비즈니스 리더들은 서비스 레벨을 사용해 여러 팀, 애플리케이션, 서비스 등의 규정 준수 여부를 한눈에 모니터링하고 시스템 상태를 포괄적으로 파악할 수 있다.

서비스 레벨 관리란?

서비스 레벨 관리는 고객에게 제공되는 서비스 레벨에 대한 모든 프로세스와 운영 계약이 적절한지 확인하는 것을 의미한다.
여기에는 서비스 레벨에 대한 모니터링 및 보고, SLO 설정 및 조정, SLI 결정, SLA 준수 확인, 고객 리뷰 유지 등이 포함된다.

중요한 점은 SLO의 경우 팀 간에 ‘가용성’의 의미를 공유해야 한다는 것이며, 이는 SLA를 통해 파악할 수도 있다.
이러한 서비스 레벨 계약을 충족하거나 초과 충족하려면, 교차 기능 팀이 내부 SLO를 관리하는 것이 중요하다.

서비스 레벨 관리의 혜택

팀 전체에 SLO 모범 사례를 구현하는 것은 쉽지 않은 일이다.
팀 간에 공유되는 용어를 정확히 정의하려면 올바른 데이터가 필요하다.

안정성 엔지니어는 전체 스택과 팀 전체의 가용성 및 업타임에 대한 기준을 신속하게 설정해야 한다.
서비스 경계를 결정하고 서비스 안정성을 투명하게 파악할 수 있는 SLO와 SLI가 있어야, 고객과의 약속인 SLA를 보다 효과적으로 준수할 수 있다.
환경 전반을 개선하려면 안정성, SLO 준수 메트릭 및 오류 예산을 보고할 수 있어야 한다.

This post is licensed under CC BY 4.0 by the author.