Ժամանակի և դրեյֆի համաժամացումը
1) Ինչո՞ ւ է ժամանակը ճարտարապետական բաղադրիչ
Ժամանակը հասնում է բոլոր շերտերին ՝ TTL տոկեններ և հավաստագրեր, RPC-ի գլուխգործոցներ, իրադարձությունների կարգը, լոգները և վերլուծությունը, համաձայնությունը և արգելափակումը։ Տասնյակ միլիոնավոր մարդկանց սխալ կարող է
կոտրել Kerberos/OAuth/JWT (դաշտեր 'iat/nbf/exp ");
աղավաղել մետրերը/թրեյզերը և ալերտները;
մեծացնել բրոկերները/հաճախորդները (թայմաուտներ, ռետրաններ, էքսպոնենցիալ backoff);
խախտել կարգը և գաղափարախոսությունը բաշխված սցենարներում։
Հիմնական տերմինները
Systset (2019) - ստանդարտ ժամանակի տարբերությունը ստանդարտից։
Skew (հանգույցը) - հանգույցների միջև օֆսեթների տարբերությունը։
Drift (dreift) - ժամացույցի հեռանալու արագությունը (108 մ), երբ հաճախորդների բացակայության դեպքում։
Jitter-ը ձերբակալման փոփոխականությունն է/108։
2) Աղբյուրներն ու ժամանակի արձանագրությունները
2. 1 NTP (Network Time Protocol)
Ստրատները (Stratum 1 - անմիջապես GNSA/ռադիոյից, Stratum 2-ից 'Stratum 1-ից և այլն)։
Ուղղումը երկու կերպ
slew (հաճախականության լողացող ենթակառուցվածք, անվտանգ դիմումների համար);
step (ժամանակի ցատկ; անցանկալի է երկարության վրա)։
Իրականացումները ՝ chrony, ntpd, medemd-timesyncd։ Մրցույթի համար 'www.chrony։
2. 2 NTS (NTP over TLS)
Վավերացված համաժամացում (պաշտպանություն MITM-ից և ժամանակի փոխարինումից)։
Առաջարկվում է արտաքին աշխատանքային ժամանակի համար։
2. 3 PTP / IEEE 1588
Ժամանակի ապարատային պարամետրերը (hardult timestamping) NIC/Windows R-ում, միլիոնավոր և միկրովայրկյան ճշգրտությունը։
Ռեժիմները ՝ boundary/transparent clock, ավելացրեցին հեռուստացույցով/enterprise։
Օգտագործել կոշտ SLO-ով p99 կարգի, HFT/telecom/արդյունաբերություն։
2. 4 GNSA (GPS/GLONASS) և PPS
Տեղական ընդունիչները տալիս են PPS (pulse-per-second) ստանդարտ Stratum 1-ի համար։
Կարևոր է հաշվի առնել, թե ինչպես կարելի է վերբեռնել։
2. 5 Ամպեր
Ամպային աղբյուրները (ներքին stratum-puls) նվազեցնում են offset և ջիթերը CPC-ի ներսում։
Մետրոպոլիտենի միջավայրերի համար տեղական և ամպային հանրաքվեներ անցկացրեք։
3) Ժամանակ ՕՀ-ում և երկաթում
TSC/HPET/RTC: ժամանակակից CPU-ն պահում է TSC-ն որպես արագ մոնոտոնային հաշվիչ։ ամրացրեք հաճախականությունը (www.ari.ru TSC)։
Վիրտուալիզացիա/բեռնարկղեր 'թռիչք և «ցատկ» ավելի հաճախ։ Հիպերվիզորի վրա խիստ թայմ ծառայությունն է։ հյուրերում 'chrony։
Էներգախնայողությունը կարող է խանգարել թայմերի մոնոտոնիան, ստուգեք RF/UEFI տարբերակները։
4) Մոնոտոնային և «պողպատե» ժամացույց
Wall-clock (իրական ժամանակը, TZ/UTC) - լոգարանների, իրադարձությունների նշանների, մարդկանց համար։
Monotonic clock-ը ընդմիջումները/թայմաուտները չափելու համար է։
Կոդում
Linux: `CLOCK_MONOTONIC`.
C++: `std::chrono::steady_clock`.
Go 'ներկառուցված մոնոտոնային մասերը' Time։ Time '-ը ընդմիջումներում։
Java: `System. nanoTime () "երկարությունների համար, ոչ օրացույցի համար։
Կանոն 'dedline և retray - մոնոտոնային ժամացույցի վրա։ հեռուստացույց/լոգոն - UTC-ում։
5) Leap second/» leap smear» և օրացուցային թակարդներ
Leap second-ը կարող է զանգահարել «00: 59:60» կամ վայրկյանի կրկնությունը թեյմերում/մետրերում։
Մոտեցումներ
Smear (լողացող «տաքացում» N ժամի ընթացքում)։
Քայլ (անցանկալի)։
Երբեք մի ապավինեք տեղական TZ/ամռանը տրամաբանության համար։ պահեք UTC-ը, ցույց տվեք օգտագործողի TZ-ում։
Թարմացրեք TZDB (ժամացույցի գոտիների հիմքը), քաղաքական փոփոխությունները տեղի են ունենում։
6) Առանց «պատի» նկատմամբ վստահության
Lampional clocks և Vector clocks-ը պատճառահետևանքային հարաբերություններ են առանց ֆիզիկական ժամերի։
Hybrid Logical Clocks (HLC) - միավորում են ֆիզիկական ժամանակը և հաշվիչը, դիմացկուն փոքր skew։
Windows Time-ի նման մոդելները վերադարձնում են ww.earliest, latest) "և պահանջում են commit-wait սերիայի համար։
7) Ժամանակի ազդեցությունը արձանագրությունների և համակարգերի վրա
Անվտանգությունը 'Kerberos թույլ է տալիս փոքրիկ skew (սովորաբար 355 րոպե), TSA/հավաստագրերը զգայուն են "www.tBefore/wwww.tAfter", JWT k' exp/nbf/iat "։
Բրոկերները/հերթերը 'առաջադրանքների/visibility timeout կախված են ճիշտ ժամանակից։
SUBD/կլաստերներ 'տարբերակների կոնֆլիկտը' համաձայն «divated _ at »/ts - մուտքագրեք HLC/տարբերակը, և մի համեմատեք« հում »wall-timestamps-ը։
Սթրիմ 'տարբերեք event time և processing Time; տեղադրեք watermarks և lateness։
Քրոն/պլանավորողները 'դրեյֆը հանգեցնում է «կպչուն »/կրկնակի մեկնարկի։ Օգտագործեք մոնոտոնային ընդմիջումներ և բանալիներ։
8) Դիտարկումը և SLO ժամանակը
8. 1 Մետրիկա
`time. www.set _ 24« (offset հանրաքվեին), »time. jitter_ms`, `stratum`, `root_delay`, `root_dispersion`.
Для PTP: `path_delay`, `grandmaster_offset`, `gm_identity`, `clock_class`.
Ալբերտ 'օֆսեթ> շեմն (օրինակ, 100-500 մզ), աղբյուրի կորցումը, step-2019։
8. 2 Ախտորոշում
`chronyc tracking/sources/sourcestats`
`ntpq -p`, `ntpstat`
PTP: «pmc», NIC/Windows R վենդեր։
8. 3 SLO/սխալ բյուջե
SLO-ի օրինակը ՝ "Japaneset no. 1 to, p99 set no 25 ruble, wwww.step prod-հանգույցներում։ PTP grandmaster failover ≤ 2 s».
9) Կազմաձևման պրակտիկան (Linux/www.ainers/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-ում DaemonLine-ը chrony կամ node-level Time-գործակալ է։ արգելեք ժամանակի բերումը ծրագրերով։
9. 3 PTP stek
NIC-ը ապարատային timestamping, PTP դեմոն, boundary clocks CorpR-ում։
PTP (պրոֆիլներ), պաշտպանություն «վատ» grandmaster-ից։
10) Ժամանակի անվտանգությունը
NTS/վավերացված NTP, ֆիլտրեր և rate-limit (NTP-2019 - DDoS վեկտոր)։
PTP 210 'L2, ACL մեկուսացումը բազմազանության վրա, GM spoofing-ը։
GNSA 'ալեհավաքներ լավ ակնարկով, սպուֆինգի/ջամինգի, fallback աղբյուրների։
11) Ինժեներական արտոնագրեր և կոդը
11. 1 Dedline/timauta
Պահեք dedlins որպես «մոնոտոնային սկիզբը + դելտա», ոչ թե բացարձակ wall-timestamp։
Միշտ ավելացրեք skew (օրինակ, 2 հազար սպասվող p99-skew դեպի TTL Token)։
11. 2 Տարբերակների համեմատություն
Մի ապավինեք «contated _ at» հանգույցների միջև։ Օգտագործեք
տարբերակումը/ETag;
HLC/seq;
լավատեսական արգելափակումներ։
11. 3 Թիթեղներ և հետքեր
Միշտ UTC; միացրեք դաշտը 'time _ entset _ 24' հանգույց գործակալի լոգում։
Թափահարեք event-time-ը ուղեղի իրադարձություններում։
11. 4 Leap second
Ընտրեք քաղաքականությունը (smear/step) միատեսակ բոլոր հանգույցներով։
Փորձարկեք 'մետրերը չպետք է «կոտրվեն» մեկ վայրկյանում։
12) Ալյումինի ազդեցությունը
Auth: հոսանքներ - հաշվի առեք «clock skew allowae» (օրինակ ՝ 242-5 րոպե)։
Payments/ժամանակի հատվածները 'կլորացրեք ընդմիջումները, ոչ թե բացարձակ ժամանակը։
Բրոկերներ 'գետերի գրաֆիկները մոնոտոնային ժամացույցի վրա են։
BD/TTL: TTL Redis/DB-ում, ապավինում է տեղական ժամացույցներին 'տեղադրեք պահուստը։
Վերլուծաբան 'ժամանակի ագրեգացիան օգտագործեք միասնական UTC-ն և ingestion-ը։
13) Թեստային պլեյբուկները (Game Days)
Drift inj.ru: Արհեստականորեն հեռացնել ժամացույցը +/www.E.ru; ստուգել auth, brocers, SLO։
NTP entage: անջատել աղբյուրները, հետևել drift-ը և ինքնահարգանքը։
Leap second/smear 'leap հարձակման իմիտացիա, գծապատկերների/թայմերների գնահատում։
PTP GM failover 'ստուգել մրցույթի ժամանակը և օֆսեթը հետո։
VM suspend/resume-ը 'համոզվել, որ չկա «ցատկ» և step հյուրերի վրա։
14) Anti-patterna
Համեմատել տարբեր հանգույցների իրադարձությունները wall-ժամանակով առանց HLC/seq։
«Կառուցվածքային լոկալի» կլաստերը (TZ-ից) BD-ում UTC-ի փոխարեն։
Թույլ տալ ծրագրերին անել «date-s »/« timedatectl 2019-time»։
Ներառել step-2019 վաճառքում առանց պլանավորման։
Անտեսել TZDB նորարարությունը և անցման կանոնները ամռան ժամանակ։
Օգտագործել wall-clock-ը backoff/timouts/token-TTL-ի համար առանց skew-ի։
Փորձել «բուժել կարգը» ֆիզիկական ժամանակի փոխարեն տրամաբանական ժամերի փոխարեն։
15) Ներդրման չեկի ցուցակ
- Միասնական քաղաքականություն ՝ NTP (NTS) կամ PTP; վստահելի աղբյուրների ցանկը։
- Մոսկվան տեղադրված է սայթաքուն, step միայն սկզբում։
- Leap second (smear/step) միասնական քաղաքականությունը բոլոր կլաստերներով։
- Դելֆսեթ, ջիթեր, stratum/PTP ցուցանիշներ; ալերտներ։
- Ծրագրերը օգտագործում են միապաղաղ ժամացույց ընդմիջումների/դադարների համար։
- Կարգի/կոնֆլիկտների համար HLC/տարբերակը, ոչ wall-timestamps։
- Skew պաշարները TTL թոկեններում, վկայագրերում, գրաֆիկներում։
- K8s/VM 'համաժամացումը հանրակացարաններում, բեռնարկղերը առանց ճիշտ փոխելու ժամանակը։
- Windows և runbooks ժամանակի, game days CI/CD օրացույցի մեջ։
- TZDB նորարարությունը, DST/leap իրադարձությունների վարքագծի ստուգումը։
16) FAQ
Q: Ե՞ րբ է անհրաժեշտ PTP-ը NTP-ի փոխարեն։
A: Երբ SLO-ն պահանջում է միկրովայրկյան տասնյակ միկրովայրկյաններ (հեռուստացույց/HFT/արդյունաբերություն) և ցանցում/քարտեզներում ապարատային նշանների աջակցություն կա։
Q 'Որքա՞ ն տեղադրեք clock skew-ի վրա։
A 'Տիպիկ NTP-ի համար DC-ում տասնյակ-հարյուր ms (p99); դրեք 2 հազար ռուբլի։ PTP-ի հետ 'մեկ-տասնյակ iss։
Q 'Ինչպե՞ ս գոյատևել leap second
A 'Օգտագործել smear և նույն քաղաքականությունը ամենուր. փորձարկել գրաֆիկները/ագրեգատորները և թայմերը։
Q 'Կարո՞ ղ եք ապավինել wall clock-ին։
Ա 'Ոչ։ Միայն մոնոտոնային ժամացույցներ + skew։
Q 'Ինչպե՞ ս պահել «ժամանակը» BD-ում։
A: UTC («timestamptz»), գումարած/HLC տարբերակները հակամարտությունների լուծման համար։ մի պահեք տեղական տարածքները տվյալների մեջ։
17) Արդյունքները
Հուսալի ժամանակը + քաղաքականության + կարգապահությունն է կոդում։ Համաժամեցեք կոդերը (NTP/NTS կամ PTP), օգտագործեք մոնոտոնային ժամացույցներ ընդմիջումների համար, UTC տվյալների համար, HLC/տարբերակները, տեղադրեք skew պաշարները, վերահսկեք օֆսեթը և պարբերաբար կատարեք game days։ Այսպիսով, դուք նկարագրում եք «առեղծվածային» ուղիները, տարաձայնությունները իրադարձություններում և անկայուն SLO-ում։