Workflow Automation

ساخت گردش‌کارهای مالی با توان پردازشی بالا با استفاده از Temporal

فناوری مالی به قابلیت اطمینان مطلق، یکپارچگی داده و پردازش با تأخیر کم نیاز دارد. معماری‌های سنتی تک‌تکه اغلب در مدیریت تراکنش‌های طولانی‌مدت، تلاش مجدد و سازگاری نهایی با پیچیدگی دست‌وپنج نرم می‌کنند. Temporal، یک پلتفرم ارکستراسیون گردش‌کار توزیع‌شده است که بازپخش قطعی و اجرای بادوام را به برنامه‌های مدرن می‌آورد. در این راهنما، ما بررسی می‌کنیم که چگونه می‌توان یک موتور گردش‌کار سفارشی با استفاده از Go و Temporal ساخت که به‌طور خاص برای تراکنش‌های مالی با توان پردازشی بالا طراحی شده است.

چرا Temporal برای گردش‌کارهای مالی؟

در حوزه مالی، یک تراکنش تنها یک فراخوانی API نیست؛ بلکه یک فرآیند دارای حالت است که شامل اعتبارسنجی، تشخیص تقلب، به‌روزرسانی دفاتر و خدمات اطلاع‌رسانی می‌شود. اگر هر مرحله‌ای شکست بخورد، سیستم باید تلاش مجدد را بدون ایجاد اثرات جانبی یا فساد داده مدیریت کند. Temporal این مشکل را با ضبط تاریخچه کامل اجرا حل می‌کند. اگر یک کارگر (Worker) در حین انجام یک فعالیت خاص دچار خطا شود، Temporal گردش‌کار را از آخرین نقطه بازنشانی شناخته‌شده بازپخش می‌کند و حتی در مواجهه با شکست‌های زیرساختی، معنای اجرای دقیقاً یک‌بار (Exactly-once) را تضمین می‌کند.

راه‌اندازی محیط Go

برای شروع، مطمئن شوید که Go (نسخه 1.18 یا بالاتر) و خط فرمان Temporal (CLI) برای اجرای سرور به‌صورت محلی نصب شده است. ما ساختار گردش‌کار خود را با استفاده از رابط‌های Go تعریف می‌کنیم که امکان جداسازی تمیز بین منطق ارکستراسیون و منطق کسب‌وکار را فراهم می‌کند.

package main

import (
	"go.temporal.io/sdk/client"
	"go.temporal.io/sdk/worker"
	"go.temporal.io/sdk/activity"
	"context"
)

// Define the workflow input structure
type TransactionInput struct {
	TransactionID string
	Amount        float64
	Currency      string
}

// Define the workflow function signature
func MyWorkflow(ctx workflow.Context, input TransactionInput) (result string, err error) {
	// Workflow logic goes here
	return
}

پیاده‌سازی منطق هسته گردش‌کار

هسته موتور ما، خود گردش‌کار است. ما یک گردش‌کار انتقال ساده را پیاده‌سازی می‌کنیم که ورودی را اعتبارسنجی کرده، پرداخت را پردازش می‌کند و دفتر را به‌روزرسانی می‌نماید. به استفاده از `workflow.ExecuteActivity` توجه کنید. این دستور یک وظیفه فعالیت را زمان‌بندی می‌کند که توسط یک کارگر به‌صورت ناهمگام اجرا می‌شود.

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 "Transaction Rejected", nil
	}

	// Proceed with payment processing
	var paymentResult string
	err = workflow.ExecuteActivity(ctx, ProcessPayment, input).Get(ctx, &paymentResult)
	if err != nil {
		return "", err
	}

	return paymentResult, nil
}

مدیریت فعالیت‌ها و اثرات جانبی

فعالیت‌ها بلوک‌های سازنده منطق کسب‌وکار شما هستند. آن‌ها توابع بدون حالتی هستند که عملیات ورودی/خروجی مانند نوشتن در پایگاه داده یا فراخوانی APIهای خارجی را انجام می‌دهند. در برنامه‌های مالی، اطمینان از اینکه این عملیات ایستا (Idempotent) هستند حیاتی است. به عنوان مثال، ارسال یک اطلاع‌رسانی باید به عنوان یک اثر جانبی علامت‌گذاری شود تا تنها یک بار اجرا شود، حتی اگر گردش‌کار به دلیل راه‌اندازی مجدد کارگر بازپخش شود.

با بهره‌گیری از بازپخش قطعی Temporal، نیازی به مکانیزم‌های قفل‌گذاری توزیع‌شده پیچیده ندارید. این چارچوب تضمین می‌کند که فعالیت‌ها دقیقاً یک بار اجرا می‌شوند و تصمیمات گردش‌کار در طول راه‌اندازی مجدد‌ها سازگار باقی می‌مانند. این امر کد را به طور قابل توجهی ساده می‌کند و احتمال شرایط مسابقه (Race conditions) را در سناریوهای با توان پردازشی بالا کاهش می‌دهد.

نتیجه‌گیری

ساخت یک موتور گردش‌کار سفارشی با Temporal و Go، پایه‌ای مقاوم برای مدیریت تراکنش‌های مالی پیچیده فراهم می‌کند. با واگذار کردن مدیریت حالت و مدیریت خطاها به پلتفرم Temporal، توسعه‌دهندگان می‌توانند به جای تمرکز بر زیرساخت‌ها، بر منطق کسب‌وکار تمرکز کنند. ترکیب عملکرد Go و بادوامی Temporal، این پشته فناوری را برای سیستم‌های مالی با توان پردازشی بالا ایده‌آل می‌سازد. هنگامی که پیاده‌سازی خود را گسترش می‌دهید، در نظر بگیرید که با ویژگی‌های دید Temporal ادغام کنید تا سلامت و عملکرد گردش‌کار را به‌صورت بلادرنگ پایش کنید و اطمینان حاصل کنید که موتور مالی شما تحت بار کاری، قابل اطمینان و مقیاس‌پذیر باقی می‌ماند.

Share: