Skip to content

Temporal

Bu makalede

Bilgi

Temporal, güvenilir dağıtık uygulamalar oluşturmak için açık kaynaklı bir platformdur. Modern geliştirme sürecindeki ana zorluklarından birini ele alır: istikrarsız ortamlarda kritik işlemlerin yürütülmesini sağlar. Geliştiricilere, altyapı hatalarını yönetmek yerine iş mantığı üzerinde çalışmalarına olanak tanır.

Temporal. Ana Özellikler

  • İş Akışı Koordinasyonu: Uzun süreli iş akışlarının sağlam yürütülmesini sağlar. Otomatik olarak hataları ve yeniden denemeleri ele alır, görevin tamamlanmasını garanti eder.
  • Dağıtık İşlemler: Dağıtılmış kilitleme kullanmadan farklı servislerde işlem yürütümlerini tutarlı hale getirir.
  • Zaman Aşımı ve Zamanlama: Uzun süreli işlemler için bile yüksek hassasiyetle zamanlayıcılar ayarlama ve görevleri planlama imkanı sunar.
  • Ölçeklenebilirlik: Yüksek trafikleri yönetmek için yatay ölçeklendirme desteği sağlar. Bileşenler bağımsız olarak ölçeklenebilir.
  • Tarihsel Hata Ayıklama: İş akışı yürütmesinin geçmişini korur, bu sayede iş akışlarının analizi ve hata ayıklamasına olanak tanır.
  • Sürüm Yönetimi: Çalışan görevleri kesintiye uğratmadan güvenli iş akışı güncellemelerini destekler.
  • Görünürlük: Uygulama denetimi için izleme ve iz sorgulama sistemleri ile entegrasyon sağlar.
  • Çok Kiracılılık: Farklı ekipler veya uygulamalar için kaynak yönetimi ve izolasyon sunar.

Çalıştırma Özellikleri

