Ana Sayfa

Go ile Dayanıklı İş Akışları: `context.Context` Gücünü Kullanmak

1 dk okuma

Go geliştiricileri için doğal ve tanıdık hissettiren bir iş akışı kütüphanesi oluşturmak, Go'nun güçlü asenkron çalışma zamanı ve context.Context desteği gibi özelliklerine rağmen zorlayıcı olabilir. Özellikle Go'nun sınırlı tip sistemi, kütüphane geliştiricileri için bazı engeller teşkil etmektedir. Bu makale, Go'da iş akışlarını nasıl işler hale getireceğimizi, özellikle de Go'nun yerel context.Context arayüzünü dayanıklı yürütmeyi uygulamak için nasıl genişleteceğimizi ve iş akışı ile adım fonksiyonlarına derleme zamanı tip güvenliği sağlarken tek bir arayüz sunmayı nasıl uzlaştıracağımızı inceliyor.

DBOS tarafından geliştirilen dayanıklı iş akışları kütüphanesi, Go'nun yerel context.Context yapısını temel alarak durable.Context adında genişletilmiş bir arayüz sunar. Bu tasarımın üç ana hedefi vardır: Kullanıcının anlaması gereken tek arayüz olması, Go'ya özgü bir his vermesi ve iş akışları ile adımlar için derleme zamanı tip güvenliği sağlaması. durable.Context, RunWorkflow ve RunAsStep gibi anahtar metotlar aracılığıyla kullanıcı fonksiyonlarını iş akışları veya adımlar olarak çalıştırmayı sağlar. Bu metotlar, iş akışı yürütme durumunu yönetir ve Go'nun context.Context yapısını kullanarak iş akışı meta verilerini fonksiyonlar arasında otomatik olarak yayar.

Kütüphane, Go geliştiricileri için tanıdık olan bağlamı ilk argüman olarak geçirme kalıbını benimser. Bu yaklaşım, RunWorkflow ve RunAsStep metotlarının bağlamı inceleyerek iş akışının durumunu kalıcı olarak kaydetmesine olanak tanır. Ayrıca, durable.Context'in Go'nun yerel context.Context etrafında tasarlanmasının bir diğer önemli nedeni, onun zaman aşımı (deadline) ve iptal (cancellation) mekanizmalarından yararlanmaktır. Bu sayede, geliştiriciler tanıdık Go kalıplarını kullanarak iş akışlarına zaman aşımı ekleyebilir ve yürütmeyi durdurabilirler, bu da dayanıklı ve hataya dayanıklı sistemler oluşturmayı kolaylaştırır.

İçgörü

Go geliştiricilerinin karmaşık iş akışlarını daha güvenilir ve yönetilebilir bir şekilde oluşturmalarına olanak tanıyan, Go'nun yerel `context.Context` yapısını dayanıklı yürütme için genişleten bir yaklaşım sunuyor.

Kaynak