Logo GH

시간 동기화 및 드리프트

1) 시간이 건축 구성 요소 인 이유

시간은 TTL 토큰 및 인증서, RPC 마감일, 이벤트 순서, 로그 및 분석, 합의 및 잠금 등 모든 계층으로 분류됩니다. 수십 ~ 수백 밀리 초 동안의 오류는 다음과 같습니다

Kerberos/OAuth/JWT 중단 ('iat/nbf/exp' 필드);

메트릭/트레일 및 경고를 왜곡;

드롭 브로커/클라이언트 (타임 아웃, 배상, 지수 백오프);

분산 시나리오에서 순서와 demotency를 방해합니다.

주요 용어:
  • 오프셋-현지 시간과 참조의 차이.
  • Skew-노드 간 오프셋 차이.
  • 드리프트-수정이없는 시계 드리프트 속도 (ppm).
  • 지터-지연/측정 변동성.

2) 소스 및 시간 프로토콜

2. 1 NTP (네트워크 시간 프로토콜)

Strata (Stratum 1-GNSS/radio에서 직접, Stratum 2-Stratum 1 등에서 직접).

두 가지 방법으로 수정:
  • 수감 (부드러운 주파수 조정, 응용에 안전);
  • 단계 (시간 점프; proda에서는 바람직하지 않습니다).
  • 구현: chrony, ntpd, systemd-timesyncd. 서버의 경우 크로니보다 선호됩니다.

2. 2 NTS (TLS보다 NTP)

인증 된 동기화 (MITM 보호 및 시간 스푸핑).
외부 시간 서버에 권장됩니다.

2. 3 PTP/IEEE 1588

NIC/ToR, 밀리 초 및 마이크로 초 정밀도의 하드웨어 타임 스탬프.
모드: 경계/투명 시계, 통신/엔터프라이즈 프로필.
p99 주문, HFT/통신/산업에서 하드 SLO에 사용하십시오.

2. 4 GNSS (GPS/GLONASS) 및 PPS

로컬 수신기는 Stratum 1에 대한 PPS (초당 펄스) 참조를 제공합니다.
스푸핑/재밍-안테나 설치 및 무결성 모니터링을 고려해야합니다.

2. 구름 5 개

클라우드 소스 (내부 지층 풀) 는 VPC 내의 오프셋 및 지터를 줄입니다.

하이브리드 환경의 경우 로컬 및 클라우드 참조를 결합

3) OS 및 하드웨어 시간

TSC/HPET/RTC: 최신 CPU는 TSC를 빠른 모노톤 카운터로 유지합니다. 주파수를 수정합니다 (불변 TSC).
가상화/컨테이너: 드리프트와 "점프" 가 더 자주 발생합니다. 하이퍼 바이저에서-엄격한 시간 서비스; 멀리-연대기.
전원 절약은 타이머 단조를 방해 할 수 있습니다-BIOS/UEFI 옵션을 확인하십시오.

4) 단조롭고 "벽" 시계

벽시계 (실시간, TZ/UTC) -로그, 이벤트 태그, 사람 용.
간격/타임 아웃 측정을위한 단조로운 시계.

코드에서:
  • Linux: 'CLOCK _ MONOTONIC'.
  • C++: 'std:: chrono:: stady _ clock'.
  • 이동: 내장 모노톤 부품 시간. 시간 '간격으로.
  • 자바: '시스템. 달력이 아닌 지속 시간에 대한 nanoTime () '

규칙: 마감일 및 퇴각 - 단조로운 시계; UTC에서 직렬화/로깅.

5) 두 번째 도약/" 도약 도말 "및 캘린더 트랩

두 번째 도약은 "00:59:60" 을 유발하거나 타이머/메트릭스에서 두 번째 → 루프를 반복 할 수 있습니다.

접근 방식:
  • 스미어 (N 시간에 1 초의 부드러운 번짐).
  • 단계 (바람직하지 않음).
  • 논리에 대한 로컬 TZ/일광 절약 시간제에 의존하지 마십시오. UTC 상점, 사용자 TZ에 표시하십시오.
  • TZDB (시간대 기반) 업데이트-정치적 변화가 발생합니다.

6) "벽" 을 신뢰하지 않고 질서의 조정

