Wagt zolaklary we duýgurlyk
1) Esasy ýörelgeler
UTC ulag we saklamak hökmünde. Ähli serwer wagt sortlary we sortlama açarlary - UTC-de. Ýerli "diwar" wagtyna - gyrada (edge/UI) ýa-da ýörite bellenen format hyzmatynda üýtgetmek.
Zona ≠ süýşmek. 'Europeewropa/Kyiv' diňe 'UTC + 02:00' däl: düzgünler wagtyň geçmegi bilen üýtgeýär. IANA (tzdb) identifikatorlaryny "+ 03:00" däl-de, ulanyjynyň/obýektiň profilinde saklaň.
Sagadyň anyk tapawudy.
Wall clock (adam wagty, DST-e sezewar).
UTC clock (ähliumumy masştab).
Monotonic clock (dowamlylygy we wagtyny ölçemek üçin). "Diwar" sagadynda hiç wagt wagt hasaplamaň.
Wagtyň titremesine çydamlylyk we çydamlylyk. Ulgamlar NTP/süýşmegiň ownuk böküşlerini dogry başdan geçirmeli.
2) Maglumatlaryň nusgasy we API-şertnamalary
Wakalar: 'occurred _ at' (UTC, RFC 3339), 'timezone' (IANA), goşmaça 'wall _ time' (döredilende süýşmegi saklamak bilen lokal).
Döwürler: UTC-de '[start, end)' ýarym ýapyk aralyklaryny ulanyň; okalýan programmalar üçin asyl beýany + zonany saklaň.
Gaýtalanýan düzgünler: RRULE/cron-ekwiwalent + IANA zonasy hökmünde seriýalaň. Meýilnamalaşdyrmak DST düşünýän hereketlendirijini tabşyryň.
API-de wagt formaty: ISO 8601/RFC 3339 aç-açan 'Z' ýa-da göçürme bilen, mysal üçin '2025-10-31T17: 00: 00Z'. Süýşmän "ýüzýän" setirleri geçirmäň.
Wersiýalaşdyrmak: Wagtyň iş kadalarynyň üýtgemegi (mysal üçin, ýurduň hemişelik UTC + 1-e geçmegi) - konfigurasiýalaryň göçmegi we meýilnamalary gaýtadan hasaplamak; wersiýalaryň shemalarynda göz öňünde tutuň.
3) Tomus wagty (DST): Ambiguites and pass
Köpeldilen ýerli döwürler. Güýzde ýerli "02:30" iki gezek bolup biler. Zolakda meýilleşdiriji '2025-10-26T02: 30 + 03' we '2025-10-26T02: 30 + 02' tapawutlandyrmalydyr.
Sypdyrylan ýerli döwürler. Ýazda minutlyk aralyklar "bökýär" (mysal üçin '02: 00-03: 00' ýok). Meýilnamalaşdyryjy strategiýany kesgitlemäge borçludyr: '03:00' -a geçirmek, sypdyrmak ýa-da "mümkin boldugyça gysga wagtda" ýerine ýetirmek.
Maslahat: tabşyrygy "ýerli düzgün + zona" hökmünde saklaň we hakyky ýagdaýlary DST-de saýlanan syýasaty düzüp, öňünden UTC-de (rolling window) materiallaşdyryň.
4) Leap seconds и time smear
Leap second. Goşmaça sekunt käwagt UTC-e girizilýär. Işewürlik prosesleriniň köpüsi 23:59:60 "görmeli" däldir.
Smear. Käbir gurşawlar böküşden gaça durmak üçin düzedişleri penjirä ýumşak paýlaýarlar (mysal üçin 12 sagatdan ±).
Amal: Tutuş klaster üçin ýeke-täk wagt syýasatyny (NTP/smir) utgaşdyryň, meta-maglumatlara giriň we runbook-da saklaň.
5) Meýilleşdirijiler we cron-patternler
"Ýönekeý cron" howpy. Klassiki cron DST we IANA zolaklaryny bilmeýär. Meýilnama zolaga birikdirilen hereketlendirijileri ulanyň (Kwartz synpy, Bulut Scheduler hyzmatlary, Kubernetes CronJob dolandyryjy/dolandyryş arkaly).
Meýilnamalaryň materiallaşdyrylmagy. Ygtybarlylyk üçin UTC-de indiki N uçuşlary materiallaşdyryň (mysal üçin 7-30 gün), cursor saklaň we DST-de syýasaty kesgitläň.
Wezipeleriň idempotentligi. Ключ deduplication: `(job_id, scheduled_at_utc)`; gaýtadan başlamak zyýanly täsirleri köpeltmeli däldir.
Sagadyň süýşmegi. Uzak arakesmelerde/hadysalarda catch-up ýa-da skip etmek barada karar beriň. per-job.
6) Teswirnamalardaky we nobatlardaky wagt
Waka tekerleri (Kafka/Pulsar). 'event _ time' we 'ingest _ time' aýratynlykda saklaň. Retrospektiv hasaplamalar üçin 'event _ time' ulanyň.
Idempotent sarp edijiler. Gaýtadan eltilende, partiýanyň üýtgemegine däl-de, wakanyň açaryna we 'event _ time' -a gönükdiriň.
Penjireleri tertipläň. "Dükanyň ýerli wagty boýunça 24 sagadyň dowamynda" penjirelerini belli bir senede belli bir zonanyň ýerli düzgünlerinden alnan UTC aralyklary hökmünde hasaplaň.
7) Loglar, yzarlamalar, metrikler
Bitewi taýmzon standartı: UTC-daky ähli tehniki loglar we metrikler ('Z' bilen). Dashbordlarda görkezmek - ulanyjy üçin lokallaşdyrylan.
Yzarlamalar: 'trace _ start _ utc', 'duration _ ms' -ni monoton sagatda geçiriň. "Diwar" wagtyny hiç haçan aýyrmaň.
Iş hasabatlary: UTC boýunça däl-de, domen zolagynda "gije-gündizi" düzüň (mysal üçin, 'Europeewropa/Pari Paris' fransuz salgydy üçin). Anyk resminamalaşdyryň.
8) Ulanyjy profilleri we mazmuny
Профиль: `preferred_timezone` (IANA), `preferred_locale`, `currency`, `week_start` (Mon/Sun).
Multizon häsiýetleri: toparlar/guramalar üçin gatnaşyjynyň şahsy zolagyna garamazdan "domen zolagyny" (mysal üçin, dükan/edara görnüşli tarap) saklaň.
Bellikler: ulanyjynyň zolagynda "asuda sagatlary" hasaplaň; DST howpsuzlygy bilen UTC penjiresinden iberiň.
9) Anti-patternler
Diňe ýerli wagty süýşürilmezden saklamak.
IANA identifikatorynyň ýerine '+ hh: mm' -ni gaty tikiň.
Dowamlylygy iki sany "diwar" wagtynyň tapawudy bilen sanamak.
Zolaklar/DST goldawsyz cron boýunça meýilleşdiriň.
Standart ýerli zonany talap edende, UTC-de "her gün" analitika etmek.
Zonanyň kadalarynyň üýtgemezligini çaklamak (ýurtlar wagt syýasatyny üýtgedýärler).
10) Wagt synagy
Gözegçilik edilýän sagat. Kesgitlenen synaglar üçin "sagady" koda (Clock/TimeProvider) sanjym ediň.
Halatlar toplumy:- Tomus/gyş wagtyna geçmek (goşa/geçilmezlik).
- Ulanyjynyň zolaklaryň arasynda hereket etmegi ('preferred _ timezone' çalyşmagy).
- Tzdb düzgünlerini üýtgetmek (bazany täzelemek - regressiýa synaglary).
- NTP göçürmeleri, wakalaryň gijikdirilmegi.
- Fazzi synaglary. Tötänleýin zolaklar, seneler, formatlar; salgylanma kitaphanasy bilen deňeşdirmek.
11) Gözegçilik etmek we peýdalanmak
Alertler: NTP-iň sinhronizasiýasy, tzdb täzelenmesiniň yza galmagy, DST-de "ýerine ýetirilmedik" cron-meseleleriň partlamalary.
Daşbordlar: wakalary zolaklar/ýerli günler boýunça paýlamak; catch-up/skip hasaplaýjylary.
Runbook: ýurisdiksiýada wagt düzgünlerini üýtgedeniňizde proseduralar; tzdb täzeleniş tertibi; meýilnamalaryň eýeleri bilen aragatnaşyk.
12) Satuw patternleri
Time Normalization Gateway. RFC 3339 UTC-e gelýän wagty kadalaşdyrýan, zonalary tassyklaýan (IANA) we konteksti doldurýan inçe hyzmat.
Local-Day Builder. "Ýerli gün" we zonadan DST-i göz öňünde tutup, takyk UTC-serhetleri '[start _ utc, end_utc)' gurýan kitaphana/hyzmat.
Schedule Materializer. Düzgünleri "ýerli söz + zona" görnüşinde saklaýan meýilnamalaşdyryjy, UTC-de geljekki ýagdaýlary materiallaşdyrýar we gapma-garşylyklary/geçişleri dolandyrýar.
Dual-Timestamp Events. 'occurred _ at _ utc', 'wall _ time _ local', 'timezone' meýdanlary. UI üçin ýerli, ulgamlar üçin UTC çalşylýar.
13) Arhitektoryň çek-sanawy
1. UTC hemme ýerde saklanýarmy?
2. IANA zonasy we domen maglumatlary syýasaty barmy?
3. Meýilnamalaşdyryjy DST-e düşünýärmi we UTC-de zatlary materiallaşdyrýarmy?
4. Logi/metrika - UTC; hasabatlar - domen zolagynda?
5. Wagt/retrailer - monoton sagatda?
6. Tzdb täzelenmesi awtomatlaşdyrylyp, gözegçilik edilýärmi?
7. Synaglar düzgünleri üýtgetmegi, goşa/minutlary ýitirmegi öz içine alýarmy?
14) Kiçi reseptler (psevdokod)
Lokal "iş gününi" UTC aralygyna öwürmek
function localDayToUtcInterval(dateLocal, tz):
startLocal = combine(dateLocal, 00:00) in tz endLocal = startLocal + 1 day startUtc = toUTC(startLocal) // учитывает DST endUtc = toUTC(endLocal)
return [startUtc, endUtc)
Gaýtalanýan tertibi materiallaşdyrmak
inputs: rrule, tz, windowStartUtc, windowEndUtc for each localOccurrence in expand(rrule, tz, [windowStartUtc, windowEndUtc] projected to tz):
emit occurrence { scheduled_at_utc = toUTC(localOccurrence), tz }
Meseläni başlamak üçin idempotent açary
dedupe_key = hash(job_id + scheduled_at_utc.toString())
15) Howpsuzlyk we laýyklyk
Audit: Ulanyjy talaplaryny ("maňa Lima wagty 23: 00-a çenli wada berildi") serwer hronologiýasy bilen utgaşdyrmak üçin iki wagt proýeksiýasyny (UTC we ýerli) saklaň.
Düzgünleşdiriji: hasabat döwürleri talap edilýän zolaklarda (salgytlar, jogapkär oýun çäkleri, "sagatlar boýunça" marketing çäklendirmeleri) emele gelýär.
Gizlinlik: wagt zolagy - şahsy sazlamalar, ýöne takyk kesgitlemeýän maglumatlar; umumy gizlinlik syýasatynyň çäginde gaýtadan işläň.
Netije
"Wagtyň duýgurlygy" senäniň formaty barada däl-de, jogapkärçiligiň binagärlik çäkleri barada: nirede saklamak, nirede üýtgetmek, nädip meýilleşdirmek we nädip dogrudygyny subut etmek. UTC derejesinde birleşdirmek, aýdyň IANA zolaklary, başarnykly meýilleşdirijiler, goşa wagtlar we monotoniki sagatlar wagty hadysalaryň çeşmesinden öňünden aýdyp boljak infrastruktura hyzmatyna öwürýär.
"Binagärlik we teswirnamalar" bölüminiň degişli maddalary (maslahat berilýär):
- GeoDNS we geo-marşrut; Ýüküň deňagramlylygy; Wakalaryň wagt bilen syn edilmegi; Cron-patternler we programmalaryň materiallaşdyrylmagy; Sebitleýin çäklendirmeler we ýerli hasabat günleri.