Finans teknolojisi mutlak güvenilirlik, veri bütünlüğü ve düşük gecikmeli işlem gerektirir. Geleneksel monolitik mimariler, uzun süreli işlemleri, yeniden denemeleri ve nihai tutarlılığı yönetmenin karmaşıklığıyla sık sık mücadele eder. Deterministik yeniden oynatma ve kalıcı yürütme özelliğini modern uygulamalara getiren dağıtılmış bir iş akışı düzenleme platformu olan Temporal devreye girer. Bu kılavuzda, yüksek geçişli finansal işlemlere özel olarak tasarlanmış, Go ve Temporal kullanarak özel bir iş akışı motoru nasıl oluşturulacağını keşfedeceğiz.
Finansal İş Akışları İçin Neden Temporal?
Finans sektöründe bir işlem yalnızca tek bir API çağrısı değildir; doğrulama, dolandırıcılık tespiti, defter güncellemeleri ve bildirim hizmetlerini içeren durum bilgili bir süreçtir. Herhangi bir adım başarısız olursa, sistem yan etkiler veya veri bozulmasına neden olmadan yeniden denemeleri yönetebilmelidir. Temporal, tüm yürütme geçmişini kaydederek bunu çözer. Belirli bir etkinlik sırasında bir işçi çökerse, Temporal iş akışını bilinen son kontrol noktasından yeniden oynatarak altyapı hatalarıyla karşılaşılsa bile tam olarak bir kez çalışma (exactly-once) semantiğini sağlar.
Go Ortamının Kurulumu
Başlamak için Go'nun (sürüm 1.18 veya üzeri) yüklü olduğundan ve sunucuyu yerel olarak çalıştırmak için Temporal CLI'nin mevcut olduğundan emin olun. İş akışı yapımızı Go arayüzlerini kullanarak tanımlayacağız; bu, düzenleme mantığı ile iş mantığı arasında temiz bir sorumluluk ayrımı sağlar.
package main
import (
"go.temporal.io/sdk/client"
"go.temporal.io/sdk/worker"
"go.temporal.io/sdk/activity"
"context"
)
// İş akışı giriş yapısını tanımlayın
type TransactionInput struct {
TransactionID string
Amount float64
Currency string
}
// İş akışı işlevi imzasını tanımlayın
func MyWorkflow(ctx workflow.Context, input TransactionInput) (result string, err error) {
// İş akışı mantığı buraya gelir
return
}
Çekirdek İş Akışı Mantığının Uygulanması
Motorumuzun çekirdeği kendisi iş akışıdır. Girişi doğrulayan, ödemeyi işleyen ve defteri güncelleyen basit bir transfer iş akışı uygulayacağız. `workflow.ExecuteActivity` kullanımına dikkat edin. Bu, bir işçi tarafından asenkron olarak yürütülen bir etkinlik görevi planlar.
func TransferWorkflow(ctx workflow.Context, input TransactionInput) (string, error) {
ao := workflow.ActivityOptions{
StartToCloseTimeout: 10 * time.Second,
RetryPolicy: &temporal.RetryPolicy{
MaximumAttempts: 3,
},
}
ctx = workflow.WithActivityOptions(ctx, ao)
var validationOutput bool
err := workflow.ExecuteActivity(ctx, ValidateTransaction, input).Get(ctx, &validationOutput)
if err != nil {
return "", err
}
if !validationOutput {
return "İşlem Reddedildi", nil
}
// Ödeme işleme devam et
var paymentResult string
err = workflow.ExecuteActivity(ctx, ProcessPayment, input).Get(ctx, &paymentResult)
if err != nil {
return "", err
}
return paymentResult, nil
}
Etkinliklerin ve Yan Etkilerin Yönetimi
Etkinlikler, iş mantığınızın yapı taşlarıdır. Veritabanı yazma işlemleri veya harici API çağrıları gibi G/Ç işlemleri gerçekleştiren durum bilgisi olmayan işlevlerdir. Finansal uygulamalarda, bu işlemlerin idempotent (bir kez çalıştırılması ile birden fazla çalıştırılması arasında fark olmayan) olduğundan emin olmak kritik öneme sahiptir. Örneğin, bir bildirim göndermek, bir işçi yeniden başlatması nedeniyle iş akışı yeniden oynatılsa bile yalnızca bir kez yürütüleceği şekilde bir yan etki olarak işaretlenmelidir.
Temporal'in deterministik yeniden oynatma özelliğinden yararlanarak, karmaşık dağıtılmış kilit mekanizmalarına duyulan ihtiyacı ortadan kaldırır. Çerçeve, etkinliklerin tam olarak bir kez yürütülmesini ve iş akışı kararlarının yeniden başlatmalar boyunca tutarlı olmasını sağlar. Bu, kodu önemli ölçüde basitleştirir ve yüksek geçişli senaryolarda yarış durumlarının (race condition) oluşma olasılığını azaltır.
Sonuç
Temporal ve Go ile özel bir iş akışı motoru oluşturmak, karmaşık finansal işlemleri ele almak için sağlam bir temel sağlar. Durum yönetimi ve hata işleme yükünü Temporal platformuna devrederek geliştiriciler altyapı altyapısından ziyade iş mantığına odaklanabilir. Go'nun performansı ile Temporal'in dayanıklılığının birleşimi, bu yığınını yüksek geçişli finansal sistemler için ideal kılar. Uygulamanızı genişletirken, iş akışı sağlığını ve performansını gerçek zamanlı olarak izlemek ve finansal motorunuzun yük altında güvenilir ve ölçeklenebilir kalmasını sağlamak için Temporal'in görünürlük özellikleriyle entegrasyon düşünün.