램 포트 시계와 벡터 시계는 물리적 시계가없는 인과 관계입니다.
HLC (Hybrid Logical Clocks) - 작은 시간에 내성이있는 물리적 시간과 카운터를 결합합니다.
TrueTime과 같은 모델-간격 '[최신, 최신]' 을 반환하고 직렬화를 위해 커밋 대기가 필요합니다.

7) 프로토콜 및 시스템에 대한 시간 영향

보안: Kerberos는 작은 왜곡 (일반적으로 λ5 분) 을 허용합니다. SL/인증서는 'notBe전/notAfter', JWT는 'exp/nbf/iat' 에 민감합니다.
중개인/대기열: 작업 마감일/가시성 시간 초과는 정확한 시간에 따라 다릅니다.
DBMS/클러스터: '업데이트 된 _ at '/ts에 의한 버전 충돌 - "원시" 벽 타임 스탬프를 비교하지 않고 HLC/버전으로 입력하십시오.
스트리밍: 이벤트 시간과 처리 시간을 구분합니다. 워터 마크와 지연 시간을 구성하십시오.
크론/플래너: 드리프트는 "고착 "/이중 시작으로 이어집니다. 모노톤 간격 및 디드 업 키를 사용하십시오.

8) 관찰 및 시간 SLO

8. 1 메트릭

'시간. (PHP 3 = 3.0.6, PHP 4) jitter _ ms ',' stratum ',' rout _ delay ',' rout _ dispersion '.
PTP: 'path _ delay', 'grandmaster _ offset', 'gm _ identity', 'clock _ class'.
경고: 오프셋> 임계 값 (예: 100-500 ms), 소스 손실, 단계 수정.

8. 2 진단

'크로니크 추적/소스/소스'

'ntpq -p', 'ntpstat'

PTP: 'pmc', 공급 업체 NIC/ToR 유틸리티.

8. 3 SLO/잘못된 예산

SLO 예: "중앙 오프셋 PTP 그랜드 마스터 장애

9) 설정 관행 (Linux/컨테이너/K8)

9. 1 크로니 (권장)

예 ('/등/크로니/크로니. (PHP 3 = 3.06


pool time. example. org iburst maxsamples 9 nts makestep 0. 5 1 # one step at big error at start rtcsync # synchronize hardware clock leapsectz right/UTC # leap seconds from tzdata driftfile/var/lib/chrony/drift
유용한 옵션:
  • 'maxsource', 'minsample/maxsamples', 'maxslewrate'.
  • 격리 된 DC-로컬 참조 + GPS/PPS.

9. 컨테이너 및 어셈블리 2 개

호스트에서 동기화; 컨테이너는 코어를 사용합니다.
K8에서 - 크로니 또는 노드 레벨 타임 에이전트가있는 DaemonSet; 추가 시간으로부터 응용 프로그램을 방지합니다.

9. 3 PTP 스택

ToR의 하드웨어 타임 스탬핑, PTP 데몬, 경계 시계가있는 NIC.
PTP 도메인 다양성 (프로파일), "나쁜" 그랜드 마스터로부터의 보호.

10) 시간 보안

NTS/인증 된 NTP, 필터 및 속도 제한 (NTP- 게인 - DDoS 벡터).
PTP 보안: L2 격리, 멀티 캐스트 ACL, GM 스푸핑 모니터링.
GNSS: 가시성이 우수한 안테나, 스푸핑/재밍 데텍 타, 대체 소스.

11) 엔지니어링 패턴 및 코드

11. 마감일 1 개/시간 초과

절대 벽 타임 스탬프가 아닌 "모노톤 시작 + 델타" 로 마감일을 저장하십시오.
항상 왜곡에 스톡을 추가하십시오 (예: TTL 토큰에 예상 p99-skew의 2 배).

11. 2 버전 비교

노드 간 '업데이트 된 _ at' 에 의존하지 마십시오. 사용하기:
  • verioning/ETag;
  • HLC/seq;
  • 낙관적 인 막힘.

11. 3 개의 통나무와 흔적

항상 UTC; 에이전트 로그에 호스트의 'time _ offset _ ms' 필드를 포함합니다.
추적 이벤트에서 접합 이벤트 시간.

11. 4 처리 도약 초

모든 노드에서 정책 (번짐/단계) 을 균일하게 선택하십시오.
테스트: 메트릭은 1 초 안에 "파괴" 해서는 안됩니다.

