jitter란?
jitter는 어떤 값이 일정하지 않고 흔들리는 정도를 말함
네트워크에서 jitter는 패킷 도착 시간의 흔들림 정도를 의미한다
latency 와 jitter 차이
latency
- 패킷이 출발해서 도착할 때까지 걸리는 시간
- 쉽게 말하면
얼마나 늦게 도착하냐 - 예시 : 매번 50ms 뒤에 패킷 도착
jitter
- 패킷마다 도착 시간이 얼마나 들쭉날쭉한지
- 쉽게 말하면
매번 얼마나 다르게 도착하냐 - 예시 : 첫번째 패킷은 30ms, 두번째 패킷은 90ms, 세번째 패킷은 40ms 뒤에 도착
평균 latency 가 낮아도 패킷 도착 시간이 계속 흔들리면 jitter가 큰 상태이다
예시
음성 통화를 한다고 가정
- 첫번째 음성 패킷 : 20ms 뒤에 도착
- 두번째 음성 패킷 : 21ms 뒤에 도착
- 세번째 음성 패킷 : 20ms 뒤에 도착
이러면 거의 일정하게 도착하므로 자연스럽게 들림
반대로
- 첫번째 음성 패킷 : 20ms 뒤에 도착
- 두번째 음성 패킷 : 200ms 뒤에 도착
- 세번째 음성 패킷 : 10ms 뒤에 도착
이러면 도착 시간이 들쭉날쭉해서 중간에 말이 끊기거나 뭉개져서 들릴 수 있다
이 도착 시간의 들쭉날쭉함이 jitter
왜 문제가 될까?
일반적인 웹 페이지 요청이나 파일 다운로드에서는 조금 느려지는 정도로 끝날 수 있다
하지만 실시간 서비스에서는 바로 티가 남
- 음성 통화
- 화상 회의
- WebRTC
- 온라인 게임
- 실시간 스트리밍
이런 서비스는 패킷이 그냥 도착하는 것보다 일정한 간격으로 도착하는 것이 중요하다
패킷이 너무 늦게 도착하면 이미 재생할 타이밍이 지나버렸기 때문에 버려질 수도 있음
jitter가 생기는 이유
- 중간 네트워크 장비에서 패킷이 대기함
- 네트워크가 순간적으로 혼잡해짐
- Wi-Fi 신호가 불안정함
- 패킷 손실이 발생해서 재전송함
- 서버 또는 클라이언트의 처리 시간이 흔들림
즉, 패킷이 지나가는 길이나 처리 시간이 매번 조금씩 달라지면 jitter가 발생한다
jitter buffer
실시간 통신에서는 jitter buffer 라는 것도 사용한다
빨리 도착한 패킷을 바로 재생하지 않고 아주 잠깐 모아뒀다가 일정한 간격으로 재생하는 방식
너무 빨리 온 패킷과 조금 늦게 온 패킷의 차이를 buffer 로 흡수해서 음성이나 영상이 덜 끊기게 만든다
대신 buffer 를 너무 크게 잡으면 끊김은 줄어들 수 있지만 전체 지연 시간은 늘어난다
config 에서 말하는 jitter
네트워크 말고 config 에서도 jitter 라는 단어를 자주 볼 수 있다
예를 들면 retry, polling, scheduler 같은 설정에서
고정된 지연 시간에 랜덤한 흔들림을 일부러 추가하는 것을 jitter 라고 부르기도 한다
조금 더 정확히 말하면
jitter = 랜덤 지연값 자체
라기보다는
기준 delay 또는 backoff 값에 섞는 랜덤한 변동폭
에 가깝다
그래서 retry jitter, backoff jitter, random jitter, jittered backoff 같은 표현으로도 자주 보인다
예시
retry:
delay: 1000ms
jitter: 500ms대충 이런 설정이 있다면
- 기본 지연 시간은 1000ms
- jitter 는 500ms
- 실제 재시도는 1000ms 에 정확히 맞춰서 하지 않음
- 1000ms 근처에서 랜덤하게 흔들어서 재시도함
즉, 1000ms + 랜덤 변동폭 처럼 동작한다고 보면 된다
예를 들면 이런 식이다
- 첫번째 클라이언트 : 820ms 뒤에 재시도
- 두번째 클라이언트 : 1160ms 뒤에 재시도
- 세번째 클라이언트 : 1390ms 뒤에 재시도
왜 일부러 jitter를 넣을까?
모든 클라이언트가 같은 시간에 동시에 재시도하면 서버에 순간적으로 요청이 몰릴 수 있다
예를 들어 서버 장애로 요청이 실패했다고 가정
- 클라이언트 1만개가 동시에 실패함
- 전부 1초 뒤에 재시도하도록 설정되어 있음
- 1초 뒤에 다시 클라이언트 1만개가 동시에 요청함
- 서버가 회복되기도 전에 다시 부하가 몰림
이런 상황을 줄이려고 재시도 시간을 조금씩 랜덤하게 흩뿌린다
즉, config 에서의 jitter는 보통 문제가 아니라 문제를 줄이기 위한 의도적인 랜덤 지연 이다
자주 보이는 곳은 이런 곳들
- retry backoff
- polling interval
- scheduled job
- cache expire time
- rate limit 재시도 시간
정리
- latency 는
패킷이 얼마나 늦게 도착하냐 - jitter 는
패킷 도착 시간이 얼마나 흔들리냐 - 네트워크 jitter 는
패킷 도착 간격의 불규칙함 - 실시간 통신에서는 latency 만큼 jitter 도 중요함
- config 에서 jitter 는
동시에 몰리지 않도록 일부러 추가하는 랜덤 지연으로 쓰이기도 함
한줄로 정리하면
jitter = 시간 간격이 고정되지 않고 들쭉날쭉하게 흔들리는 정도