Alice는 기다림을 싫어합니다

1 hour ago 2
  • 서비스 평균 요청 시간이 100ms이고 MTTR이 1분 미만이어도, 사용자는 긴 요청과 긴 장애에 더 오래 갇히기 때문에 평균 대기 시간을 훨씬 길게 느낌
  • 운영자는 요청·장애를 사건 단위로 집계하지만, Alice와 Alex 같은 사용자는 초·분 단위의 체감 시간으로 기다림을 계산함
  • 이 차이는 검사 역설(inspection paradox) 때문이며, 사용자가 경험하는 분포는 원래 지연 분포 f(t)가 아니라 t로 가중된 분포가 됨
  • 복구 시간 중앙값이 30분, p99가 600분인 로그정규 분포에서는 MTTR이 1시간을 조금 넘는 수준이어도 고객 체감 평균 복구 시간은 약 6시간까지 늘어남
  • 꼬리 지연과 긴 복구 시간은 고객 경험을 지배할 수 있으며, 절단 평균(trimmed mean)은 오른쪽 꼬리의 중요한 정보를 버릴 위험이 있음

요청 단위 평균과 사용자 체감 평균의 간극

  • Alice는 웹 서비스를 사용하며, 대부분의 사람처럼 시간을 초와 분으로 느낌
  • 운영자는 평균 요청이 100ms에 완료된다고 보지만, Alice의 평균 대기 시간은 1초가 될 수 있음
  • 장애에서도 같은 차이가 생김
    • 운영자는 MTTR이 1분 미만이라고 말할 수 있음
    • Alex가 체감하는 평균 장애 시간은 1시간일 수 있음
  • 두 측정은 동시에 맞을 수 있음
    • 긴 요청이나 긴 장애는 운영자 집계에서는 하나의 사건임
    • 사용자의 시간에서는 지속된 길이만큼 더 큰 비중을 차지함

검사 역설이 만드는 t-가중 분포

  • 이 현상은 검사 역설로 볼 수 있음
  • 사용자는 지연 분포 f(t) 자체가 아니라, t로 가중된 버전을 경험함
  • MTTR 또는 평균 요청 시간이 E[X]일 때 사용자가 경험하는 평균은 다음과 같음
    • E_a[X] = E[X²] / E[X]
    • E_a[X] = E[X] + Var(X) / E[X]
  • 분산이 클수록 사용자가 체감하는 평균은 운영 지표의 평균보다 더 크게 벌어짐

30분 중앙값과 600분 p99 예시

  • 중앙값 지연 또는 복구 시간과 99퍼센타일 값을 넣으면 로그정규 분포를 맞추고, 서비스 지표와 고객 체감 값을 비교할 수 있음
  • 예시 값은 다음과 같음
    • 중앙값 TTR: 30분
    • p99 TTR: 600분, 즉 100개 이벤트 중 1개는 복구에 10시간 걸림
  • 이 경우 MTTR은 1시간을 조금 넘지만, 고객이 경험하는 평균 복구 시간은 약 6시간이 됨

꼬리 지연과 절단 평균의 함정

  • 꼬리 지연과 긴 복구 시간을 이해해야 하는 이유는 여러 가지가 있으며, multiple samples도 그중 하나임
  • 서비스 시간에서는 타임아웃 후 재시도(timeout-and-retry) 가 일부 지연을 숨길 수 있음
    • 단, 실행 중인 요청이 락이나 다른 독점 리소스를 잡고 있지 않아야 함
  • 복구 시간에는 이런 숨김이 불가능해 꼬리의 두꺼움이 고객 경험에 더 직접적으로 드러남
  • trimmed mean 같은 절단 측정값은 고객 경험을 지배하는 오른쪽 꼬리의 형태를 가리는 문제가 있음
  • 절단 측정값을 선호하지 않는 또 다른 이유는 Little’s Law와 용량 사용량과 관련되며, 관련 글은 이전에 다룬 글에 있음

로그정규 분포 사용에 대한 주의

  • 로그정규 분포는 수치 계산 편의를 위해 선택됨
  • lognormal(μ, σ²)가 lognormal(μ + σ², σ²)가 되는 성질이 있고, 0 근처에서 잘 동작함
  • 지연이나 복구 시간 지표에 로그정규 분포가 특히 좋은 선택이라고 보기는 어려움
  • 이런 문제는 일반적으로 비모수적 방식으로 접근하는 편이 낫다고 봄
Read Entire Article