ID Uyumlu OS VM BM VGPU GPU Min CPU (Çekirdekler) Min RAM (GB) Min HDD/SSD (GB) Aktif
266 Ubuntu 22.04 + + + + 2 2 30 Evet
  • Önceden yüklenmiş bağımlılıklar:
    • Docker;
    • docker-compose;
    • Git (repository klonlama için).
  • Ek bileşenler:
    • Nginx (ters proxy için);
    • Postgresql (veritabanı);
    • Elasticsearch (iş akışı tarihçesi depolama için);
    • Grafana (izleme için);
    • Prometheus (metrik toplama için);
    • Jaeger (dağıtık izlemek 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 ana bileşenler:

Ad Yerel adres ve port Dış 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 Metrikleri - https://temporal{server_id_from_invapi}.hostkey.in/prometheus/metrics

Temporal Dağıttıktan Sonra Başlarken

Ödeme sonrasında, sunucunun hazır olduğu hakkında bir bildirim, kayıtlı e-posta adresinize gönderilecektir. Bu bildirimde VPS IP adresi ve erişim için gerekli kimlik bilgileri yer alacaktır. Şirket müşterilerimiz sunucu yönetim paneli ve APIInvapi aracılığıyla donanımı yönetir.

webpanel etiketi ile gelen bağlantıyı takip ettikten sonra, yetkilendirme penceresi açılacaktır.

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

  • Web arayüzüne erişim için Temporal yönetim paneline bağlantı: webpanel etiketinde;
  • Sunucuyu yönetmek için Giriş ve Şifre: Sunucunun teslim edilmesiyle birlikte gönderilen e-postada sağlanmıştır.

Ana Ekran ve Gezinme

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

Temporal UI

Ana ekran, seçilen ad alanında (namespace) iş akışlarının (Workflows) listesini gösterir. "Bu Ad Alanında Çalışan İş Akışları Yok" mesajı, o anki anda aktif süreçlerin olmadığını belirtir.

Arayüzün ana unsurları:

  • Sol taraftaki menü çubuğu, sistem içerisinde farklı bölümlere erişim sağlar;
  • Üst çubuk, varsayılan olarak "default" olan mevcut ad alanını gösterir;
  • Start Workflow üst sağ köşedeki buton ile yeni işlemler başlatılır;
  • İşlem tablosu ile Durum, İş Akışı Kimliği (Workflow ID), Çalıştırma Kimliği (Run ID), Tür, Başlangıç, Bitiş sütunları bulunur.

İşlevsel olanaklar

  1. Yeni Bir İş Akışı Süreci Başlatma:

    • Üst sağ köşedeki Start Workflow butonuna tıklayın;
    • Gerekli parametreleri görüntülenen formda doldurun;
    • İşlem oluşturmayı onaylayın.
  2. İşlemleri Gösterme ve Filtreleme:

    • Çeşitli kriterlere göre işlemleri seçmek için Filter butonunu kullanın;
    • Tablodan herhangi bir sürecin detaylı bilgilerini görüntülemek için seçim yapın.
  3. Kod Örnekleri:

    • Entegrasyon örneklerine GitHub deposu bağlantıları aracılığıyla erişilebilir:
    • 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: - Üst sağ köşedeki UTC seçici ile zaman dilimi değişikliği yapılabilir; - butonu, ek arayüz ayarlarına erişim için tasarlanmıştır.

Tipik Kullanım Durumları:

  • İşlemleri İzleme: Çalışan görevlerin durumunu düzenli olarak kontrol etmek;
  • Hata Ayıklama: Hatalar meydana geldiğinde hataların detaylı analizi yapmak;
  • Yük Yönetimi: Süreçleri başlatma, askıya alma ve iptal etme;
  • Yeni İşlemler Geliştirme: Özel iş akışları oluşturmak için kod örneklerini kullanmak.

Not

Temporal kullanımına dair detaylı bilgiler resmi geliştirici dokümantasyonunda bulunabilir.

Temporal ile Test Etme (İsteğe Bağlı)

Bilgi

Aşağıda, Go dilindeki Saga deseni örneği kullanarak Temporal'u test etmek için gerekli bileşenleri kurma ve test etme süreci yer almaktadır. Bu test platformun temel yeteneğini; uzun süreli işlem hattı süreçlerinin güvenilir bir şekilde çalıştırılması ve otomatik başarısızlık yönetimi ile göstermektedir. Saga deseni, dağıtık sistemlerde işlem atomitesi sorununu telafi edici eylemlerin mekanizmasıyla çözer.

1. Go'yu Yükleme

Teste başlamadan önce sunucuya Go'yu yükleyin:

Paket listelerini güncelle

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

apt install -y wget git curl
(Bu yazının yazıldığı tarihte) en son sürüm olan Go 1.22.1'i indir

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

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

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 oturuma aktar

source ~/.bashrc
Yüklemeyi doğrula

go version

2. Temporal Örnek Deposyonu Klonla

Kullanıcı dizinine git

cd ~
Go örneklerini deposunu klonla

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

cd samples-go

3. Saga Örneği ile Test Etme

Saga deseni, hata durumunda geri çekilme (telafi) imkanı 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 ele alan işçi süreci
├── start/main.go      # İşçi sürecini başlatan dosya
├── activity.go        # Eylemlerin (paraları çekip yatırma) tanımı
├── workflow.go        # Eylem dizisinin tanımı
└── shared.go          # Ortak tanımlar

Testi çalıştır:

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

    cd ~/samples-go
    
    go run saga/worker/main.go
    
    İşçi Temporal'a kayıt olacak ve bir görev bekleyecektir. Görev alma girişimleri hakkında log mesajları görünecektir.

  2. Başlatıcıyı çalıştır (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şlatacaktır.

Beklenen sonuç:

İşçinin loglarında şunları göreceksiniz:

  1. Hesap 001-001'den paranın çekilmesi;
  2. Hesap 002-002'ye para yatırılması;
  3. Aktivite StepWithErrorde özel olarak oluşturulan bir hata;
  4. Sorunlu aktivitenin üç kez çalıştırılma girişimi;
  5. Telafi eylemlerinin başlatılması:
    • Paraların orijinal hesaba iade edilmesi;
    • Paranın çekilmesinin iptal edilmesi.

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

  1. Tarayıcınızda (`:fontawesome-solid-tags:webpanel` etiketi aracılığıyla) Temporal web arayüzünü açın;
  2. Arayüzde transfer-money-workflow ID'sine sahip işlem hattı ile karşılaşın;
  3. İşlem hattının tam çalıştırma geçmişini, tüm aktiviteleri ve telafi eylemleriyle birlikte göreceksiniz:

Bilgi

Temporal web arayüzünde, transfer-money-workflow'ün "Failed." durumda olduğunu göreceksiniz. Bu, testin yapılandırması veya çalıştırılmasında bir hata değildir ancak Saga örneği için beklenen davranıştır. Bu örnek, hatayla karşılaştığında telafi mekanizmasını göstermek üzere özel olarak tasarlanmıştır. Aktivite StepWithError kasıtlı olarak çekme ve yatırma işlemlerini gerçekleştirdikten sonra bir hatayı oluşturur, bu da telafi eylemlerinin nasıl başlatıldığını gösterir. Bu örnekteki "Failed" durumu, hata tespit edildikten sonra sistemin tutarlı bir duruma geri döndüğünü ve telafi mekanizmasının doğru çalıştığını göstermektedir.

API Üzerinden Temporal Sunucusu Siparişi Verme

Bu yazılımı API kullanarak kurmak için buraya bakın.


Bu sayfanın bazı içerikleri ya da yazıları AI tarafından oluşturulmuş veya çevrilmiş olabilir.