12) 도메인에 미치는 영향

Auth: 토큰-" 클럭 왜곡 허용 한도 "(예: 8-5 분) 를 고려하십시오.
지불/시간 세그먼트: 절대 시간이 아닌 반올림 간격.
중개인: 리트레이 일정-단조로운 시계.
DB/TTL: Redis/DB의 TTL-로컬 시계에 의존합니다.
분석 - 시간 집계 - 단일 UTC 및 섭취 동기화를 사용하십시오.

13) 테스트 플레이 북 (게임 데이)

드리프트 주입: 인공적으로 시계를 +/- 중개인, SLO를 확인하십시오.
NTP 중단: 소스 비활성화, 드리프트 추적 및 자동 스위치.
두 번째 도약/번짐: 도약 발생 시뮬레이션, 일정/시간 평가.
PTP GM 장애: 스위치 시간을 확인하고 오프셋 후.
VM 일시 중지/재개: "점프" 가 없는지 확인하고 손님을 밟으십시오.

14) 반 패턴

HLC/seq없이 벽 시간에 다른 노드의 이벤트를 비교하십시오.
UTC 대신 데이터베이스에 "문자열 로케일" 시간 (TZ 포함) 을 넣습니다.
응용 프로그램이 '날짜 -s '/' timedatectl 설정 시간' 을 수행하도록 허용하십시오.
계획없이 제품에 대한 단계 수정을 포함하십시오.
TZDB 업데이트 및 일광 절약 시간 규칙을 무시하십시오.
기울기 마진없이 백오프/타임 아웃/토큰 -TTL에 벽 시계를 사용하십시오.
논리적 시계 대신 물리적 시간으로 "순서를 치유" 하려고합니다.

15) 구현 점검표

  • 단일 정책: NTP (NTS 포함) 또는 PTP; 신뢰할 수있는 출처 목록.
  • 노드는 시작시 단계만 수행하도록 구성됩니다.
  • 클러스터 전체에서 단일 도약 초 (번짐/단계) 정책.
  • 오프셋, 지터, 지층/PTP 지표 모니터링; 경고.
  • 응용 프로그램은 간격/마감일에 모노톤 시간을 사용합니다.
  • 주문/충돌의 경우-벽 타임 스탬프가 아닌 HLC/버전.
  • TTL 토큰, 인증서, 일정이 왜곡 된 주식.
  • K8/VM: 호스트에 대한 동기화, 시간 변경 권한이없는 컨테이너.
  • 시간 실패에 관한 문서 및 런북, CI/CD 캘린더의 게임 일.
  • 정기적 인 TZDB 업데이트, DST/도약 이벤트의 동작 확인.

16) FAQ

Q: NTP 대신 PTP가 언제 필요합니까?
A: SLO에 마이크로 초 수십 마이크로 초 (통신/HFT/산업) 가 필요하고 네트워크/카드에 하드웨어 라벨이 지원되는 경우.

Q: 시계 왜곡을 얼마나 넣어야합니까?
A: DC의 일반적인 NTP의 경우-수십 ~ 수백 ms (p99); 2 스톡 × 를 내립니다. PTP-수십 μs 단위.

Q: 두 번째 도약에서 살아남는 방법?
A: 모든 곳에서 번짐 및 동일한 정책을 사용하십시오. 테스트 일정/애그리 게이터 및 타이머.

Q: 마감일을 위해 벽시계에 의존 할 수 있습니까?
A: 아니요. 모노톤 시간 만 스큐 당 + 재고.

Q: 데이터베이스에 "시간" 을 저장하는 방법?
A: UTC ('timestamptz') 에서 충돌 해결을위한 플러스/HLC 버전; 로컬 영역을 데이터에 저장하지 마십시오.

17) 총계

안정적인 시간은 코드의 프로토콜 + 정책 + 규율입니다. 동기화 노드 (NTP/NTS 또는 PTP) 는 간격에 모노톤 시간, 데이터에 대해 UTC, 주문에 대한 HLC/버전, 왜곡에 주식을 배치하고 오프셋을 모니터링하며 정기적으로 게임 일을 보냅니다. 이것은 "신비한" 인증 버그, 이벤트 불일치 및 불안정한 SLO를 피할 것입니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.