Workflow Automation

Dayanıklı Dağıtık Sistemler İnşa Etmek: Temporal İş Akışı Orkestrasyonuna Derin Bir Bakış

Modern arka uç geliştirmesi alanında, dayanıklı ve dağıtık uygulamalar oluşturmak giderek daha karmaşık hale geliyor. Geleneksel monolitik mimariler mikro hizmetlere yer açıyor; bu durum durum yönetimi, hata toleransı ve uzun süren işlemler konusunda yeni zorluklar getiriyor. Bu tam olarak bu sorunları çözmek için tasarlanmış, ölçeklenebilir ve kalıcı uygulamaların inşasını kolaylaştıran açık kaynaklı bir platform olan Temporal burada devreye giriyor.

Temporal yalnızca bir kütüphane değildir; başarısızlıklara karşı zarifçe direnen dağıtık sistemler oluşturmak için bir platformdur. Uzun süren iş mantığını iş akışları olarak tanımlayan kod yazmak için bir çerçeve sağlar, böylece altta yatan altyapı çöktüğünde bile iş durumu korunur ve kaldığı yerden tam olarak devam ettirilebilir.

Temel Sorunu Anlamak: Altyapının Geçici Doğası

Tipik bir ödeme işleme iş akışını düşünün. Kredi kartını doğrulamayı, kullanıcıyı ücretlendirmeyi, envanteri güncellemeyi ve bir onay e-postası göndermeyi içerebilir. Bu mantık standart bir mikro hizmette uygulanırsa ve sunucu ücretlendirmeden sonra ancak envanter güncellemesinden önce çökerse, kısmi bir durumla karşı karşıyasınız demektir. Tüm süreci yeniden çalıştırmak kullanıcının çift kez ücretlendirilmesine neden olabilir.

Temporal, iş akışı mantığını yürütme motorundan ayırarak bu sorunu çözer. Geliştirici ne olacağını tanımlayan kodu yazar ve Temporal'ın motoru ne olduğunu, kalıcılığı, yeniden denemeleri ve sıralamayı dahil ederek nasıl gerçekleştiğini yönetir. Bu durum genellikle durumun "Eternalization"ı (Sonsuzlaştırılması) olarak adlandırılır.

Temporal Nasıl Çalışır: İş Akışları, Etkinlikler ve İstemciler

Temporal'ı anlamak için üç temel soyutlamasını anlamanız gerekir:

  • İş Akışları (Workflows): Uzun süren, kalıcı mantık parçalarıdır. Orkestrasyonu tanımlarlar ve etkinlikleri çağırabilirler.
  • Etkinlikler (Activities): Veritabanı sorguları veya HTTP istekleri gibi asıl işi gerçekleştiren, kısa süren ve hata toleranslı işlevlerdir.
  • İstemciler (Clients): Uygulamanızın iş akışlarını başlatmak ve Temporal sunucusuyla iletişim kurmak için giriş noktasıdır.

Pratik Örnek: Kalıcı Bir İş Akışını Kodlama

Go kullanarak pratik bir örneğe bakalım. Bir siparişi işleyen bir iş akışını hayal edin. Envanter kontrolü başarısız olursa, sistemin bir sonraki adıma geçmeden önce yeniden denemesini sağlamak istiyoruz. Temporal olmadan, bu yeniden deneme mantığını, zaman aşımını ve durum kalıcılığını manuel olarak yönetmek hata yapmaya açıktır. Temporal ile bu durum bildirimseldir.

package main

import (
	"context"
	"fmt"

	"go.temporal.io/sdk/client"
	"go.temporal.io/sdk/workflow"
)

// ProcessOrderWorkflow, kalıcı iş akışımızın tanımını temsil eder
func ProcessOrderWorkflow(ctx workflow.Context, orderID string) error {
	ao := workflow.ActivityOptions{
		StartToCloseTimeout: 10 * time.Second,
	}
	ctx = workflow.WithActivityOptions(ctx, ao)

	// Envanteri kontrol et - bu başarısız olursa, Temporal otomatik olarak yeniden dener
	var inventoryOK bool
	err := workflow.ExecuteActivity(ctx, CheckInventory, orderID).Get(ctx, &inventoryOK)
	if err != nil {
		return fmt.Errorf("envanter kontrolü başarısız oldu: %w", err)
	}

	if !inventoryOK {
		return fmt.Errorf("ürün stokta yok")
	}

	// Ödemeyi yükle
	err = workflow.ExecuteActivity(ctx, ChargePayment, orderID).Get(ctx, nil)
	if err != nil {
		return fmt.Errorf("ödeme başarısız oldu: %w", err)
	}

	// Veritabanını güncelle
	err = workflow.ExecuteActivity(ctx, UpdateOrderStatus, orderID, "SHIPPED").Get(ctx, nil)
	return err
}

Kodun senkron, sıralı programlama gibi göründüğüne dikkat edin. Ancak arka planda, Temporal her adım için bir olay geçmişi kaydeder. Süreç ödemeyi yükledikten sonra çökerse, Temporal iş akışını son kontrol noktasından yeniden oynatır; envanter kontrolünü atlar ancak veritabanı güncelleme mantığını güvenle yeniden yürütür.

Neden Temporal Seçmelisiniz?

Temporal'ın benimsenmesi, dağıtık sistemlerin karmaşıklığını soyutlama yeteneği tarafından yönlendirilmektedir. Manuel durum makineleri, özel yeniden deneme mantığı ve orkestrasyon için veritabanı düzeyinde kilitleme mekanizmalarına duyulan ihtiyacı ortadan kaldırır. İş akışlarını birinci sınıf vatandaşlar olarak ele alarak geliştiriciler altyapı altyapısına değil iş mantığına odaklanabilir.

Sonuç

Temporal, arka uç sistemlerini nasıl inşa ettiğimizde önemli bir paradigma değişimini temsil eder. Geliştiricilere, doğası gereği dayanıklı, ölçeklenebilir ve sürdürülebilir kod yazma gücü verir. Kalıcı iş akışı orkestrasyonunu benimseyerek ekipler, operasyonel yükü azaltabilir ve kaçınılmaz başarısızlıklarla karşı karşıya kalsalar bile uygulamalarının tutarlı kalmasını sağlayabilir. Sistemlerinin güvenilirliğini artırmak isteyen orta ve ileri düzey geliştiriciler için Temporal, modern mimari araç setinde vazgeçilmez bir araçtır.

Share: