Bu sayfada
- 1. Bir yer iminden okuyun ve onu yalnızca toplu işlem ulaştığında ilerletin
- 2. Her yazmaya çökmeden sağ çıkan bir anahtar verin
- 3. Senkronizasyonun sahibi tek bir çalıştırmadır ve bunu her yazmadan önce kanıtlar
- 4. Geçecek olanı yeniden deneyin, geçmeyecek olanı durdurun
- 5. Sessizliği bir bulgu olarak ele alın
- 6. Senkronizasyonun neyi yazabileceğine bir kez karar verin ve her çalıştırmaya bunu kanıtlatın
- Neler hazır, neler değil
8 Ekim 2026’da Lance Martin ve CJ Avilla, her sabah Slack ve GitHub’ı okuyup Slack’e bir özet gönderen bir ajanın adım adım anlatımını yayımladı. Çalışırken onu kimse izlemiyor. En yararlı paragrafları, başarı gibi görünen bir hata hakkında. Bir kaynağın sunucusu çöktüğünde ya da token’ının süresi dolduğunda “ajan o kaynaktan hiçbir şey görmez ve ‘yeni bir şey yok’ diye raporlar.”
Shopify’dan Brevo’ya bir kişi senkronizasyonunda da aynı hata vardır. İki SaaS aracı arasındaki her zamanlanmış senkronizasyonda da. Sessizce başarısız olan bir okuma, bugün kimsenin kaydolmadığı bir mağazayla tıpatıp aynı görünür.
Makaleleri, gözetimsiz çalışan bir ajan için altı kuralla bitiyor. Bunları senkronizasyon yöneten biri olarak okuyun; her biri bir reverse ETL kuralına dönüşür. Worker öldü. Senkronizasyon ölmedi. bir çökme boyunca tek bir kişiyi izler. Bu sayfa onun üstündeki kontrol listesidir: otomatik bir veri senkronizasyonu için altı kural, Tajo’nun çalıştırıcısının bugün her biri için ne yaptığı ve nerede eksik kaldığı. Çalıştırıcının tarafı Takılan veya başarısız olan bir senkronizasyonu kurtarma sayfasında anlatılıyor.
1. Bir yer iminden okuyun ve onu yalnızca toplu işlem ulaştığında ilerletin
İlk kuralları: “Her kaynağı sabit bir zaman penceresinden değil, bir yer iminden okuyun.” “Son 24 saat” penceresi, bir çalıştırma geç başladığında boşluk bırakır, erken başladığında kayıtları tekrarlar.
Bir Tajo senkronizasyonu kaynağını kaydedilmiş bir imleçten toplu işlemler halinde okur. İmleç bir toplu işlemin sonunda ve yalnızca o toplu işlemdeki her kayıt ulaştığında ilerler. Başarısız olan bir çalıştırma son temiz konumu korur, bu yüzden sonraki çalıştırma kesilen toplu işlemi atlamak yerine yeniden okur.
Siparişlerin kendi yer imi vardır. Zamanlanmış bir Shopify sipariş senkronizasyonu ilk zamanlanmış çalıştırmasında başlar ve bir öncekinden bu yana değişenleri gönderir. Geçmiş siparişler yalnızca bir kişi senkronizasyonu çalıştırdığında gider. Zamanlanmış çalıştırmalar ile bir kişinin başlattığı çalıştırmalar ayrı imleçler tutar; böylece bir geçmiş veri aktarımı ya da bir test toplu işlemi zamanlanmış imleci geri saramaz.
Bedeli, kesilen bir toplu işlemin iki kez okunmasıdır. Bunu güvenli kılan Kural 2’dir.
2. Her yazmaya çökmeden sağ çıkan bir anahtar verin
Dördüncü kuralları bir gönderiyi “yalnızca Slack onayladığında” gönderilmiş sayar ve ancak o zaman yer imini ve kaydı günceller. Taahhütlü mektup da böyle işler. İmzalı alındı geri geldiğinde teslim edilmiş olur, gişeden çıktığında değil.
Tajo bir kaydı yazmadan önce, kayıt bir teslim anahtarı alır. Anahtar, senkronizasyonun, kaynağın, sayfa imlecinin, sayfadaki konumun ve kaydın kendisinin bir özetidir (hash), bu yüzden kişisel veri içermez. Hedef çağrılmadan önce sahiplenilir ve yazma başarılı olduğunda tamamlandı olarak işaretlenir. Tamamlanan anahtarlar yedi gün saklanır. Bir yeniden deneme ya da sonraki zamanlanmış bir çalıştırma, aynı kayıt için aynı anahtarı türetir, onu tamamlanmış bulur ve hedefi yeniden çağırmaz.
Bunun iki bedeli var. Yedi gün sonra defter unutur ve daha eski bir imleçten yapılan bir yeniden oynatma tekrar yazabilir. Zaman aşımına uğrayan bir yazma ise dürüst bir şüphe bırakır: diğer sistem yanıt vermeden onu kaydetmiş olabilir. Tajo bu yazmayı yedi gün boyunca başarısız olarak kaydetmek yerine sonraki bir denemede tekrar dener. Hedefe kendi idempotency anahtarını veren bir bağlayıcı bu şüpheyi kapatır. Bunu yapamayan bir bağlayıcıda tek bir kopya olasılığı kalır.
3. Senkronizasyonun sahibi tek bir çalıştırmadır ve bunu her yazmadan önce kanıtlar
Üçüncü kuralları: “Her öğeyi göndermeden hemen önce yeniden kontrol edin.” Bir senkronizasyon için okuma ile yazma arasında değişme olasılığı en yüksek şey, kimin yazmaya yetkili olduğudur.
Her Tajo senkronizasyonunun, kendi token’ı ve her beş dakikada bir yenilenen 15 dakikalık ömrüyle tek bir kiralaması vardır. Bir çalıştırma, hedefi çağırmadan önce ve imleci ilerletmeden önce bir kez daha, kiralamayı hâlâ elinde tuttuğunu kontrol eder. Onu kaybetmiş bir çalıştırma durur ve sayfası şunu söyler: “Çalıştırma yarı yolda yuvasını kaybetti ve iki kez yazmamak için durdu.” Canlı bir çalıştırmayla çakışan ikinci bir çalıştırma onun arkasında sıraya girmek yerine sona erer.
Kayıtlar da kontrol edilir. Okuma ile yazma arasında kayıtlar rıza filtresinden geçer. Kanıtlanabilir rızası olmadan bir pazarlama kitlesine yazılan bir kişi tahmin edilmek yerine reddedilir. Yardım sayfasının deyişiyle başarısızlık modu “fazla temkinli” olmaktır, asla “fazla göndermek” değil.
4. Geçecek olanı yeniden deneyin, geçmeyecek olanı durdurun
Altı kuralları ne sıklıkla yeniden deneneceği hakkında hiçbir şey söylemez. Bir senkronizasyonun bu kurala ihtiyacı vardır, çünkü en sık hataları bir hız sınırı ve bir sağlayıcının kötü bir dakikasıdır.
Kuyruktaki bir Tajo çalıştırması başarısız olursa beş deneme hakkı alır. Aralarındaki beklemeler 60, 120, 240 ve 480 saniyedir, toplamda yaklaşık on beş dakika. Bazı hatalar asla yeniden denenmez, çünkü tekrar denemek onları düzeltemez. Zaten devam eden bir çalıştırmayla çakışan bir çalıştırma yeniden denenmez; yayımlanmış sürümü veya bağlantıları artık geçerli olmayan bir çalıştırma da öyle.
Bir seri, anlık bir aksaklıktan farklıdır. Senkronizasyon en son değiştirildiğinden bu yana biten son beş çalıştırmanın hepsi başarısız olduysa, Tajo senkronizasyonu duraklatır ve son hatayı sayfasında gösterir. Tek bir başarı sayacı sıfırlar. Duraklatılmış bir senkronizasyonu hiçbir şey kendiliğinden yeniden başlatmaz; bir kişi nedeni düzeltir ve onu yeniden yayımlar. Worker makalesi, bu kuralı doğuran olayı anlatıyor.
5. Sessizliği bir bulgu olarak ele alın
“Başarısız bir okumayı sakin bir gün olarak değil, okunamaz olarak raporlayın.” Altısının en zoru budur ve yalnızca kısmen karşıladığımız tek kuraldır.
Geçerli olduğu yer: hata veren bir okuma çalıştırmayı başarısız kılar. Reddedilen bir token ya da yanıt vermeyen bir sunucu hedefe hiçbir şey göndermez, imleci olduğu yerde bırakır ve beş başarısız çalıştırmadan sonraki duraklatmaya sayılır. Ayrıca her saat, saati 13 geçe, Tajo etkin bir senkronizasyonu olan her çalışma alanını kontrol eder. Son 24 saatte hiç başarılı çalıştırma olmadığında, hiç çalıştırma kaydedilmemiş bir çalışma alanı dahil, kendi ekibini uyarır. Bu, saatlik kontroldür.
Geçerli olmadığı yer: yazarların anlattığı sessiz okuma, kayıt olmadan “OK” yanıtı veren bir okumadır. Çalıştırıcımız bunu başarı sayar. Shopify müşterileri gibi kaynaklarda ayrı bir kontrol, senkronizasyon daha önce kayıt üretmişse, sıfır kayıtla art arda on başarılı çalıştırmadan sonra Tajo ekibini uyarır. Shopify siparişleri güncellenme zamanına göre okunur; bu yüzden orada boş bir çalıştırma normaldir ve bu kontrol çalışmaz. Bazı kayıtlar döndüren ama olması gerekenden azını döndüren bir kaynak ise hiç yakalanmaz.
İtiraz şöyle: “15 dakikalık bir zamanlamada on boş çalıştırma iki buçuk saat eder. Neden ilkinde uyarmıyorsunuz?” Kişi senkronizasyonları gerçekten de varsayılan olarak her 15 dakikada bir çalışır. Ve çeyrek saat boyunca yeni müşterisi olmayan bir mağaza sıradan bir durumdur. İlk boş çalıştırmada verilen bir uyarı her gece çalardı ve her zaman çalan bir uyarıyı kimse okumaz. Bu eşik, hızı inandırıcılıkla takas eder. Yine de sessizlik hakkında bir tahmindir, yazarların kuralı değil.
6. Senkronizasyonun neyi yazabileceğine bir kez karar verin ve her çalıştırmaya bunu kanıtlatın
Beşinci kuralları ajanın tercihlerini “ajanın düzenleyemediği bir depoda” tutar. Altıncısı, ajana yalnızca okuduğu her yerde salt okuma erişimi verir ve her çalıştırmanın ne kadar harcayabileceğini sınırlar. İkisi de, ajan başkalarının yazdığı metni okuduğu ve bu metin ona emir vermeye çalışabileceği için vardır.
Bir senkronizasyonda tercihler dosyasının karşılığı yayımlanmış kuraldır. Bir Tajo senkronizasyonunu yayımlamak, onu önizlemesi yapılan kuralın tam bir özetine (digest) bağlar. Düzenlemek onu taslağa geri döndürür ve yeniden çalışmadan önce tekrar önizlemeden geçer. Her çalıştırma, herhangi bir şeyi değiştirmeden önce, o yayımlanmış sürümü yayımlandığı bağlantılarla çalıştırdığını kontrol eder. Bu kontrolü geçemeyen bir çalıştırma yeniden denenmez. Yön de sabittir: bir senkronizasyon kuralı tek yönde yazar ve asla Shopify’a geri yazmaz.
Harcama sınırının bir karşılığı yok. Senkronizasyon çalıştırmalarımızın çalıştırma başına bir harcama sınırı yoktur. Yeniden deneme sınırı ve duraklatma, bir çalıştırmanın maliyetini değil, bir hatanın ne kadar sürebileceğini sınırlar.
Neler hazır, neler değil
Bu yazının yazıldığı tarih itibarıyla hazır olanlar:
- Yalnızca her kaydın ulaştığı bir toplu işlemden sonra ilerleyen bir imleç ve bir kişinin başlattığı çalıştırmaların geri saramayacağı zamanlanmış bir sipariş imleci.
- Yedi gün saklanan tamamlanmış yazmalar defterinde kontrol edilen kayıt başına bir teslim anahtarı.
- Yazmadan önce ve imleç ilerlemeden önce kontrol edilen senkronizasyon başına tek kiralama.
- Önce 60 saniye, ardından 120, 240 ve 480 saniye bekleyen, çakışmada veya geçersiz bir yayında yeniden denemeyen çalıştırma başına beş deneme.
- Senkronizasyonun sayfasında gösterilen art arda beş çalıştırma başarısız olduğunda bir duraklatma.
- Son 24 saatte hiçbir çalıştırma başarılı olmadığında saatlik bir uyarı.
- Bir pazarlama kitlesine yazılan kişiler için çalıştırma anında bir rıza filtresi ve her çalıştırmada yayımlanmış sürüm olduğunun kontrolü.
Hazır olmayanlar ve güvenmeden önce bilmeye değer olanlar:
- Sıfır kayıtla başarılı olan bir okuma okunamaz olarak raporlanmaz. On çalıştırmalık uyarı bunun bir kısmını kapsar. Shopify siparişlerini veya çok az kayıt döndüren bir kaynağı kapsamaz.
- 24 saatlik uyarı Tajo’ya ulaşır, size değil; on çalıştırmalık uyarı da öyle. Duraklatma ise senkronizasyonun sayfasında görünür.
- Saatlik kontrol, her senkronizasyonu değil çalışma alanını izler. Sağlıklı tek bir senkronizasyon, yanındaki sessiz olanı gizler.
- Çalıştırma başına harcama sınırı yok.
- Duraklatılmış bir senkronizasyonu hiçbir şey yeniden başlatmaz. Bunu bir kişi yapar.
- Beş hatalık duraklatma ve 24 saatlik kontrol, senkronizasyon başına değil, tüm Tajo kurulumu için ayarlanır.
Bunlardan biri kendi senkronizasyonunuzda ortaya çıktığında, Takılan veya başarısız olan bir senkronizasyonu kurtarma ne gördüğünüzü ve ne yapmanız gerektiğini anlatır.
Yazarlar altı kuralı, bir kişinin her sabah okuduğu bir özet için yazdı. Bir senkronizasyonun ise hiç sabah okuyucusu yoktur; bu yüzden bu kurallara daha çok ihtiyacı vardır. Birinci ile dördüncü arasındaki kurallar ve altıncı kural bugün çalıştırıcımızda kod olarak var. Beşinci kural yarı yarıya yazıldı: kaynağını okuyamayan bir senkronizasyon bunu söylemeli.
Sık Sorulan Sorular
Otomatik bir veri senkronizasyonunun, kimse onu izlemezken güvenle çalışması için neye ihtiyacı vardır?
Altı şeye. Yalnızca bütün bir toplu işlem ulaştıktan sonra ilerleyen bir imlece. Her kayıt için, yeniden denemenin yeniden türettiği ve tamamlanan yazmaların defterinde kontrol edilen bir teslim anahtarına. Senkronizasyon başına aynı anda tek bir çalıştırmaya. Sınırlı sayıda yeniden denemeye, ardından çalıştırmalar başarısız olmaya devam ederse bir duraklatmaya. Bir gün boyunca hiçbir şey başarılı olmadığında bir uyarıya. Ve her çalıştırmanın uyguladığını kanıtlaması gereken yayımlanmış bir kurala.
Bir senkronizasyon neden son 24 saat gibi sabit bir zaman penceresini okumamalı?
Çünkü çalıştırmalar dakik değildir. Geç başlayan bir çalıştırma, pencerenin hiç kapsamadığı bir boşluk bırakır; erken başlayan bir çalıştırma ise kayıtları iki kez okur. Kaydedilmiş bir imleç, çalıştırma ne zaman başlarsa başlasın, her çalıştırmayı tam olarak son temiz toplu işlemin bittiği yerden başlatır.
Tajo, yeniden denenen bir senkronizasyonun aynı kaydı iki kez yazmasını nasıl önler?
Her kayıt bir teslim anahtarı alır: senkronizasyonun, kaynağın, sayfa imlecinin, sayfadaki konumun ve kaydın kendisinin bir özeti (hash). Anahtar, hedef çağrılmadan önce sahiplenilir ve yazma başarılı olduğunda tamamlandı olarak işaretlenir; tamamlanan anahtarlar yedi gün saklanır. Bir yeniden deneme veya sonraki bir çalıştırma aynı anahtarı türetir ve hedefi yeniden çağırmaz.
Okuma sessizce başarısız olduğu için bir kaynak hiçbir şey döndürmediğinde Tajo bunu fark eder mi?
Yalnızca kısmen. Hata veren bir okuma çalıştırmayı başarısız kılar ve bu çalıştırma, art arda beş başarısız çalıştırmadan sonraki duraklatmaya sayılır. Sıfır kayıtla başarılı olan bir okuma başarı sayılır. Shopify müşterileri gibi kaynaklarda, senkronizasyon daha önce kayıt üretmişse, sıfır kayıtla art arda on başarılı çalıştırmadan sonra Tajo ekibi uyarılır. Güncellenme zamanına göre okunan Shopify siparişlerinde bu kontrol çalışmaz.