castomFLOW

Güvenebileceğiniz çalıştırmalar

Kimsenin bir otomasyona dikkat etmesi, bir şeyi iki kez gönderene kadar sürmez

Sonra herkes fark eder. Bu sayfadaki dört mekanizma, bu tür yazılımların hatalarının her zaman aynı dört hata olmasından ve bunların hepsinin özenle değil tasarımla önlenebilir olmasından kaynaklanır.

Yayınlamadan önce simüle edin

Kapalı durumdaki bir iş akışından gerçek bir kayıt geçirin ve tam olarak ne olacağını geri okuyun: izlenen yolu, her adımdaki her değeri, her iletinin ifadesini ve her dış sisteme gidecek isteği.

Hiçbir şey binadan çıkmaz. E-posta gönderilmez, fatura kesilmez, ücret tahsil edilmez, satır yazılmaz. Dış çağrılar, gönderilecek yük ile birlikte niyet olarak kaydedilir; böylece eşlemenin doğru olup olmadığını, birinin sorunu hâline gelmeden önce görebilirsiniz.

Simülasyonlar, insanları bir otomasyonu açmaktan alıkoyan soruyu yanıtlamanın yoludur: bu gerçekte ne yapacak?

Simülasyon · sipariş 88 214Hiçbir şey gönderilmedi
  • 1Adresi doğrulaEşleşti. 6 alan yazılacaktı.
  • ?KoşulSipariş 1 000 zł üzeri mi? Hayır — 289,00 zł. Kısa yol izlendi.
  • 3FaturaFaturalandırma sistemine POST yapılacaktı. Yükün tamamı gösteriliyor.
  • !Burada yakalandıKDV oranı yanlış alandan eşlendi. Muhasebecinin gelen kutusunda değil, bir simülasyonda bulundu.

Gönderilen: hiçbir şeyTahsil edilen: hiçbir şey

Her çalıştırma, girdiği sürümü izler

Bir iş akışında değişiklik yayınlamak, halihazırda içinde bulunan çalıştırmalara dokunmaz. Her çalıştırma başladığı sürüme sabitlenmiştir ve ne kadar sürerse sürsün, siz bu arada ne kadar yeniden yazarsanız yazın, o sürümü tamamlar.

Böylece on bin kişi iş akışının ortasındayken bile onu yeniden yapılandırabilirsiniz ve her biri kendisine vaat edilen akışı tamamlar. Alternatif — tüm aşağı akış yolunun girişte somutlaştırıldığı tasarım — çoğu araçta canlı bir otomasyonu düzenlemenin neden tehlikeli hissettirdiğinin sebebidir. Burada sıradandır.

Yeni çalıştırmalar, yayınladığınız andan itibaren yeni sürümü alır. Bir çalıştırmanın hangi sürümde olduğu çalıştırmanın üzerine yazılır; böylece Mart ayındaki davranışa dair bir sorunun Eylül'de bir cevabı olur.

Canlıyken düzenlemev4 → v5
  • 1Öncesi2 918 çalıştırma yolda, tümü v4 üzerinde. Bazıları iki günlük bir beklemede.
  • 2v5'i yayınlaİki adım yeniden sıralandı, bir mesaj yeniden yazıldı.
  • 3SonrasıO 2 918 çalıştırma v4'ü tamamlar. 11:40'tan itibaren başlayan her şey v5 çalıştırır.
  • §Hiç kimsebir iş akışının yarısını ve diğerinin yarısını almadı.

Her çalıştırmaya kaydedilen sürümEski sürümler saklanır

Çift gönderemeyen yeniden denemeler

Bir adım, girdilerinin saf bir fonksiyonudur ve etkileri, çalıştırmanın bir sonraki adıma kendi ilerlemesiyle birlikte taahhüt edilir. Mesajın gitmiş olduğu ama çalıştırmanın bunu bilmemediği bir pencere yoktur.

