사전 포화
개념

포화

gabury1

포화는 자원 하나가 한계까지 얼마나 찼는지를 나타내는 값입니다. 값이 오를수록 그 자원은 곧 새 요청을 받지 못하게 됩니다. 요청 처리 상태를 보는 대표 지표 네 가지, 이른바 골든 시그널(지연·트래픽·오류율·포화) 가운데 하나이고, 나머지 셋과 달리 사용자가 겪은 것이 아니라 서비스 안의 자원 자체를 잽니다.

쉽고 빠른 이해

무슨 일을 하는 값인가 — 자원 하나가 한계에 얼마나 가까운지를 보여줍니다. 커넥션 풀이 꽉 찼는지, CPU(Central Processing Unit, 중앙 처리 장치)가 쉴 틈 없이 도는지 같은 것을 잽니다.

왜 재나 — 지연이나 오류가 오르는 것을 기다리면 이미 사용자가 불편을 겪은 뒤입니다. 포화는 그보다 먼저 오르는 값이라 문제가 닿기 전에 알아챌 수 있습니다.

어떻게 재나

  1. 서비스마다 가장 먼저 바닥나는 자원을 하나 고릅니다
  2. 그 자원이 찬 정도나 대기 중인 일의 길이를 잽니다
  3. 값이 한계에 가까워지면 알림을 보냅니다

언제 안 보나 — 자동으로 늘어나는 자원이거나 애초에 대기가 안 생기는 자원에는 굳이 안 봅니다. 그런 자원은 포화 값이 늘 낮게 나오기 때문입니다.

대가 — 무엇을 잴지 고르기가 쉽지 않습니다. 자원마다 재는 값이 다르고, 서비스가 여러 대면 자원마다 다시 골라야 합니다.

상세

이 절은 포화가 무엇을 재는 값인지부터 봅니다. 그다음 자주 헷갈리는 사용률과 무엇이 다른지, 왜 다른 신호보다 먼저 움직이는지를 봅니다. 끝에서 포화를 낮추는 흔한 방법을 짚습니다.

무엇이 포화 값이 되나

한 서비스에는 자원이 여럿 있습니다. CPU, 메모리, 디스크가 전부 후보입니다. 이 가운데 가장 먼저 바닥나는 자원 하나를 골라 그 자원이 찬 정도를 포화 값으로 씁니다.

같은 서비스에서도 시점에 따라 바닥나는 자원이 바뀔 수 있습니다. 평소에는 CPU가 여유롭다가 요청이 몰리는 시간대에는 데이터베이스로 나가는 커넥션 풀이 먼저 바닥나는 식입니다. 그래서 포화는 자원 하나에 고정된 값이 아니라 서비스마다, 때로는 시간대마다 다시 골라야 하는 값입니다.

포화가 뜻을 가지려면 그 자원이 대기 줄을 만들 수 있어야 합니다. 커넥션 풀처럼 개수가 정해져 있고 그 수를 넘으면 기다리게 되는 자원이 여기에 해당합니다. 자동으로 늘어나는 자원은 포화 값이 늘 낮게 나옵니다. 애초에 대기가 안 생기는 자원도 마찬가지입니다. 그런 자원은 굳이 포화를 따로 볼 이유가 적습니다.

사용률과 다른 점

포화는 사용률과 자주 헷갈립니다. 사용률은 자원이 일하는 시간의 비율이고, 포화는 그 자원이 못 받아 대기 중인 일의 양입니다.

계산대를 떠올리면 갈립니다. 계산원이 쉬지 않고 계산만 하고 있으면 사용률은 꽉 찬 것입니다. 줄을 선 손님이 없으면 이때도 포화는 낮습니다. 손님이 계속 몰려 줄이 길어지기 시작하면 그때부터 포화가 오릅니다. 사용률이 이미 가득 찬 다음에야 포화가 오르기 시작하는 경우가 흔합니다.

포화가 먼저 움직이는 까닭

지연이나 오류율은 사용자가 보낸 요청이 실패하거나 늦어져야 값이 오릅니다. 이미 일어난 일을 뒤늦게 보여주는 셈입니다. 포화는 다릅니다. 자원이 아직 요청을 처리하고는 있지만 대기 줄이 길어지는 중이라면, 사용자가 느끼기 전부터 값이 오릅니다.

flowchart TD
    A[들어오는 요청] --> B[자원]
    B -->|처리할 여유 있음| C[바로 처리]
    B -->|처리할 여유 없음| D[대기 줄에 쌓임]
    D --> E[줄이 길어지면 포화가 오른다]

여유가 없어지는 지점을 미리 잡아내면 지연이 오르거나 오류가 나기 전에 손을 쓸 수 있습니다. 병목을 찾을 때 포화를 먼저 보는 것도 같은 까닭입니다. 어느 단계가 가장 먼저 포화되는지가 그 단계가 전체의 상한을 쥔 병목이라는 신호이기 때문입니다.

포화를 낮추는 방법

자원이 포화에 가까워지면 손을 쓸 방법이 몇 가지 있습니다. 수평 확장으로 같은 자원을 여러 대 두면 한 대가 받는 몫이 줄어듭니다. 캐싱으로 자원을 아예 안 거치고 끝내는 요청을 늘리는 방법도 있습니다. 커넥션 풀처럼 미리 만들어 둔 자원의 크기를 조절해 대기 줄이 쌓이는 지점을 옮기기도 합니다.

다만 늘리는 데는 한계가 있습니다. 자원을 나눠 가질 수 없는 경우, 예를 들어 같은 데이터베이스 한 대를 여럿이 같이 쓰는 경우에는 서버를 아무리 늘려도 그 자원의 포화는 그대로입니다.

관련 항목

포화와 같이 재는 골든 시그널

골든 시그널 · 지연 · 오류율 · 처리량 · 초당 요청 수 · 응답 시간

포화가 드러나는 자원

CPU · 메모리 · 디스크 · 대역폭 · 커넥션 풀 · 스레드 풀 · 파일 서술자

포화를 완화하는 방법

수평 확장 · 캐싱 · 부하 분산 · 백프레셔 · 오토스케일링

포화 앞뒤에서 같이 보는 개념

병목 · 사용률 · 큐 · 큐잉 이론 · 리틀의 법칙

포화를 지켜보는 도구

모니터링 · 관측성 · 알림

다른 이름: saturation · 새추레이션 · 포화 상태 · 자원 포화