긴 꼬리 읽기
레이턴시는 숫자가 아닌 곡선 위에 존재
평균 레이턴시는 사용자가 경험하는 것을 숨긴다. 실제 서비스는 분포를 생성한다: 요청이 얼마나 오래 걸렸는지 보여주는 곡선.
그 곡선 위의 세 지점이 작동상의 의미의 대부분을 담당한다:
- p50 (중앙값): 분포의 중간. 요청의 절반은 더 빠르고 절반은 더 느리다. 일반적인 경험을 설명한다.
- p99: 99번째 백분위수. 요청의 1%만 이보다 오래 걸렸다. 일반적인 사용자의 최악의 경험을 설명한다.
- p99.9: 요청의 0.1%만 이보다 오래 걸렸다. 서비스에 자주 접속하는 파워 사용자의 최악의 경험을 설명한다.
기하학적 통찰: 레이턴시 분포는 거의 항상 긴 오른쪽 꼬리를 가진다. 곡선은 중앙값 주변에서 빠르게 상승한 후 오른쪽으로 천천히 떨어지며, 종종 평균에서 멀리 떨어진 곳에 작은 범프가 있다. 그 범프는 가장 느린 사용자를 나타낸다: 화난 티켓을 작성하는 사람들.
평균이 오도하는 이유: 중앙값 50ms, p99 5,000ms인 서비스는 일반적인 경험과 꼬리 경험 사이에 100배의 차이가 있다. 산술 평균은 100ms에 착지할 수 있으며, 재앙을 완전히 숨긴다. 산술 평균은 2D 모양의 단일 점 투영이다: 모양의 정보 거의 모두가 사라진다.
백분위수 곱셈 문제: 10개의 백엔드 서비스에 접하는 요청은 각각 p99가 100ms이고, 모든 응답을 기다린다면, 대략 600ms의 p99를 가진다(100ms가 아니다). 느린 꼬리가 곱해진다. 이것이 SRE 책이 경고하는 이유이다: 'N의 가장 느린 것을 조심하라'. N이 증가함에 따라 꼬리 레이턴시가 빠르게 악화된다.
꼬리 레이턴시 수학
서비스 A는 5개의 백엔드 서비스로 병렬로 요청을 분산하고 모든 응답을 기다리는 요청 흐름을 가진다. 각 백엔드의 p99 레이턴시는 100ms이다.
예산 소진을 기울기로
시간에 따른 예산 그래프 그리기
2D 축(x축에 시간, y축에 남은 예산)에 그려진 오류 예산은 서비스 건강 상태를 한눈에 드러낸다. 소진 곡선의 모양은 열 개의 개별 대시보드가 전달할 동일한 정보를 담고 있다.
세 가지 참조 형태:
- 건강한 선형 소진: 예산이 경과 시간에 정확히 비례하여 직선으로 떨어진다. 28일 기간 중 14일차에는 절반의 예산이 남아있어야 한다. 이것이 SLO 목표의 가시화이다.
- 빠른 소진: 가파른 아래쪽 기울기. 활성 신뢰성 문제를 나타낸다. 기울기가 충분히 가파르면, 예산이 윈도우 초기화 전에 소진되어 오류 예산 정책을 트리거한다.
- 회복된 곡선: 평평하거나 올라가는 구간. 서비스가 SLO보다 더 잘 수행되고 있다. 시간이 지남에 따라 남은 예산이 증가하여 위험한 출시를 위한 공간을 만든다.
소진 속도는 소진 선의 기울기로, 정규화된 것이다: 소진 속도가 1은 시간이 지남에 따라 예산을 정확히 SLO 속도로 소진한다는 뜻이다. 소진 속도가 10은 허용된 속도의 10배로 소진한다는 뜻이다: 이 속도로 전체 월간 예산은 2.8일 내에 소진될 것이다.
다중 윈도우 다중 소진 속도 경보: Google의 SRE 워크북은 '지난 1시간 동안 소진 속도가 14.4 이상 & 지난 5분 동안 소진 속도가 14.4 이상'과 같은 결합 조건에서 경보하는 것을 권장한다. 기하학: 단순히 짧은 급증이 아니라 지속된 가파른 기울기. 이 모양은 일시적 변동을 필터링하면서 실제 소진 위협을 포착한다.
소진 속도 읽기
팀의 SLO는 28일 동안 99.9%이다. 7일차에 이미 오류 예산의 60%를 사용했다. 지난 24시간 동안의 현재 소진 속도는 8이다.
서비스를 방향 그래프로
프로덕션을 DAG로
현대 서비스는 의존성 그래프로 실행된다. 각 서비스는 노드이다. 서비스 A에서 서비스 B로의 각 호출은 A에서 B로의 방향 간선이다. 전체 그림은 방향 그래프를 형성한다(때때로 DAG, 때때로 비동기 재시도를 통한 순환).
중요한 기하학적 속성:
- 아웃도(Out-degree): 노드가 의존하는 서비스의 수. 더 높은 아웃도는 더 많은 상류 실패 모드를 의미한다. 12개의 백엔드에 의존하는 서비스는 그 중 하나라도 실패하면 실패한다.
- 인도(In-degree, 팬인): 이 노드에 의존하는 서비스의 수. 더 높은 인도는 단일 실패가 광범위하게 전파된다는 의미이다. 30개의 종속 서비스를 가진 데이터베이스는 가장 큰 폭발 반경을 가진다.
- 중간성 중심성(Betweenness centrality): 노드를 통과하는 최단 경로의 수. 높은 중간성을 가진 노드는 병목 지점이다. 인증 서비스와 핵심 API는 일반적으로 높은 점수를 받는다.
- 강하게 연결된 성분(Strongly connected components): 순환을 형성하는 서비스 그룹. A가 B를 호출하고 B가 A를 호출하면 순환이 있다. 순환은 실패 복구를 복잡하게 한다: 두 서비스 중 하나를 시작하려면 다른 하나가 이미 작동하고 있어야 한다.
폭발 반경은 신뢰성 투자를 운전하는 기하학적 개념이다. 실패의 폭발 반경은 이를 영향받는 부분그래프이다. 신뢰성 엔지니어링은 가장 큰 폭발 반경을 가진 노드에 많이 투자한다. 전체 시스템 신뢰성을 개선하는 가장 저렴한 방법은 종종 가장 높은 중간성을 가진 노드에서 중복 또는 우아한 성능 저하를 추가하는 것이다.
폭발 반경 추론
소비자 서비스는 다음에 의존한다: AuthService, UserDB, ProductCatalog, PaymentGateway, RecommendationEngine, EmailService, AnalyticsService. AuthService는 47개의 다른 서비스가 이를 의존한다. EmailService는 3개의 다른 서비스가 이를 의존한다. RecommendationEngine은 2개의 다른 서비스가 이를 의존한다.
대시보드의 정보 기하학
픽셀은 실제 부동산이다
대시보드는 유한한 영역을 가진 2D 표면이다. 한 신호에 할당된 모든 픽셀은 다른 신호에 할당되지 않은 픽셀이다. 대시보드 설계는 기하학 문제이다: 공간적 관계를 보존하면서 가장 의사결정 관련 정보를 가장 작은 시각적 영역 내에 배치하라.
독서 패턴: 서양 독자는 F자 모양으로 스캔한다(왼쪽 위에서 먼저, 그 다음 전체, 그 다음 아래로). 가장 중요한 신호는 왼쪽 위에 속한다. 오른쪽 아래는 가장 적게 주목받는다.
게슈탈트 그룹화: 동일한 서비스의 신호는 동일한 시각적 그룹에 속한다. 한 서비스의 지연시간, 트래픽, 오류 & 포화도는 화면 전체에 흩어진 것이 아니라 2x2 그리드에 속한다. 시각적 근접성은 논리적 관계를 인코딩한다.
색상 인코딩: 오류의 경우 빨간색, 포화도의 경우 노란색, 건강한 범위의 경우 녹색. 색상 선택은 임의적이 아니라 관례이다. 이를 뒤집으면 사건 중에 매번 인지 비용이 든다.
Y축 스케일링: 0-100%로 스케일된 그래프는 트래픽이 두 배가 되어도 차분해 보인다. 최근 값으로 자동 스케일된 그래프는 정상적인 변동 중에 놀라워 보인다. 두 선택 모두 적절한 사용이 있다; 선택은 기하학적이지, 미용적이 아니다.
정보 밀도: 너무 적은 신호는 팀을 무엇이 잘못되었는지 모르게 한다. 너무 많으면 노이즈에 신호를 묻는다. Edward Tufte의 데이터 잉크 비율이 적용된다: 정보를 전달하는 잉크의 비율을 장식하는 잉크로 극대화하라. 스파클라인 스타일 최소주의는 한눈에 복잡한 위젯을 이긴다.
첫 번째 글런스를 위한 디자인
팀이 4개의 백엔드 의존성 전체에서 8개의 중요 SLI를 가진 서비스를 위한 단일 주요 대시보드를 설계하고 있다. 대시보드는 온콜 엔지니어의 첫 번째 질문에 오전 3시에 5초 내에 답해야 한다: '무엇인가 불타고 있는가, & 그렇다면 어디에?'
기하학의 SRE: 정리하기
프로덕션을 실행하는 형태
SRE 실무 아래에 있는 네 가지 기하학적 구조를 살펴보았다:
- 레이턴시 분포를 긴 꼬리 곡선으로, 여기서 백분위 점은 평균보다 더 많은 진실을 담는다
- 오류 예산 원뿔을 여기서 소진의 기울기가 남은 숫자보다 서비스 건강을 더 잘 드러낸다
- 서비스 의존성 그래프를 여기서 폭발 반경 & 중심성이 신뢰성 투자를 지시한다
- 대시보드 레이아웃을 2D 부동산으로, 여기서 픽셀 할당은 작동상 결과를 가진 기하학 문제이다
기하학적 사고는 SRE를 일반적인 작업에서 분리하는 것이다. 한 작업 엔지니어는 숫자를 읽는다. SRE는 형태를 읽는다. 형태는 단일 숫자가 포착할 수 없는 정보를 인코딩한다: 소진 속도의 기울기, 꼬리의 부피, 노드의 중심성, 대시보드 패널의 게슈탈트.
이 레슨의 동반 레슨은 SRE 자체를 다루었다. 이 레슨은 그 아래의 기하학을 다루었다. 함께 그들은 현대 신뢰성 엔지니어링의 시각적 & 개념적 비계를 형성한다.