Ana içeriğe geç

Temporal

Bu makalede

Bilgi

Temporal, güvenilir dağıtık uygulamalar oluşturmak için kullanılan açık kaynaklı bir platformdur. Modern geliştirme süreçlerindeki temel zorluklardan birini çözer: kararsız ortamlarda kritik işlemlerin yürütülmesini garanti altına alır. Geliştiricilerin altyapı hatalarıyla uğraşmak yerine iş mantığına odaklanmalarını sağlar.

Temporal. Temel Özellikler

  • İş Akışı Orkestrasyonu: Uzun süreli iş süreçlerinin sağlam bir şekilde yürütülmesini sağlar. Hataları ve yeniden denemeleri otomatik olarak yönetir, görevlerin tamamlanmasını garanti eder.
  • Dağıtık İşlemler: Dağıtık kilitler kullanmadan farklı servisler arasında tutarlı işlem yürütmesini sağlar.
  • Zaman Aşımı ve Zamanlama: Uzun süreli süreçler için bile yüksek hassasiyetle zamanlayıcı ayarlama ve görev zamanlama imkanı sunar.
  • Ölçeklenebilirlik: Yüksek yükleri yönetmek için yatay ölçeklendirmeyi destekler. Bileşenler bağımsız olarak ölçeklendirilebilir.
  • Tarihsel Hata Ayıklama: İşlem yürütme geçmişini korur, iş akışlarının analizini ve hata ayıklamasını mümkün kılar.
  • Sürümleme: Çalışan görevleri kesintiye uğratmadan güvenli iş akışı güncellemelerini destekler.
  • Gözlemlenebilirlik: Uygulama kontrolü için izleme ve izleme sistemleriyle entegre çalışır.
  • Çok Kiracılık: Birden fazla ekip veya uygulama için izolasyon ve kaynak yönetimi sağlar.

Dağıtım Ö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
  • Önceden yüklü bağımlılıklar:
    • Docker;
    • Git (depo klonlamak için).
  • Ek bileşenler:
    • Nginx (ters proxy için);
    • Postgresql (veritabanı);
    • Elasticsearch (iş akışı geçmişi depolama için);
    • Grafana (izleme için);
    • Prometheus (metrik toplama için);
    • Jaeger (dağıtık izleme için);
    • OpenTelemetry Collector (telemetri toplama için).
  • Proje dizini: /root/docker-compose
  • Özelleştirme dosyası: /root/docker-compose/docker-compose-multirole_edited.yaml

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

Ad Yerel adres ve bağlantı noktası Harici adres
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

Temporal'in Dağıtılmasından Sonra Başlangıç

Ödeme yapıldıktan sonra, sunucunun hazır olduğuna dair bir bildirim kayıtlı e-posta adresinize gönderilecektir. Bu bildirimde VPS IP adresi ve erişim için giriş bilgileri yer alacaktır. Şirketimiz müşterileri donanımı sunucu yönetim paneli ve APIInvapi üzerinden yönetir.

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

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

  • Web arayüzü üzerinden Temporal yönetim paneline erişim bağlantısı: webpanel etiketinde;
  • Login ve Password (sunucu yönetimi için): Sunucu teslimi sırasında gönderilen e-postada sağlanır.

Ana Ekran ve Navigasyon

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

Temporal UI

Ana ekranda seçilen isim uzayındaki iş akışlarının (Workflows) listesi görüntülenir. "No Workflows running in this Namespace" mesajı, o anda aktif işlemin bulunmadığını gösterir.

Arayüzün temel öğeleri:

  • Sol taraftaki Sidebar, sistemin farklı bölümlerine erişim sağlar;
  • Top bar, geçerli isim uzayını gösterir (varsayılan olarak "default");
  • Sağ üst köşedeki yeni işlemleri başlatmak için Start Workflow düğmesi;
  • Status, Workflow ID, Run ID, Type, Start, End sütunlarına sahip Process table.

