Na ovoj stranici
- 1. Čitaj od oznake i pomakni je tek kad serija stigne
- 2. Daj svakom upisu ključ koji preživi pad
- 3. Jedno izvođenje je vlasnik sinkronizacije i dokazuje to prije svakog upisa
- 4. Ponovi ono što prolazi, zaustavi ono što traje
- 5. Tretiraj tišinu kao nalaz
- 6. Jednom odluči što sinkronizacija smije upisivati i neka svako izvođenje to dokaže
- Što je izgrađeno, a što nije
Lance Martin i CJ Avilla objavili su 8. listopada 2026. prikaz agenta koji svako jutro čita Slack i GitHub i objavljuje sažetak u Slacku. Nitko ga ne gleda dok radi. Njihov najkorisniji odlomak govori o neuspjehu koji izgleda kao uspjeh. Kad poslužitelj nekog izvora ne radi ili mu je token istekao, „agent ne vidi ništa iz tog izvora i javlja ‚ništa novo‘”.
Sinkronizacija kontakata iz Shopifyja u Brevo ima isti neuspjeh. Kao i svaka zakazana sinkronizacija između dvaju SaaS alata. Čitanje koje tiho propadne izgleda točno kao trgovina u kojoj se danas nitko nije prijavio.
Njihov članak završava sa šest pravila za agenta koji radi bez nadzora. Pročitaj ih kao netko tko vodi sinkronizacije i svako postaje pravilo za reverse ETL. Radni proces je pao. Sinkronizacija nije. prati jedan kontakt kroz pad. Ova stranica je kontrolni popis iznad toga: šest pravila za automatiziranu sinkronizaciju podataka, što Tajov runner danas radi za svako i gdje ne dostaje. Strana runnera opisana je u Oporavak zaglavljene ili neuspjele sinkronizacije.
1. Čitaj od oznake i pomakni je tek kad serija stigne
Njihovo prvo pravilo: „Čitaj svaki izvor od oznake, a ne iz fiksnog vremenskog prozora.” Prozor „posljednja 24 sata” ostavlja rupu kad izvođenje krene kasno i ponavlja zapise kad krene rano.
Tajo sinkronizacija čita svoj izvor u serijama od spremljenog kursora. Kursor se pomiče na kraju serije, i to samo kad je stigao svaki zapis iz te serije. Izvođenje koje ne uspije zadržava posljednji čisti položaj, pa sljedeće izvođenje ponovno čita prekinutu seriju umjesto da je preskoči.
Narudžbe imaju vlastitu oznaku. Zakazana sinkronizacija narudžbi iz Shopifyja počinje svojim prvim zakazanim izvođenjem i šalje ono što se promijenilo od prethodnog. Starije narudžbe idu samo kad osoba pokrene sinkronizaciju. Zakazana izvođenja i izvođenja koja pokrene osoba imaju odvojene kursore, pa učitavanje povijesti ili testna serija ne mogu vratiti zakazani unatrag.
Cijena je da se prekinuta serija čita dvaput. Pravilo 2 to čini sigurnim.
2. Daj svakom upisu ključ koji preživi pad
Njihovo četvrto pravilo računa objavu poslanom tek „kad je Slack potvrdi” i tek tada ažurira oznaku i registar. Preporučeno pismo radi tako. Isporučeno je kad se vrati potpisana povratnica, a ne kad napusti šalter.
Prije nego što Tajo upiše zapis, zapis dobiva ključ isporuke. Ključ je hash sinkronizacije, izvora, kursora stranice, položaja na stranici i samog zapisa, pa ne sadrži osobne podatke. Rezervira se prije poziva odredišta i označava kao dovršen kad upis uspije. Dovršeni ključevi čuvaju se sedam dana. Ponovni pokušaj ili kasnije zakazano izvođenje izvodi isti ključ za isti zapis, nalazi ga dovršenim i ne poziva odredište ponovno.
To ima dvije cijene. Nakon sedam dana registar zaboravlja i ponovno izvođenje od starijeg kursora može ponovno upisivati. A upis kojem istekne vrijeme ostavlja iskrenu sumnju: drugi sustav ga je možda spremio, a da nije odgovorio. Tajo taj upis pokušava ponovno u kasnijem pokušaju umjesto da ga sedam dana vodi kao neuspjeli. Konektor koji odredištu predaje vlastiti ključ idempotentnosti uklanja tu sumnju. Onaj koji to ne može ostaje s mogućnošću jednog duplikata.
3. Jedno izvođenje je vlasnik sinkronizacije i dokazuje to prije svakog upisa
Njihovo treće pravilo: „Ponovno provjeri svaku stavku neposredno prije objave.” Kod sinkronizacije se između čitanja i upisa najvjerojatnije promijeni to tko smije upisivati.
Svaka Tajo sinkronizacija ima jedan zakup, s vlastitim tokenom i trajanjem od 15 minuta koje se obnavlja svakih pet minuta. Izvođenje provjerava drži li još zakup prije nego što pozove odredište, i ponovno prije nego što pomakne kursor. Izvođenje koje ga je izgubilo staje, a njegova stranica kaže „Izvođenje je usred rada izgubilo svoje mjesto i stalo kako ne bi upisalo dvaput.” Drugo izvođenje koje naleti na ono u tijeku završava umjesto da stane u red iza njega.
Provjeravaju se i zapisi. Između čitanja i upisa zapisi prolaze kroz filtar privole. Kontakt koji bi se upisao u marketinšku publiku bez dokazive privole odbija se umjesto da se nagađa. Riječima stranice pomoći, način neuspjeha je „previše oprezno”, nikad „previše poslano”.
4. Ponovi ono što prolazi, zaustavi ono što traje
Njihovih šest pravila ne kaže ništa o tome koliko često pokušati ponovno. Sinkronizaciji to pravilo treba jer su joj najčešće greške ograničenje broja zahtjeva i loša minuta kod dobavljača.
Tajo izvođenje iz reda koje ne uspije dobiva pet pokušaja. Čekanja između njih su 60, 120, 240 i 480 sekundi, ukupno petnaestak minuta. Neke se greške nikad ne ponavljaju jer ih ponovni pokušaj ne može ispraviti. Izvođenje koje je naletjelo na izvođenje već u tijeku ne ponavlja se, kao ni izvođenje čija objavljena verzija ili veze više nisu valjane.
Niz je nešto drugo od posrtaja. Ako je posljednjih pet završenih izvođenja od zadnje promjene sinkronizacije sve propalo, Tajo pauzira sinkronizaciju i prikazuje posljednju grešku na njezinoj stranici. Jedan uspjeh poništava brojanje. Ništa samo ne pokreće pauziranu sinkronizaciju; osoba ispravi uzrok i ponovno je objavi. Članak o palom radnom procesu opisuje incident iz kojeg je nastalo ovo pravilo.
5. Tretiraj tišinu kao nalaz
„Prijavi neuspjelo čitanje kao nečitljivo, nikad kao miran dan.” Ovo je najteže od šest pravila i ono koje ispunjavamo samo djelomično.
Gdje vrijedi: čitanje koje završi greškom ruši izvođenje. Odbijeni token ili poslužitelj koji ne odgovara ne šalje ništa odredištu, ostavlja kursor gdje je bio i broji se prema pauzi nakon pet neuspjelih izvođenja. A svaki sat, 13 minuta iza punog sata, Tajo provjerava svaki radni prostor s aktivnom sinkronizacijom. Upozorava vlastiti tim kad u posljednja 24 sata nije bilo nijednog uspješnog izvođenja, uključujući radni prostor u kojem nije zabilježeno nijedno izvođenje. To je provjera svakog sata.
Gdje ne vrijedi: tiho čitanje koje autori opisuju jest čitanje koje odgovori „OK” bez zapisa. Naš runner to broji kao uspjeh. Za izvore poput kupaca iz Shopifyja zasebna provjera upozorava Tajov tim nakon deset uspješnih izvođenja zaredom s nula zapisa, ako je sinkronizacija prije davala zapise. Narudžbe iz Shopifyja čitaju se prema vremenu ažuriranja, pa je ondje prazno izvođenje normalno i ta provjera ne radi. Izvor koji vrati nešto zapisa, ali manje nego što bi trebao, uopće se ne otkriva.
Prigovor glasi ovako: „Deset praznih izvođenja znači dva i pol sata uz raspored od 15 minuta. Zašto ne upozoriti već na prvom?” Sinkronizacije kontakata zadano se izvode svakih 15 minuta. A trgovina bez novih kupaca u četvrt sata posve je obična. Upozorenje na prvom praznom izvođenju oglašavalo bi se svake noći, a upozorenje koje se uvijek oglašava nitko ne čita. Taj prag mijenja brzinu za vjerodostojnost. I dalje je to pretpostavka o tišini, a ne pravilo autora.
6. Jednom odluči što sinkronizacija smije upisivati i neka svako izvođenje to dokaže
Njihovo peto pravilo drži postavke agenta „u spremištu koje agent ne može uređivati”. Šesto agentu daje pristup samo za čitanje svugdje gdje samo čita i ograničava koliko svako izvođenje smije potrošiti. Oba postoje jer agent čita tekst koji su napisali drugi, a taj mu tekst može pokušati izdavati naredbe.
Inačica datoteke postavki u sinkronizaciji jest objavljeno pravilo. Objava Tajo sinkronizacije veže je uz sažetak (digest) točno onog pravila koje je bilo u pregledu. Uređivanje je vraća u skicu i ona ponovno prolazi kroz pregled prije nego što se opet izvede. Svako izvođenje prije bilo kakve promjene provjerava izvodi li upravo tu objavljenu verziju s vezama s kojima je objavljena. Izvođenje koje ne prođe tu provjeru ne ponavlja se. Smjer je također fiksan: pravilo sinkronizacije upisuje u jednom smjeru i nikad natrag u Shopify.
Ograničenje potrošnje nema pandan. Naša izvođenja sinkronizacije nemaju ograničenje potrošnje po izvođenju. Ograničenje ponovnih pokušaja i pauza ograničavaju koliko dugo greška može trajati, a ne koliko izvođenje stoji.
Što je izgrađeno, a što nije
Izgrađeno, u trenutku pisanja:
- Kursor koji se pomiče tek nakon serije u kojoj je stigao svaki zapis, i zakazani kursor narudžbi koji izvođenja koja pokrene osoba ne mogu vratiti unatrag.
- Ključ isporuke za svaki zapis, provjeren u registru dovršenih upisa koji se čuva sedam dana.
- Jedan zakup po sinkronizaciji, provjeren prije upisa i prije pomaka kursora.
- Pet pokušaja po izvođenju, uz čekanje od 60 sekundi, a zatim 120, 240 i 480, bez ponavljanja kod sudara ili nevaljane objave.
- Pauza nakon pet neuspjelih izvođenja zaredom, prikazana na stranici sinkronizacije.
- Upozorenje svakog sata kad u posljednja 24 sata nijedno izvođenje nije uspjelo.
- Filtar privole tijekom izvođenja za kontakte koji se upisuju u marketinšku publiku i provjera pri svakom izvođenju da je riječ o objavljenoj verziji.
Nije izgrađeno, i dobro je to znati prije nego što se osloniš na to:
- Čitanje koje uspije s nula zapisa ne prijavljuje se kao nečitljivo. Upozorenje nakon deset izvođenja pokriva dio toga. Ne pokriva narudžbe iz Shopifyja ni izvor koji vraća premalo zapisa.
- Upozorenje nakon 24 sata stiže timu Tajo, ne tebi, kao i upozorenje nakon deset izvođenja. Pauza se ipak vidi na stranici sinkronizacije.
- Provjera svakog sata prati radni prostor, a ne svaku sinkronizaciju. Jedna zdrava sinkronizacija skriva tihu pokraj sebe.
- Nema ograničenja potrošnje po izvođenju.
- Ništa ne pokreće pauziranu sinkronizaciju. To radi osoba.
- Pauza nakon pet grešaka i provjera od 24 sata postavljene su za cijelu Tajo instalaciju, a ne po sinkronizaciji.
Kad se nešto od ovoga pojavi na tvojoj sinkronizaciji, Oporavak zaglavljene ili neuspjele sinkronizacije kaže što vidiš i što učiniti.
Autori su napisali šest pravila za sažetak koji osoba čita svako jutro. Sinkronizacija ujutro nema nijednog čitatelja i zato joj ta pravila trebaju još više. Pravila od jedan do četiri i pravilo šest danas su kod u našem runneru. Pravilo pet napisano je napola: sinkronizacija koja ne može pročitati svoj izvor trebala bi to reći.
Često postavljana pitanja
Što treba automatiziranoj sinkronizaciji podataka da sigurno radi kad je nitko ne prati?
Šest stvari. Kursor koji se pomiče tek kad stigne cijela serija. Ključ isporuke za svaki zapis, koji ponovni pokušaj ponovno izvodi i koji se provjerava u registru dovršenih upisa. Jedno izvođenje u isto vrijeme po sinkronizaciji. Ograničen broj ponovnih pokušaja, a zatim pauza kad izvođenja i dalje ne uspijevaju. Upozorenje kad cijeli dan ništa ne uspije. I objavljeno pravilo za koje svako izvođenje mora dokazati da ga izvršava.
Zašto sinkronizacija ne bi trebala čitati fiksni vremenski prozor, poput posljednja 24 sata?
Zato što izvođenja nisu točna. Izvođenje koje krene kasno ostavlja rupu koju prozor nikad ne pokrije, a ono koje krene rano čita zapise dvaput. Spremljeni kursor pokreće svako izvođenje točno ondje gdje je završila posljednja čista serija, kad god izvođenje krenulo.
Kako Tajo sprječava da ponovljena sinkronizacija dvaput upiše isti zapis?
Svaki zapis dobiva ključ isporuke, hash sinkronizacije, izvora, kursora stranice, položaja na stranici i samog zapisa. Ključ se rezervira prije poziva odredišta i označava kao dovršen kad upis uspije, a dovršeni ključevi čuvaju se sedam dana. Ponovni pokušaj ili kasnije izvođenje izvodi isti ključ i ne poziva odredište ponovno.
Primjećuje li Tajo kad izvor ništa ne vrati jer je čitanje tiho propalo?
Samo djelomično. Čitanje koje završi greškom ruši izvođenje, a izvođenje se broji prema pauzi nakon pet neuspjelih izvođenja zaredom. Čitanje koje uspije s nula zapisa broji se kao uspjeh. Za izvore poput kupaca iz Shopifyja Tajov tim dobiva upozorenje nakon deset uspješnih izvođenja zaredom s nula zapisa, ako je sinkronizacija prije davala zapise. Za narudžbe iz Shopifyja, koje se čitaju prema vremenu ažuriranja, ta provjera ne radi.