Workflow Automation

Temporal ile Çok Dilli İş Akışları Oluşturma

Mikroservis mimarisi, dağıtık işlemlerin yönetilmesinde genellikle karmaşıklık getirir. Hizmetler birbirinden bağımsız olsa da, etkileşimlerinin koordinasyonu sağlam bir düzenleme gerektirir. Temporal, geliştiricilerin hata toleranslı bir şekilde güvenilir iş akışları yazmasına olanak tanıyan dayanıklı yürütme yetenekleri sunarak bu sorunu çözer. Bu kılavuz, Python, Go ve TypeScript ile Temporal'ın nasıl kullanılacağını ve gerçekten çok dilli bir istemci ortamı oluşturmayı inceler.

Çok Dilli İstemcilerin Gücü

Temporal'ın en güçlü özelliklerinden biri, dil bağımsız SDK'larıdır. Takımlar, iş akışı tutarlılığından ödün vermeden her hizmet için en uygun dili seçebilir. Temel arka uç performans için Go'da, veri işleme katmanı analiz için Python'da veya ön uç entegrasyonu TypeScript'te olsa bile, Temporal İş Akışı Tanım Dili (WDL) kullanarak birleşik bir programlama modeli sağlar.

Go ile İş Akışlarının Tanımlanması

Go, genellikle yüksek performanslı mikroservislerin omurgasıdır. Temporal'da bir Go iş akışı, düzenli bir işlev olarak tanımlanır. Önemli olan, asıl işi yapan etkinlikleri (durumsuz işlevler) çağırmanıza olanak tanıyan workflow.ExecuteActivity işlevini kullanmaktır.

package main

import (
    "go.temporal.io/sdk/workflow"
)

func MyWorkflow(ctx workflow.Context) error {
    ao := workflow.ActivityOptions{
        StartToCloseTimeout: 10 * time.Second,
    }
    ctx = workflow.WithActivityOptions(ctx, ao)

    var result string
    // Etkinliği çalıştır ve tamamlanmasını bekle
    err := workflow.ExecuteActivity(ctx, GreetActivity, "Hello").Get(ctx, &result)
    return err
}

func GreetActivity(ctx context.Context, name string) (string, error) {
    return "Greeting: " + name, nil
}

Python ile Çalışanların (Workers) Uygulanması

Python geliştiricileri, Temporal'ın sezgisel dekoratörlerinden yararlanır. @workflow.defn ve @activity.defn dekoratörleri, iş akışlarının ve etkinliklerin kaydedilmesini kolaylaştırır. Bu yaklaşım, iş mantığını temiz tutar ve iş akışı kontrol akışını etkinlik uygulamasından ayırır.

from temporalio import workflow
from temporalio import activity
from typing import Dict

@activity.defn
async def greet_activity(name: str) -> str:
    return f"Greeting: {name}"

@workflow.defn
class MyWorkflow:
    @workflow.run
    async def run(self, name: str) -> str:
        result = await workflow.execute_activity(
            greet_activity,
            name,
            schedule_to_close_timeout=timedelta(seconds=10)
        )
        return result

TypeScript ile İstemci Entegrasyonu

TypeScript istemcileri, sunucusuz işlevler veya ön uca bağlı çalışanlar için idealdir. SDK, modern web geliştirme uygulamalarıyla iyi uyum sağlayan tür güvenli arayüzler sağlar. İş akışlarını başlatabilir ve durumlarını doğrudan Node.js uygulamalarınızdan sorgulayabilirsiniz.

import { Client } from '@temporalio/client';

async function startWorkflow() {
    const client = new Client({
        connectionOptions: {
            address: 'localhost:7233',
        },
    });

    const handle = await client.start('MyWorkflow', {
        taskQueue: 'default',
        args: ['World'],
    });

    console.log(`Workflow started with ID: ${handle.workflowId}`);
}

startWorkflow();

Çok Dilli Ortamlar İçin En İyi Uygulamalar

Çoklu dilde çalışırken tutarlılık esastır. Uyumluluk sorunlarından kaçınmak için tüm istemcilerin aynı Temporal Sunucu sürümünü kullandığından emin olun. Farklı dillerdeki etkinlikler arasında aktarılan veri yapıları için paylaşılan arayüzler veya Protobuf şemaları kullanın. Bu, seri hale getirme hatalarını önler ve tüm iş akışı boyunca tür güvenliğini sağlar.

Sonuç

Temporal, geliştiricilerin tek bir dil ekosistemine hapsolmadan dayanıklı ve ölçeklenebilir mikroservisler oluşturmasına olanak tanır. Python, Go ve TypeScript'ten yararlanarak takımlar, her dilin güçlü yönlerinden yararlanırken birleşik bir yürütme modeli koruyabilir. Bu kalıpları benimsedikçe, sağlam ve hatalara karşı dayanıklı uygulamalar sunmak için dayanıklı yürütme ve hata toleransına odaklanın.

Share: