Logo GH

時間同步和漂移

1)為什麼時間是建築組成部分

時間遍及所有層次:令牌和證書的TTL,RPC截止日期,事件順序,邏輯和分析以及共識和鎖定。數十到數百毫秒的錯誤可能:
  • 打破Kerberos/OAuth/JWT(「iat/nbf/exp」字段);
  • 扭曲度量/軌跡和變量;
  • 輪流經紀人/客戶(taymauts,retrai,指數回落);
  • 擾亂分布式場景中的順序和冪等性。
關鍵術語:
  • Offset(位移)-本地時間與基準的差。
  • Skew(壁板)是節點之間的離線差。
  • 漂移(漂移)-在沒有校正的情況下時鐘的離開速度(ppm)。
  • Jitter-延遲/測量變異性。

2)時間來源和協議

2.1 NTP (Network Time Protocol)

平流(Stratum 1直接來自GNSS/radio,Stratum 2直接來自Stratum 1等)。

通過兩種方式進行校正:
  • slew(平穩的頻率子結構,適用於應用程序);
  • 步伐(時間飛躍;不希望出售)。
  • 實現:chrony,ntpd,systemd-timesyncd。對於服務器-最好是chrony。

2.2 NTS (NTP over TLS)

經過驗證的同步(MITM保護和時間替換)。
建議使用外部時間服務器。

2.3 PTP / IEEE 1588

NIC/ToR中的硬件時間標簽(硬件計時器),毫秒和微秒精度。
模式:邊界/透明時鐘,電信/企業配置文件。
用於p99訂單的硬SLO,HFT/電信/行業。

2.4 GNSS(GPS/GLONASS)和PPS

本地接收器為Stratum 1提供了PPS(脈沖對秒)基準。
重要的是要考慮欺騙/幹擾-放置天線並監視完整性。

2.5個雲

雲源(內部的stratum池)減少了VPC內部的離網和抖動。
對於混合環境-結合本地和雲參考。

3)操作系統和硬件中的時間

TSC/HPET/RTC:現代CPU將TSC保持為快速單調計數器;固定頻率(invariant TSC)。
虛擬化/容器:更頻繁地漂移和「跳躍」。在Hypervisor上-嚴格的超時服務;來訪-chrony。
節能可能會幹擾計時器的單調-檢查BIOS/UEFI選項。

4)單調和「壁」手表

Wall clock(實時,TZ/UTC)-用於日誌、事件標簽、人員。
單調時鐘-用於測量間隔/時間間隔。

在代碼中:
  • Linux: `CLOCK_MONOTONIC`.
  • C++: `std::chrono::steady_clock`.
  • Go:時代的內置單調部分。時間間隔。
  • Java: `System.nanoTime()'用於持續時間,不用於日歷。

規則:截止日期和retrai-單調手表;序列化/生成-在UTC上。

5)Leap 第二/」leap smear」和日歷陷阱

Leap second可以在計時器/度量標準中調用「00:59:60」或重復循環→秒。

方法:
  • Smear(N小時內光滑「塗抹」秒)。
  • 步驟(不需要)。
  • 永遠不要依靠本地TZ/夏季時間來實現邏輯;存儲UTC,在用戶的TZ中顯示。
  • 更新TZDB(時區基礎)-發生政治變化。

6)同意對「墻壁」沒有信任的秩序"

Lamport clocks和Vector clocks是沒有物理時鐘的因果關系。
Hybrid Logical Clocks (HLC)-結合物理時間和計數器,可抵抗小型滑行。
類似於TrueTime的模型-返回「[earliest, latest]」間隔,並要求進行序列化。

7)時間對協議和系統的影響

安全性:Kerberos允許少量skew(通常± 5分鐘),TLS/證書對 'notBefore/notAfter',JWT到'exp/nbf/iat'敏感。
經紀人/隊列:任務截止日期/可視性時間取決於正確的時間。
DBMS/群集:通過「updated_at」/s引入版本沖突-輸入HLC/版本,而不比較「原始」wall-timestamps。
流媒體:區分活動時間和處理時間;調整水上樂園和水上樂園。
克朗/計劃者:漂移導致「翻轉」/雙發射。使用單調間隔和去角鍵。

8)觀察力和時間SLO

8.1個指標

`time.offset_ms'(離職到裁判),時間。jitter_ms`, `stratum`, `root_delay`, `root_dispersion`.

Для PTP: `path_delay`, `grandmaster_offset`, `gm_identity`, `clock_class`.

Alerts: offset>閾值(例如100-500毫秒),源丟失,步進校正。

8.2個診斷

`chronyc tracking/sources/sourcestats`

`ntpq -p`, `ntpstat`

PTP:「pmc」,NIC/ToR供應商實用程序。

8.3 SLO/預算錯誤

SLO示例: "Median offset ≤ 1 ms,p99 offset ≤ 25 ms,無插槽節點步驟;PTP grandmaster failover ≤ 2 s».

9)配置實踐(Linux/containers/K8s)

9.1 chrony(推薦)

示例('/etc/chrony/chrony。conf`):


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
有用的選項:
  • `maxsources`, `minsamples/maxsamples`, `maxslewrate`.
  • 對於隔離的DC,是本地參考+GPS/PPS。

9.2個容器和節點

在主機上進行同步;容器使用核心。
K8s是具有chrony或node-level超時代理的DaemonSet;禁止應用程序帶來時間。

9.3個PTP堆棧

帶有硬件計時器的NIC,PTP守護程序,ToR上的邊界塊。
PTP域分隔(配置文件),防止「不良」大師。

10)時間安全

NTS/身份驗證的 NTP,過濾器和限值(NTP增益-DDoS矢量)。
PTP安全性:L2隔離、ACL多種分類、GM間諜監控。
GNSS:具有良好視野的天線,欺騙/跳躍的細節,倒退源。

11)工程模式和代碼

11.1 截止日期/taymouts

將截止日期存儲為「單調開始+三角洲」而不是絕對的wall-timestamp。
始終在skew上添加庫存(例如2 ×預期p99-skew到TTL令牌)。

11.2版本比較

不要依賴節點之間的「updated_at」。使用:
  • 考試/ETag;
  • HLC/seq;
  • 樂觀的封鎖。

11.3個日誌和跟蹤

始終是UTC;在代理日誌中啟用「time_offset_ms」節點字段。
在跟蹤事件中應用事件時間。

11.4 leap second處理

在所有節點上統一選擇策略(smear/step)。
測試:指標不必在重復二秒鐘「打破」。

12)對域的影響

Auth:令牌-考慮「clock skew allowance」(例如,± 2-5分鐘)。
Payments/時間段:四舍五入間隔而不是絕對時間。
經紀人:中繼時間表-單調小時。
DB/TTL:Redis/DB中的TTL-依靠本地時鐘:放下庫存。
分析:時間聚合-使用單個UTC和註入同步。

13)花花公子(Game Days)

漂移噴射:人為地將手表移至+/− Δ;檢查auth,經紀人,SLO。
NTP外觀:禁用源,跟蹤漂移和自動轉換。
Leap second/Smear:模擬進攻,評估圖表/計時器。
PTP GM failover:檢查切換時間和後退。
VM suspend/resume:確保客人沒有「跳躍」和跳躍。

14)反模式

在沒有HLC/seq的情況下比較不同節點在墻壁時間上的事件。
將時間(帶有TZ)的「字符串本地」聚集在DB而不是UTC中。
允許應用程序做「日期」/「timedatectl設置時間」。
在沒有計劃的情況下在銷售中啟用步驟校正。
忽略TZDB更新和夏令時規則。
將wall clock用於backoff/taymauts/token-TTL,而無需在skew上存貨。
嘗試用物理時間而不是邏輯時間來「治療順序」。

15)實施支票

  • 單一政策:NTP(帶有NTS)或PTP;可信源列表。
  • 節點設置為slew,僅在開始時步。
  • 所有群集上的單個leap second (smear/step)策略。
  • 監視offset,jitter,stratum/PTP指標;Alertes。
  • 應用程序使用單調時鐘進行間隔/截止日期。
  • 對於順序/沖突-HLC/版本,不是wall-timestamps。
  • TTL代幣、證書、時間表中的skew庫存。

[K8s/VM]:在主機上同步,容器無權更改時間。

  • CI/CD日歷中的時間故障文檔和運行手冊。
  • 定期更新TZDB,檢查DST/leap事件中的行為。

16) FAQ

Q: 什麼時候需要PTP而不是NTP?

答:當SLO需要微秒數十微秒(電信/HFT/行業)並且在網絡/卡上支持硬件標簽時,則需要。

Q: clock skew上有多少書簽?

答:對於DC中的典型NTP,數十到數百毫秒(p99);放置2個×庫存。帶有PTP-單位到數十個iss。

Q:如何生存跳躍第二?
答:到處都使用微笑和相同的政策;測試圖形/聚合器和計時器。

Q: 可以依靠墻鐘作為截止日期嗎?

答:沒有。只有單調的手表+skew上的股票。

問:如何在DB中存儲「時間」?
A:在UTC(「timestamptz」)中,以及用於解決沖突的版本/HLC;不要將本地區域存儲在數據中。

17)結果

可靠的時間是協議+策略+代碼中的紀律。同步節點(NTP/NTS或PTP),使用月球時鐘進行間隔,使用UTC進行數據,使用HLC/版本進行順序,在skew上放置庫存,監視offset並定期進行比賽。因此,您將避免身份驗證錯誤,事件差異和不穩定的SLO。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

Telegram
@Gamble_GC
開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。