Ana içeriğe geç

Temporal

Bu makalede

Bilgi

Temporal, güvenilir dağıtık uygulamalar oluşturmak için açık kaynaklı bir platformdur. Modern geliştirmenin temel zorluklarından birini ele alır: kritik süreçlerin kararsız ortamlarda yürütülmesini sağlamak. Geliştiricilerin altyapı hatalarını yönetmek yerine iş mantığına odaklanmasına olanak tanır.

Temporal. Temel Özellikler

  • Workflow Orchestration: Uzun süreli iş süreçlerinin sağlam bir şekilde yürütülmesini sağlar. Hataları ve yeniden denemeleri otomatik olarak yöneterek görevlerin tamamlanmasını garanti eder.
  • Distributed Transactions: Dağıtık kilitler (distributed locks) kullanmadan farklı servisler arasında tutarlı işlem yürütümü sağlar.
  • Timeouts and Scheduling: Uzun süreçler için bile zamanlayıcılar ayarlamaya ve görevleri yüksek hassasiyetle planlamaya olanak tanır.
  • Scalability: Yüksek yükları karşılamak için yatay ölçeklendirmeyi destekler. Bileşenler bağımsız olarak ölçeklendirilebilir.
  • Historical Debugging: Süreç yürütme geçmişini koruyarak iş akışlarının analiz edilmesini ve hata ayıklanmasını sağlar.
  • Versioning: Çalışan görevleri kesintiye uğratmadan güvenli iş akışı güncellemelerini destekler.
  • Observability: Uygulama kontrolü için izleme ve izleme (tracing) sistemleriyle entegre olur.
  • Multi-tenancy: Birden fazla ekip veya uygulama için izolasyon ve kaynak yönetimi sağlar.

Çalıştırma Özellikleri

ID Yazılım Adı Uyumlu OS VM BM VGPU GPU Min CPU (Çekirdekler) Min RAM (GB) Min HDD/SSD (GB) Özel Alan Adı Aktif
266 Temporal Ubuntu 22.04 + + + + 2 2 30 Hayır SİPARİŞ VER

Temporal Kurulumu Sonrası Başlangıç

Ödeme yapıldıktan sonra, sunucunun hazır olduğuna dair bir bildirim kayıtlı e-posta adresinize gönderilecektir. Bu bildirim, erişim için VPS IP adresini ve giriş bilgilerini içerecektir. Şirket müşterileri, donanımı server management panel and APIInvapi üzerinden yönetirler.

webpanel etiketi altındaki bağlantıyı takip ettikten sonra bir yetkilendirme penceresi açılacaktır.

Yetkilendirme verileri, sunucu yönetim panelindeki Configuration >> Tags sekmesinde veya gönderilen e-postada bulunabilir:

  • Web arayüzü üzerinden Temporal management panel erişimi için bağlantı: webpanel etiketi içindedir;
  • Sunucuyu yönetmek için Login ve Password: sunucu tesliminde e-posta ile sağlanır.

Web arayüzüne sahip ana bileşenler:

Name Local address and port External address
Temporal UI localhost:8080 https://temporal{server_id_from_invapi}.hostkey.in
Grafana localhost:8085 https://temporal{server_id_from_invapi}.hostkey.in/grafana/
Prometheus localhost:9090 https://temporal{server_id_from_invapi}.hostkey.in/prometheus/
Prometheus Metrics - https://temporal{server_id_from_invapi}.hostkey.in/prometheus/metrics

Ana Ekran ve Navigasyon

webpanel etiketi altındaki bağlantıyı takip ettikten sonra Temporal web arayüzü açılacaktır:

Temporal UI

Ana ekran, seçilen namespace içindeki iş akışlarının (Workflows) bir listesini görüntüler. "No Workflows running in this Namespace" mesajı, o anda aktif süreç bulunmadığını belirtir.

Arayüzün ana öğeleri:

  • Soldaki Sidebar, sistemin farklı bölümlerine erişim sağlar;
  • Top bar, mevcut namespace'i gösterir (varsayılan olarak "default");
  • Sağ üst köşede yeni süreçler başlatmak için Start Workflow düğmesi;
  • Status, Workflow ID, Run ID, Type, Start, End sütunlarına sahip Process table.

Fonksiyonel yetenekler

  1. Yeni Bir Workflow Süreci Başlatma:

    • Sağ üst köşedeki Start Workflow düğmesine tıklayın;
    • Açılan formda gerekli parametreleri doldurun;
    • Süreç oluşturmayı onaylayın.
  2. Süreçleri Görüntüleme ve Filtreleme:

    • Çeşitli kriterlere göre süreçleri seçmek için Filter düğmesini kullanın;
    • Detaylı bilgi görüntülemek için tablodan herhangi bir süreci seçin.
  3. Kod Örnekleri:

    • GitHub depo bağlantıları aracılığıyla entegrasyon örneklerine erişin:
    • samples-go - Go örnekleri;
    • samples-java - Java örnekleri;
    • samples-typescript - TypeScript örnekleri;
    • samples-python - Python örnekleri;
    • samples-dotnet - .NET örnekleri;
    • samples-php - PHP örnekleri.
  4. Ayarları Değiştirme:

    • Zaman dilimi değişiklikleri için sağ üst köşede UTC seçicisi;
    • (Gear) düğmesi, ek arayüz ayarlarına erişim içindir.

