Na ovoj stranici
- 1. Čitaj od obeleživača i pomeri ga tek kada je serija stigla
- 2. Daj svakom upisu ključ koji preživi pad
- 3. Jedno pokretanje poseduje sinhronizaciju i dokazuje to pre svakog upisa
- 4. Ponovi ono što prolazi, zaustavi ono što ne prolazi
- 5. Tretiraj tišinu kao nalaz
- 6. Jednom odluči šta sinhronizacija sme da upiše i neka svako pokretanje to dokaže
- Šta je izgrađeno, a šta nije
Lance Martin i CJ Avilla su 8. oktobra 2026. objavili prikaz jednog agenta koji svakog jutra čita Slack i GitHub i objavljuje sažetak u Slack. Niko ga ne gleda dok radi. Njihov najkorisniji pasus govori o grešci koja izgleda kao uspeh. Kada server nekog izvora ne radi ili mu je token istekao, „agent ne vidi ništa iz tog izvora i javlja ‚ništa novo‘“.
Sinhronizacija kontakata iz Shopify u Brevo ima istu grešku. Kao i svaka zakazana sinhronizacija između dva SaaS alata. Čitanje koje tiho propadne izgleda potpuno isto kao prodavnica u kojoj se danas niko nije registrovao.
Njihov članak se završava sa šest pravila za agenta koji radi bez nadzora. Pročitaj ih kao neko ko vodi sinhronizacije i svako od njih postaje pravilo za reverse ETL. Radni proces je pao. Sinhronizacija nije. prati jedan kontakt kroz pad. Ova stranica je kontrolna lista iznad toga: šest pravila za automatizovanu sinhronizaciju podataka, šta Tajo izvršilac danas radi povodom svakog i gde ne dostiže pravilo. Strana izvršioca opisana je u Oporavak zaglavljene ili neuspele sinhronizacije.
1. Čitaj od obeleživača i pomeri ga tek kada je serija stigla
Njihovo prvo pravilo: „Čitaj svaki izvor od obeleživača, a ne iz fiksnog vremenskog prozora.“ Prozor „poslednja 24 sata“ ostavlja rupu kada pokretanje krene kasno i ponavlja zapise kada krene rano.
Tajo sinhronizacija čita svoj izvor u serijama od sačuvanog kursora. Kursor se pomera na kraju serije i samo kada je svaki zapis u toj seriji stigao. Pokretanje koje propadne zadržava poslednju čistu poziciju, pa sledeće pokretanje ponovo čita prekinutu seriju umesto da je preskoči.
Porudžbine dobijaju sopstveni obeleživač. Zakazana sinhronizacija Shopify porudžbina počinje od svog prvog zakazanog pokretanja i šalje ono što se promenilo od prethodnog. Prošle porudžbine odlaze samo kada neka osoba pokrene sinhronizaciju. Zakazana pokretanja i pokretanja koja pokrene osoba čuvaju odvojene kursore, pa učitavanje istorije ili probna serija ne mogu da vrate zakazani kursor unazad.
Cena je to što se prekinuta serija čita dvaput. Pravilo 2 to čini bezbednim.
2. Daj svakom upisu ključ koji preživi pad
Njihovo četvrto pravilo računa objavu kao poslatu „tek kada je Slack potvrdi“, i tek tada ažurira obeleživač i evidenciju. Preporučeno pismo radi na isti način. Isporučeno je kada se vrati potpisana povratnica, a ne kada napusti šalter.
Pre nego što Tajo upiše zapis, zapis dobija ključ isporuke. Ključ je heš sinhronizacije, izvora, kursora stranice, pozicije na stranici i samog zapisa, pa ne sadrži lične podatke. Zauzima se pre nego što se pozove odredište i označava kao završen kada upis uspe. Završeni ključevi se čuvaju sedam dana. Ponovni pokušaj, ili kasnije zakazano pokretanje, izvodi isti ključ za isti zapis, nalazi ga završenim i ne poziva odredište ponovo.
Uz to idu dve cene. Posle sedam dana registar zaboravlja, pa ponavljanje od starijeg kursora može ponovo da upiše. A upis kome istekne vreme ostavlja iskrenu sumnju: drugi sistem ga je možda sačuvao bez odgovora. Tajo pokušava taj upis ponovo u nekom kasnijem pokušaju umesto da ga sedam dana vodi kao neuspeo. Konektor koji odredištu predaje sopstveni ključ idempotentnosti otklanja tu sumnju. Onaj koji to ne može ostaje sa mogućnošću jednog duplikata.
3. Jedno pokretanje poseduje sinhronizaciju i dokazuje to pre svakog upisa
Njihovo treće pravilo: „Ponovo proveri svaku stavku neposredno pre objave.“ Kod sinhronizacije, ono što se između čitanja i upisa najverovatnije promeni jeste ko sme da upisuje.
Svaka Tajo sinhronizacija ima jedan zakup, sa sopstvenim tokenom i trajanjem od 15 minuta koje se obnavlja svakih pet minuta. Pokretanje proverava da li još drži zakup pre nego što pozove odredište, i ponovo pre nego što pomeri kursor. Pokretanje koje ga je izgubilo staje, a njegova stranica kaže „Izvršavanje je usput izgubilo svoj termin i stalo da ne bi upisalo dvaput.“ Drugo pokretanje koje naleti na aktivno završava se umesto da čeka u redu iza njega.
Proveravaju se i zapisi. Između čitanja i upisa zapisi prolaze kroz filter saglasnosti. Kontakt koji se upisuje u marketinšku publiku bez dokazive saglasnosti biva odbijen umesto da se nagađa. Rečima stranice pomoći, režim otkaza je „previše oprezno“, nikada „poslato previše“.
4. Ponovi ono što prolazi, zaustavi ono što ne prolazi
Njihovih šest pravila ne kaže ništa o tome koliko često treba pokušati ponovo. Sinhronizaciji je potrebno to pravilo, jer su njene najčešće greške ograničenje broja zahteva i loš trenutak kod dobavljača.
Tajo pokretanje iz reda koje propadne dobija pet pokušaja. Čekanja između njih su 60, 120, 240 i 480 sekundi, ukupno oko petnaest minuta. Neke greške se nikada ne ponavljaju, jer ih novi pokušaj ne može ispraviti. Pokretanje koje je naletelo na pokretanje koje je već u toku ne ponavlja se, kao ni pokretanje čija objavljena verzija ili veze više nisu važeće.
Niz nije isto što i jednokratni kvar. Ako je svih pet poslednjih završenih pokretanja od poslednje izmene sinhronizacije propalo, Tajo pauzira sinhronizaciju i prikazuje poslednju grešku na njenoj stranici. Jedan uspeh poništava brojanje. Ništa samo od sebe ne pokreće ponovo pauziranu sinhronizaciju; osoba ispravlja uzrok i ponovo je objavljuje. Članak o palom radnom procesu opisuje incident iz kog je nastalo ovo pravilo.
5. Tretiraj tišinu kao nalaz
„Prijavi neuspelo čitanje kao nečitljivo, nikada kao miran dan.“ Ovo je najteže od šest pravila i jedino koje ispunjavamo samo delimično.
Gde važi: čitanje koje vrati grešku obara pokretanje. Odbijen token ili server koji ne odgovara ne šalje ništa odredištu, ostavlja kursor gde je bio i računa se u pauzu posle pet neuspelih pokretanja. I svakog sata, u 13 minuta posle punog sata, Tajo proverava svaki radni prostor sa aktivnom sinhronizacijom. Upozorava sopstveni tim kada u poslednja 24 sata nije bilo nijednog uspešnog pokretanja, uključujući radni prostor u kome nije zabeleženo nijedno pokretanje. To je provera na svakih sat vremena.
Gde ne važi: tiho čitanje koje autori opisuju jeste čitanje koje odgovori „OK“ bez zapisa. Naš izvršilac to računa kao uspeh. Za izvore kao što su Shopify kupci, posebna provera upozorava Tajo tim posle deset uzastopnih uspešnih pokretanja sa nula zapisa, ako je sinhronizacija ranije davala zapise. Shopify porudžbine se čitaju prema vremenu izmene, pa je prazno pokretanje tamo normalno i ta provera se ne izvršava. Izvor koji vrati neke zapise, ali manje nego što bi trebalo, uopšte nije uhvaćen.
Prigovor glasi ovako: „Deset praznih pokretanja je dva i po sata kod rasporeda na 15 minuta. Zašto ne upozoriti već na prvo?“ Sinhronizacije kontakata zaista se podrazumevano pokreću svakih 15 minuta. A prodavnica bez novih kupaca za četvrt sata sasvim je obična stvar. Upozorenje na prvo prazno pokretanje oglašavalo bi se svake noći, a upozorenje koje se uvek oglašava niko ne čita. Ta granica menja brzinu za poverenje. I dalje je to pretpostavka o tišini, a ne pravilo autora.
6. Jednom odluči šta sinhronizacija sme da upiše i neka svako pokretanje to dokaže
Njihovo peto pravilo drži podešavanja agenta „u skladištu koje agent ne može da menja“. Šesto daje agentu pristup samo za čitanje svuda gde samo čita i ograničava koliko svako pokretanje sme da potroši. Oba postoje zato što agent čita tekst koji su napisali drugi ljudi, a taj tekst može pokušati da mu izdaje naređenja.
Za sinhronizaciju, verzija datoteke sa podešavanjima je objavljeno pravilo. Objavljivanje Tajo sinhronizacije vezuje je za sažetak (digest) tačno onog pravila koje je prošlo pregled. Izmena je vraća u nacrt i ona ponovo prolazi pregled pre sledećeg pokretanja. Svako pokretanje, pre nego što bilo šta promeni, proverava da izvršava tu objavljenu verziju sa vezama sa kojima je objavljena. Pokretanje koje ne prođe tu proveru ne ponavlja se. Smer je takođe fiksiran: pravilo sinhronizacije upisuje u jednom smeru i nikada nazad u Shopify.
Ograničenje troška nema pandan. Naša pokretanja sinhronizacije nemaju ograničenje troška po pokretanju. Ograničenje ponovnih pokušaja i pauza ograničavaju koliko dugo greška može da traje, a ne koliko pokretanje košta.
Šta je izgrađeno, a šta nije
Izgrađeno u trenutku pisanja:
- Kursor koji se pomera tek posle serije u kojoj je svaki zapis stigao, i zakazani kursor porudžbina koji pokretanja koja je pokrenula osoba ne mogu da vrate unazad.
- Ključ isporuke za svaki zapis, proveren u registru završenih upisa koji se čuva sedam dana.
- Jedan zakup po sinhronizaciji, proveren pre upisa i pre nego što se kursor pomeri.
- Pet pokušaja po pokretanju, uz čekanje od 60 sekundi, a zatim 120, 240 i 480, bez ponavljanja posle sudara ili nevažeće objave.
- Pauza posle pet uzastopnih neuspelih pokretanja, prikazana na stranici sinhronizacije.
- Upozorenje na svakih sat vremena kada nijedno pokretanje nije uspelo u poslednja 24 sata.
- Filter saglasnosti u vreme izvršavanja za kontakte koji se upisuju u marketinšku publiku i provera pri svakom pokretanju da je u pitanju objavljena verzija.
Nije izgrađeno, i vredi znati pre nego što se osloniš na to:
- Čitanje koje uspe sa nula zapisa ne prijavljuje se kao nečitljivo. Upozorenje posle deset pokretanja pokriva deo toga. Ne pokriva Shopify porudžbine ni izvor koji vraća premalo zapisa.
- Upozorenje posle 24 sata stiže do Tajo tima, a ne do tebe, kao i upozorenje posle deset pokretanja. Pauza se ipak vidi na stranici sinhronizacije.
- Provera na svakih sat vremena prati radni prostor, a ne svaku sinhronizaciju. Jedna zdrava sinhronizacija skriva tihu pored sebe.
- Nema ograničenja troška po pokretanju.
- Ništa ne pokreće ponovo pauziranu sinhronizaciju. To radi osoba.
- Pauza posle pet grešaka i provera od 24 sata podešene su za celu Tajo instalaciju, a ne po sinhronizaciji.
Kada se nešto od ovoga pojavi na tvojoj sinhronizaciji, Oporavak zaglavljene ili neuspele sinhronizacije kaže šta vidiš i šta da uradiš.
Autori su napisali šest pravila za sažetak koji osoba čita svakog jutra. Sinhronizacija uopšte nema jutarnjeg čitaoca, i zato su joj ta pravila još potrebnija. Pravila od jedan do četiri i pravilo šest su danas kod u našem izvršiocu. Pravilo pet je napisano napola: sinhronizacija koja ne može da pročita svoj izvor trebalo bi to da kaže.
Često Postavljana Pitanja
Šta je potrebno automatizovanoj sinhronizaciji podataka da bi bezbedno radila kada je niko ne nadgleda?
Šest stvari. Kursor koji se pomera tek kada je cela serija stigla. Ključ isporuke za svaki zapis koji ponovni pokušaj ponovo izvodi i koji se proverava u registru završenih upisa. Jedno pokretanje u isto vreme po sinhronizaciji. Ograničen broj ponovnih pokušaja, a zatim pauza kada pokretanja nastave da padaju. Upozorenje kada ništa ne uspe tokom jednog dana. I objavljeno pravilo za koje svako pokretanje mora da dokaže da ga izvršava.
Zašto sinhronizacija ne bi trebalo da čita fiksni vremenski prozor, na primer poslednja 24 sata?
Zato što pokretanja nisu tačna. Pokretanje koje krene kasno ostavlja rupu koju prozor nikada ne pokriva, a pokretanje koje krene rano čita zapise dvaput. Sačuvani kursor započinje svako pokretanje tačno tamo gde se završila poslednja čista serija, bez obzira na to kada pokretanje krene.
Kako Tajo sprečava da ponovljena sinhronizacija dvaput upiše isti zapis?
Svaki zapis dobija ključ isporuke, heš sinhronizacije, izvora, kursora stranice, pozicije na stranici i samog zapisa. Ključ se zauzima pre nego što se pozove odredište i označava kao završen kada upis uspe, a završeni ključevi čuvaju se sedam dana. Ponovni pokušaj ili kasnije pokretanje izvodi isti ključ i ne poziva odredište ponovo.
Da li Tajo primećuje kada izvor ne vrati ništa zato što je čitanje tiho propalo?
Samo delimično. Čitanje koje vrati grešku obara pokretanje, a to pokretanje se računa u pauzu posle pet uzastopnih neuspelih pokretanja. Čitanje koje uspe sa nula zapisa računa se kao uspeh. Za izvore kao što su Shopify kupci, Tajo tim dobija upozorenje posle deset uzastopnih uspešnih pokretanja sa nula zapisa, ako je sinhronizacija ranije davala zapise. Za Shopify porudžbine, koje se čitaju prema vremenu izmene, ta provera se ne izvršava.