게임 렉 백서 › L13 서버 구성과 운영
서버 간 시계 차이 Clock skew between servers
원인 ID in-clock-skew · 주 담당 인프라팀·서버 인프라 · 함께 게임개발팀·서버 개발
그림과 실험이 있는 원본 카드로 열기 →
서버마다 시계가 조금씩 다르면 쿨타임·버프·이벤트 시작 판정이 서버마다 어긋납니다.
왜 시간 동기화가 멈춘 서버의 시계가 다른 서버와 수백 ms~수 초 벌어짐 → 그러면 버프 끝나는 시각 같은 절대 시각을 서버 사이에 넘기면 판정이 어긋남 → 화면에서는 이동하니 버프가 사라지거나 쿨타임이 다시 참
- 증상
- 씹힘·롤백
- 요인
- 지연
- 누가 겪나
- 나만
- 언제
- 이동 중·지역 전환 때
- 담당
- 주 담당 인프라팀·서버 인프라 · 함께 게임개발팀·서버 개발
- 게임개발팀 할 일
- 서버 사이에는 절대 시각 대신 남은 시간으로 전달.
- 인프라팀 할 일
- 시간 동기화(NTP·chrony) 감시, 서버 간 시계 차이 경보.
- 수치 감각
- 시간 동기화(NTP·chrony)가 정상이면 같은 데이터센터 서버끼리는 보통 수 ms 안쪽입니다. 동기화가 멈추거나 가상 서버가 오래 멈췄다 풀리면 수백 ms~수 초로 벌어집니다.
- 그래프에서는
- 서서히 오름 · 서버별 시계 오프셋
- 확인할 곳
- 서버마다 chronyc tracking의 System time(시스템 시계와 NTP 시계의 차이)·Last offset과 Ref time(마지막으로 시간 원본의 측정값을 반영한 시각)을 모아 비교
- 이러면 맞음
- 문제 서버의 오프셋이 다른 서버보다 수백 ms 이상 벌어져 있거나 Ref time이 오래전에 멈춰 있고, 판정 어긋남이 그 서버를 오가는 이동에서만 생김
- 이러면 아님
- 모든 서버의 오프셋이 수 ms 안이면 게임 쪽 시간 계산이나 클라이언트의 시계 동기화 오차 쪽
- 확인 수단
- 인프라 도구로 확인(게임 코드 불필요)
- 더 알아보기
- 한 서버의 시계가 한 번에 앞뒤로 뛰는 일은 서버 OS 층의 “시스템 시계 점프 (NTP 스텝)”에서 다룹니다.
출처
- RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
빠른 LAN의 NTP 클라이언트는 보통 수백 µs 안으로 맞음 - chrony – Frequently Asked Questions chrony
보통 컴퓨터 시계의 드리프트는 100ppm 미만이지만 가상 머신은 더 클 수 있음, 일시 정지했다 재개한 가상 머신은 시각이 틀어져 스텝 보정이 필요할 수 있음 - clock_gettime(2) — Linux manual page Linux man-pages
CLOCK_REALTIME은 수동 변경·NTP 보정으로 불연속하게 뛸 수 있고, CLOCK_MONOTONIC은 그런 점프의 영향을 받지 않음 - chronyc(1) chrony
chronyc tracking의 System time(NTP 시계와 시스템 시계의 차이), Last offset(마지막 보정 때 추정한 오프셋), Ref time(시간 원본의 마지막 측정값을 반영한 시각)
함께 보면 좋은 원인
같은 층: L13 서버 구성과 운영
같은 증상(씹힘·롤백)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기