İşlevsel yetenekler

  1. Yeni Bir İş Akışı İşlemi Başlatma:

    • Sağ üst köşedeki Start Workflow düğmesine tıklayın;
    • Açılan formda gerekli parametreleri doldurun;
    • İşlem oluşturma işlemini onaylayın.
  2. İşlemleri Görüntüleme ve Filtreleme:

    • Farklı kriterlere göre işlemleri seçmek için Filter düğmesini kullanın;
    • Detaylı bilgi görüntülemek için tablodan herhangi bir işlemi 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:

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

Tipik Kullanım Senaryoları:

  • İşlemleri İzleme: Çalışan görevlerin durumunu düzenli olarak kontrol etme;
  • Hata Ayıklama: Hatalar durumunda hataların detaylı analizi;
  • İş Yüklerini Yönetme: İşlemleri başlatma, duraklatma ve iptal etme;
  • Yeni İşlemler Geliştirme: Özel iş akışları oluşturmak için kod örneklerini kullanma.

Not

Temporal kullanımı hakkında detaylı bilgi resmi geliştirici dokümantasyonunda bulunabilir.

Go ile Temporal Testi (İsteğe Bağlı)

Bilgi

Aşağıda, gerekli bileşenlerin kurulması ve Go'da bir Saga deseni örneği kullanılarak Temporal'in test edilmesi süreci yer almaktadır. Bu test, otomatik hata yönetimi ile uzun ömürlü iş süreçlerinin güvenilir bir şekilde yürütülmesi konusunda platformun temel yeteneğini gösterir. Saga deseni, telafi edici eylemler mekanizması aracılığıyla dağıtık sistemlerdeki işlem atomikliği sorununu çözer.

1. Go'yu Kurun

Teste başlamadan önce sunucuya Go'yu kurun:

Paket listelerini güncelleyin

apt update
Bağımlılıkları yükleyin

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

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
Çevre 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
Mevcut oturumda değişiklikleri etkinleştirin

source ~/.bashrc
Kurulumu doğrulayın

go version

2. Temporal Örnekleri 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 Yapın

Saga deseni, dağıtık işlemlerin yönetimi için kullanılır ve hata durumunda geri alma (telafi etme) yeteneğini sağlar.

Saga örneğinin yapısı

saga/
├── worker/main.go     # Görevleri işleyen worker işlemi
├── start/main.go      # Worker işlemini başlatır
├── activity.go        # Eylemlerin tanımı (para çekme/yatırma)
├── workflow.go        # Eylem dizisinin tanımı
└── shared.go          # Ortak tanımlar

Testi çalıştırın:

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

    cd ~/samples-go
    go run saga/worker/main.go
    
    Worker, Temporal'e kaydolacak ve bir görevi bekleyecektir. Görev alma girişimleri hakkında günlük 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 işlemini başlatır.

Beklenen sonuç:

Worker'ın günlüklerinde şunları göreceksiniz:

  1. 001-001 hesabından para çekme;
  2. 002-002 hesabına para yatırma;
  3. StepWithError aktivitesinde özel olarak oluşturulmuş bir hata;
  4. Hatalı aktivitenin yürütülmesi için üç deneme;
  5. Telafi edici eylemlerin başlatılması:
    • Orijinal hesaba fonların iadesi;
    • Para çekme işleminin iptali.

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

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

Bilgi

Temporal web arayüzünde, transfer-money-workflow iş akışının 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 hata ile karşılaşıldığında telafi mekanizmasını göstermek üzere özel olarak tasarlanmıştır. StepWithError aktivitesi, para çekme ve yatırma işlemlerini gerçekleştirdikten sonra kasıtlı olarak bir hata oluşturur ve telafi edici eylemlerin nasıl başlatıldığını gösterir. Bu örnekteki "Failed" durumu, telafi mekanizmasının düzgün çalıştığını ve sistemin hatayı tespit ettikten sonra tutarlı bir duruma döndüğünü gösterir.

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