Tipik Kullanım Durumları:

  • Süreçleri İzleme: Çalışan görevlerin durumunu düzenli olarak kontrol etme;
  • Hata Ayıklama: Hatalar durumunda ayrıntılı analiz yapma;
  • İş Yükü Yönetimi: Süreçleri başlatma, duraklatma ve iptal etme;
  • Yeni Süreçler Geliştirme: Özel iş akışları oluşturmak için kod örneklerini kullanma.

Not

Temporal kullanımı hakkında ayrıntılı bilgiye resmi geliştirici dokümanlarından ulaşılabilir.

Go ile Temporal Test Etme (Opsiyonel)

Bilgi

Aşağıda, gerekli bileşenlerin kurulması ve Go dilinde bir Saga deseni örneği kullanılarak Temporal'ın test edilmesi süreci yer almaktadır. Bu test, platformun uzun süreli iş süreçlerini otomatik hata yönetimi ile güvenilir bir şekilde yürütme yeteneğini göstermektedir. Saga deseni, telafi edici işlemler (compensating actions) mekanizması aracılığıyla dağıtık sistemlerde işlem atomikliği sorununu çözer.

1. Go Kurulumu

Testlere başlamadan önce sunucuya Go kurun:

Paket listelerini güncelleyin

apt update
Bağımlılıkları kurun

apt install -y wget git curl
Go'nun en son sürümünü indirin (yazıldığı tarih itibarıyla 1.22.1'dir)

wget https://golang.org/dl/go1.22.1.linux-amd64.tar.gz
Arşivi /usr/local dizinine çıkarın

tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz
Ortam değişkenlerini ayarlayın

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
Değişiklikleri mevcut oturumda aktifleştirin

source ~/.bashrc
Kurulumu doğrulayın

go version

2. Temporal Örnek Deposunu Klonlayın

Ana dizine gidin

cd ~
Go örnekleri deposunu klonlayın

git clone https://github.com/temporalio/samples-go.git
Örnekler dizinine gidin

cd samples-go

3. Saga Örneği Kullanarak Test Edin

Saga deseni, hatalar durumunda geri alma (telafi etme) yeteneği sağlayarak dağıtık işlemleri yönetmek için kullanılır.

Saga örneğinin yapısı

saga/
├── worker/main.go     # Görevleri işleyen Worker süreci
├── start/main.go      # Worker sürecini başlatır
├── activity.go        # Aksiyon tanımları (para çekme/yatırma)
├── workflow.go        # Aksiyon dizisi tanımı
└── shared.go          # Ortak tanımlar

Testi çalıştırın:

  1. Worker'ı başlatın (ilk terminalde çalıştırın):

    cd ~/samples-go
    go run saga/worker/main.go
    
    Worker, Temporal'a kaydolacak ve bir görev bekleyecektir. Görev alma girişimlerine dair log mesajları görünecektir.

  2. Başlatıcıyı başlatın (ikinci terminalde çalıştırın):

    cd ~/samples-go
    go run saga/start/main.go
    
    Başlatıcı, bir hesaptan diğerine para transferi sürecini başlatır.

Beklenen sonuç:

Worker loglarında şunları göreceksiniz:

  1. 001-001 hesabından para çekilmesi;
  2. 002-002 hesabına para yatırılması;
  3. StepWithError aktivitesinde özel olarak oluşturulmuş bir hata;
  4. Hatalı aktiviteyi yürütmek için üç girişim;
  5. Telafi edici işlemlerin başlatılması:
    • Fonların orijinal hesaba iadesi;
    • Para çekme işleminin iptali.

4. Sonuçları Temporal Web Arayüzü Üzerinden Doğrulayın

  1. Tarayıcınızda Temporal web arayüzünü açın ( webpanel etiketi aracılığıyla);
  2. Arayüzde transfer-money-workflow ID'sine sahip iş akışını bulun;
  3. Tüm aktiviteler ve telafi edici işlemler dahil olmak üzere iş akışının tam yürütme geçmişini göreceksiniz:

Bilgi

Temporal web arayüzünde, transfer-money-workflow'un durumunun "Failed" olduğunu göreceksiniz. Bu, testin yapılandırmasında veya yürütülmesinde bir hata değil, Saga örneği için beklenen bir davranıştır. Bu örnek, bir hatayla karşılaşıldığında telafi mekanizmasını göstermek için özel olarak tasarlanmıştır. StepWithError aktivitesi, para çekme ve yatırma işlemlerini gerçekleştirdikten sonra kasıtlı olarak bir hata oluşturarak telafi edici işlemlerin nasıl başlatıldığını gösterir. Bu örnekteki "Failed" durumu, telafi mekanizmasının doğru çalıştığını ve sistemin hatayı tespit ettikten sonra tutarlı bir duruma geri döndüğünü gösterir.

API Aracılığıyla Temporal Sunucusu Sipariş Etme

Bu yazılımı API kullanarak kurmak için bu talimatları izleyin.