Bütün numara budur ve bu bir vaat değil, yapısal bir özelliktir. Adım ortasında öldürülen bir işçi — bir dağıtım, bir çökme, kaybolan bir makine — çalıştırmayı tam bulunduğu yerde bırakır. Başka bir işçi onu alır ve adımı yeniden çalıştırır. Etki ve ilerleme tek olarak taahhüt edildiğinden, ya ikisi de oldu ya da hiçbiri.

İdempotency anahtarlarını destekleyen sistemlere yapılan giden çağrılar, çalıştırmadan ve adımdan türetilen bir anahtar taşır; böylece karşı taraf da tekrarı tanıyabilir.

Gönderi ortasında ölen işçiKurtarıldı
  • 15. adım başlarKargo bildirimini gönderin.
  • ✕İşçi ölürDağıtım. Hiçbir şey taahhüt edilmemişti.
  • 2AlındıBaşka bir işçi, çalıştırmayı hâlâ 5. adımda bulur.
  • ✓Bir kez gönderildiMüşteri iki e-posta değil, bir e-posta aldı.

Etkiler ilerlemeyle birlikte taahhüt edilirÇalıştırma ve adım başına idempotency anahtarı

Bir insanın okuması için yazılmış günlük

Her çalıştırma, her adım, izlenen dal ve ona karar veren değer. Adım başına zamanlamalar. Her harici çağrının isteği ve yanıtı, kimlik bilgileri sansürlenmiş şekilde. Çalıştırmanın üzerinde olduğu sürüm. Bir çalıştırmanın nerede beklediği ve ne zamana kadar.

On dördünde verilen siparişe ne olduğunu biri sorduğunda cevap vardır ve onu bulmak üç sistemin günlüklerini bir öğleden sonra boyunca karşılaştırmak değil, bir dakika sürer.

Başarısız olan çalıştırmalar tek bir yerde toplanır ve nedenleri gruplanır; böylece “gece boyunca kırk bir hata” ifadesi, kırk bir ayrı soruşturma yerine “bir tedarikçi dokuz dakika boyunca 503 döndürdü” şeklinde çözülür.

Gece boyunca, gruplanmış41 hata
  • 1Tek nedenTedarikçi API'si 02:41 ile 02:50 arasında 503 döndürdü.
  • 2Ne oldu41'in tamamı yeniden denendi; 39'u ikinci denemede başarılı oldu.
  • 3Kalanİkisi durdu ve bir kişiyi bekliyor. İkisi de başarısız olan satırla birlikte listeleniyor.
  • §Kırk bir değilsoruşturma. Tek bir soruşturma ve iki kayıt hakkında bir karar.

Kimlik bilgileri sansürlendiSürüm kaydedildi

Neyi iddia etmediğimiz

Pazarlama sayfasında bir çalışma süresi (uptime) rakamı yayımlamıyoruz, çünkü bir ölçüm penceresi ve “çalışır” tanımı olmayan bir sayı süslemedir. Bunu sözleşmeniz gereği ihtiyacınız varsa sorun, gerçekte neye taahhüt edebileceğimizi konuşalım.

Ayrıca başkasının API'sini güvenilir hale getiremeyiz. Bir sağlayıcı çöktüğünde, ona bağlı bir iş akışı bekler, yeniden dener ve sonunda net bir nedenle durur. Vaat edebileceğimiz şey, hatanın görünür olması, hiçbir şeyi bozmaması ve devam ettirmenin mesajı ikinci kez göndermemesidir.

Beklemeler hakkında: iki gün bekleyen bir çalıştırma, kuyrukta bekleyen bir iş değil, çalıştırmanın üzerindeki bir wake_at değeridir. Bu yüzden bir iş akışı, üç haftalık bir beklemede yüz bin çalıştırmayı hiçbir maliyet olmadan tutabilir ve şu anda bekleyen çalıştırma sayısı hakkında düşünmeniz gerekmez.

Hiç düşünmediğiniz çalıştırma, işe yarayan olandır.