Na tejto stránke
- 1. Čítaj od záložky a posuň ju, až keď dávka dorazí
- 2. Daj každému zápisu kľúč, ktorý prežije pád
- 3. Synchronizáciu vlastní jeden beh a preukazuje to pred každým zápisom
- 4. Opakuj, čo prejde, zastav, čo trvá
- 5. Ber ticho ako zistenie
- 6. Raz rozhodni, čo smie synchronizácia zapisovať, a nech to každý beh preukáže
- Čo je postavené a čo nie
Dňa 8. októbra 2026 zverejnili Lance Martin a CJ Avilla opis agenta, ktorý každé ráno číta Slack a GitHub a do Slacku posiela súhrn. Nikto sa nepozerá, ako beží. Ich najužitočnejší odsek je o zlyhaní, ktoré vyzerá ako úspech. Keď server zdroja nefunguje alebo jeho token vypršal, „agent z toho zdroja nič nevidí a hlási ‚nič nové‘“.
Synchronizácia kontaktov zo Shopify do Brevo má to isté zlyhanie. Rovnako ako každá plánovaná synchronizácia medzi dvoma nástrojmi SaaS. Čítanie, ktoré potichu zlyhá, vyzerá presne ako obchod, kde sa dnes nikto nezaregistroval.
Ich článok končí šiestimi pravidlami pre agenta, ktorý beží bez dozoru. Prečítaj si ich ako niekto, kto prevádzkuje synchronizácie, a každé z nich je pravidlom pre reverse ETL. Pracovný proces padol. Synchronizácia nie. sleduje jeden kontakt počas pádu. Táto stránka je kontrolný zoznam nad ním: šesť pravidiel pre automatizovanú synchronizáciu dát, čo s každým z nich dnes robí runner Tajo a kde nestačí. Stranu runnera opisuje Obnovenie zaseknutej alebo neúspešnej synchronizácie.
1. Čítaj od záložky a posuň ju, až keď dávka dorazí
Ich prvé pravidlo: „Čítaj každý zdroj od záložky, nie z pevného časového okna.“ Okno „posledných 24 hodín“ nechá medzeru, keď sa beh začne neskoro, a opakuje záznamy, keď sa začne skoro.
Synchronizácia Tajo číta svoj zdroj po dávkach od uloženého kurzora. Kurzor sa posunie na konci dávky, a len keď dorazil každý záznam z tejto dávky. Beh, ktorý zlyhá, si ponechá poslednú čistú pozíciu, takže ďalší beh prečíta prerušenú dávku znova, namiesto aby ju preskočil.
Objednávky majú vlastnú záložku. Plánovaná synchronizácia objednávok Shopify sa začína svojím prvým plánovaným behom a posiela to, čo sa zmenilo od predchádzajúceho. Staršie objednávky odídu len vtedy, keď synchronizáciu spustí človek. Plánované behy a behy spustené človekom majú oddelené kurzory, takže načítanie histórie ani testovacia dávka nemôže plánovaný kurzor vrátiť späť.
Cenou je, že prerušená dávka sa číta dvakrát. Pravidlo 2 zaisťuje, že je to bezpečné.
2. Daj každému zápisu kľúč, ktorý prežije pád
Ich štvrté pravidlo považuje príspevok za odoslaný, až „keď ho Slack potvrdí“, a až potom aktualizuje záložku a register. Takto funguje doporučený list. Je doručený, keď sa vráti podpísaná doručenka, nie keď opustí priehradku.
Predtým, ako Tajo zapíše záznam, záznam dostane doručovací kľúč. Kľúč je hash synchronizácie, zdroja, kurzora stránky, pozície na stránke a samotného záznamu, takže neobsahuje žiadne osobné údaje. Zarezervuje sa pred volaním cieľa a označí sa ako dokončený, keď zápis uspeje. Dokončené kľúče sa uchovávajú sedem dní. Opakovaný pokus alebo neskorší plánovaný beh odvodí pre ten istý záznam ten istý kľúč, nájde ho dokončený a cieľ znova nevolá.
Má to dve ceny. Po siedmich dňoch register zabúda a prehranie od staršieho kurzora môže zapísať znova. A zápis, ktorému vyprší časový limit, zanechá poctivú pochybnosť: druhý systém ho mohol uložiť bez odpovede. Tajo taký zápis skúsi znova pri neskoršom pokuse, namiesto aby ho na sedem dní zaznamenal ako neúspešný. Konektor, ktorý cieľu odovzdá vlastný kľúč idempotencie, túto pochybnosť odstráni. Ten, ktorý to nevie, zostane s možnosťou jedného duplikátu.
3. Synchronizáciu vlastní jeden beh a preukazuje to pred každým zápisom
Ich tretie pravidlo: „Skontroluj každú položku znova tesne pred odoslaním.“ Pri synchronizácii sa medzi čítaním a zápisom najskôr zmení to, kto smie zapisovať.
Každá synchronizácia Tajo má jeden dočasný zámok s vlastným tokenom a platnosťou 15 minút, obnovovanou každých päť minút. Beh overí, že zámok stále drží, skôr než zavolá cieľ, a znova pred posunom kurzora. Beh, ktorý ho stratil, sa zastaví a jeho stránka ukáže „Beh v priebehu stratil svoj slot a zastavil sa, aby nezapisoval dvakrát.“ Druhý beh, ktorý narazí na prebiehajúci, skončí, namiesto aby sa za ním zaradil do frontu.
Kontrolujú sa aj záznamy. Medzi čítaním a zápisom prechádzajú záznamy filtrom súhlasu. Kontakt, ktorý by sa zapísal do marketingového publika bez preukázateľného súhlasu, sa odmietne, namiesto aby sa hádalo. Slovami stránky pomocníka je režim zlyhania „príliš opatrne“, nikdy „odoslané navyše“.
4. Opakuj, čo prejde, zastav, čo trvá
Ich šesť pravidiel nehovorí nič o tom, ako často to skúšať znova. Synchronizácia to pravidlo potrebuje, pretože jej najčastejšie chyby sú rate limit a zlá minúta u dodávateľa.
Beh Tajo z frontu, ktorý zlyhá, dostane päť pokusov. Čakanie medzi nimi trvá 60, 120, 240 a 480 sekúnd, spolu asi pätnásť minút. Niektoré chyby sa nikdy neopakujú, pretože nový pokus ich nemôže opraviť. Beh, ktorý narazil na už prebiehajúci beh, sa neopakuje, a rovnako ani beh, ktorého publikovaná verzia alebo pripojenia už neplatia.
Séria je niečo iné ako zakopnutie. Ak posledných päť dokončených behov od poslednej zmeny synchronizácie zlyhalo, Tajo synchronizáciu pozastaví a na jej stránke ukáže poslednú chybu. Jeden úspech počítadlo vynuluje. Nič pozastavenú synchronizáciu samo znova nespustí; človek opraví príčinu a znova ju publikuje. Článok o padnutom pracovnom procese rozpráva incident, z ktorého toto pravidlo vzniklo.
5. Ber ticho ako zistenie
„Hlás neúspešné čítanie ako nečitateľné, nikdy ako pokojný deň.“ Toto je najťažšie zo šiestich pravidiel a to, ktoré plníme len čiastočne.
Kde platí: čítanie, ktoré skončí chybou, spôsobí zlyhanie behu. Odmietnutý token alebo server, ktorý neodpovedá, nepošle do cieľa nič, nechá kurzor tam, kde bol, a započíta sa do pozastavenia po piatich neúspešných behoch. A každú hodinu, 13 minút po celej, Tajo skontroluje každý pracovný priestor s aktívnou synchronizáciou. Upozorní vlastný tím, keď za posledných 24 hodín nebol žiadny úspešný beh, vrátane pracovného priestoru, kde nebol zaznamenaný vôbec žiadny beh. To je hodinová kontrola.
Kde neplatí: tiché čítanie, ktoré opisujú autori, je čítanie, ktoré odpovie „OK“ bez záznamov. Náš runner ho počíta ako úspech. Pri zdrojoch ako zákazníci Shopify varuje samostatná kontrola tím Tajo po desiatich úspešných behoch za sebou s nulou záznamov, ak synchronizácia predtým záznamy vracala. Objednávky Shopify sa čítajú podľa času aktualizácie, takže prázdny beh je tam normálny a táto kontrola nebeží. Zdroj, ktorý vráti nejaké záznamy, ale menej, než by mal, sa neodhalí vôbec.
Námietka znie takto: „Desať prázdnych behov sú dve a pol hodiny pri pláne po 15 minútach. Prečo neupozorniť hneď pri prvom?“ Synchronizácie kontaktov predvolene bežia každých 15 minút. A obchod bez nových zákazníkov za štvrťhodinu je bežná vec. Upozornenie pri prvom prázdnom behu by sa spúšťalo každú noc, a upozornenie, ktoré sa spúšťa stále, nikto nečíta. Táto hranica vymieňa rýchlosť za dôveryhodnosť. Stále je to odhad o tichu, nie pravidlo autorov.
6. Raz rozhodni, čo smie synchronizácia zapisovať, a nech to každý beh preukáže
Ich piate pravidlo berie preferencie agenta „z úložiska, ktoré agent nemôže upravovať“. Šieste dáva agentovi prístup len na čítanie všade, kde len číta, a obmedzuje, koľko môže každý beh minúť. Obe existujú preto, že agent číta text, ktorý napísali iní, a ten text sa mu môže pokúsiť dávať príkazy.
Synchronizačnou verziou súboru s preferenciami je publikované pravidlo. Publikovanie synchronizácie Tajo ju zviaže s digestom presne toho pravidla, ktoré bolo vidieť v náhľade. Úprava ju vráti do konceptu a pred ďalším behom prejde znova náhľadom. Každý beh si pred akoukoľvek zmenou overí, že vykonáva túto publikovanú verziu s pripojeniami, s ktorými bola publikovaná. Beh, ktorý touto kontrolou neprejde, sa neopakuje. Pevný je aj smer: synchronizačné pravidlo zapisuje jedným smerom a nikdy späť do Shopify.
Limit výdavkov nemá obdobu. Naše synchronizačné behy nemajú žiadny limit výdavkov na beh. Limit opakovaní a pozastavenie obmedzujú, ako dlho môže zlyhanie trvať, nie koľko beh stojí.
Čo je postavené a čo nie
Postavené, v čase písania:
- Kurzor, ktorý sa posunie až po dávke, v ktorej dorazil každý záznam, a plánovaný kurzor objednávok, ktorý behy spustené človekom nemôžu vrátiť späť.
- Doručovací kľúč pre každý záznam, kontrolovaný v registri dokončených zápisov uchovávanom sedem dní.
- Jeden dočasný zámok na synchronizáciu, kontrolovaný pred zápisom a pred posunom kurzora.
- Päť pokusov na beh s čakaním 60 sekúnd a potom 120, 240 a 480, bez opakovania pri kolízii alebo neplatnej publikácii.
- Pozastavenie po piatich neúspešných behoch za sebou, zobrazené na stránke synchronizácie.
- Hodinové upozornenie, keď za posledných 24 hodín neuspel žiadny beh.
- Filter súhlasu počas behu pre kontakty zapisované do marketingového publika a pri každom behu kontrola, že ide o publikovanú verziu.
Nepostavené, a dobré to vedieť, skôr než sa na to spoľahneš:
- Čítanie, ktoré uspeje s nulou záznamov, sa nehlási ako nečitateľné. Varovanie po desiatich behoch z toho pokrýva časť. Nepokrýva objednávky Shopify ani zdroj, ktorý vráti príliš málo záznamov.
- Upozornenie po 24 hodinách dostáva Tajo, nie ty, a to isté platí pre varovanie po desiatich behoch. Pozastavenie sa však na stránke synchronizácie zobrazí.
- Hodinová kontrola stráži pracovný priestor, nie každú synchronizáciu. Jedna zdravá synchronizácia zakryje tichú vedľa seba.
- Žiadny limit výdavkov na beh.
- Nič pozastavenú synchronizáciu znova nespustí. Urobí to človek.
- Pozastavenie po piatich zlyhaniach a 24-hodinová kontrola sú nastavené pre celé nasadenie Tajo, nie pre jednotlivú synchronizáciu.
Keď sa niečo z toho objaví pri tvojej synchronizácii, Obnovenie zaseknutej alebo neúspešnej synchronizácie ti povie, čo vidíš a čo robiť.
Autori napísali šesť pravidiel pre súhrn, ktorý človek číta každé ráno. Synchronizácia nemá ráno žiadneho čitateľa, a preto ich potrebuje ešte viac. Pravidlá jedna až štyri a pravidlo šesť sú dnes kódom v našom runneri. Pravidlo päť je napísané napoly: synchronizácia, ktorá nedokáže prečítať svoj zdroj, by to mala povedať.
Často Kladené Otázky
Čo potrebuje automatizovaná synchronizácia dát, aby bezpečne bežala, keď ju nikto nesleduje?
Šesť vecí. Kurzor, ktorý sa posunie až vtedy, keď dorazí celá dávka. Doručovací kľúč pre každý záznam, ktorý opakovaný pokus odvodí znova a ktorý sa kontroluje v registri dokončených zápisov. Vždy len jeden beh na synchronizáciu. Obmedzený počet opakovaní a potom pozastavenie, keď behy ďalej zlyhávajú. Upozornenie, keď sa celý deň nič nepodarí. A publikované pravidlo, o ktorom musí každý beh preukázať, že ho vykonáva.
Prečo by synchronizácia nemala čítať pevné časové okno, napríklad posledných 24 hodín?
Pretože behy nie sú presné. Beh, ktorý sa začne neskoro, nechá medzeru, ktorú okno nikdy nepokryje, a beh, ktorý sa začne skoro, prečíta záznamy dvakrát. Uložený kurzor nechá každý beh začať presne tam, kde skončila posledná čistá dávka, nech sa beh začne kedykoľvek.
Ako Tajo bráni tomu, aby opakovaná synchronizácia zapísala ten istý záznam dvakrát?
Každý záznam dostane doručovací kľúč, hash synchronizácie, zdroja, kurzora stránky, pozície na stránke a samotného záznamu. Kľúč sa zarezervuje pred volaním cieľa a označí sa ako dokončený, keď zápis uspeje, a dokončené kľúče sa uchovávajú sedem dní. Opakovaný pokus alebo neskorší beh odvodí ten istý kľúč a cieľ znova nevolá.
Spozná Tajo, keď zdroj nič nevráti, pretože čítanie potichu zlyhalo?
Len čiastočne. Čítanie, ktoré skončí chybou, spôsobí zlyhanie behu a ten sa započíta do pozastavenia po piatich neúspešných behoch za sebou. Čítanie, ktoré uspeje s nulou záznamov, sa počíta ako úspech. Pri zdrojoch ako zákazníci Shopify dostane tím Tajo varovanie po desiatich úspešných behoch za sebou s nulou záznamov, ak synchronizácia predtým záznamy vracala. Pri objednávkach Shopify, čítaných podľa času aktualizácie, táto kontrola nebeží.