Proyek ini 100% eksperimental. Harap jangan mencoba memasang pengontrol di lingkungan produksi dan/atau bersama apa pun.
Tujuan dari Temporal Worker Controller adalah untuk memudahkan menjalankan pekerja di Kubernetes sambil memanfaatkan Worker Versioning.
Batasan deterministik temporal dapat menyebabkan sakit kepala saat meluncurkan atau mengembalikan perubahan kode alur kerja.
Pendekatan tradisional terhadap determinisme alur kerja adalah dengan memasukkan perilaku baru di balik pemeriksaan versi. Seiring waktu, pemeriksaan ini dapat menjadi sumber utang teknis, karena menghapusnya dengan aman dari basis kode merupakan proses hati-hati yang sering kali melibatkan kueri terhadap semua alur kerja yang berjalan.
Versi Pekerja adalah pendekatan alternatif yang memungkinkan eksekusi alur kerja melekat pada pekerja yang menjalankan revisi kode tertentu. Hal ini memungkinkan pembuat alur kerja untuk menghilangkan pemeriksaan versi dalam kode dan sebagai gantinya menjalankan beberapa versi pekerjanya secara paralel, dengan mengandalkan Temporal untuk menjaga eksekusi alur kerja tetap dipasang pada pekerja yang menjalankan kode yang kompatibel.
Proyek ini bertujuan untuk menyediakan otomatisasi yang menyederhanakan pembukuan dalam melacak versi pekerja mana yang masih memiliki alur kerja aktif, mengelola siklus hidup penerapan pekerja berversi, dan memanggil API Temporal untuk memperbarui versi default setelah penerapan.
Pendaftaran versi pekerja baru
Pembuatan sumber daya penerapan pekerja berversi
Penghapusan penerapan pekerja yang tidak dapat dijangkau
Peluncuran versi pekerja baru secara Manual, Biru/Hijau, dan Progresif
Penskalaan otomatis penerapan pekerja
Rollover otomatis ke versi pekerja yang kompatibel
Analisis Canary versi pekerja baru
Pembatalan opsional setelah batas waktu untuk alur kerja pada versi lama
Meneruskan sinyal ContinueAsNew
ke alur kerja pada versi lama
Agar kompatibel dengan pengontrol ini, pekerja perlu dikonfigurasi menggunakan variabel lingkungan standar berikut:
WORKER_BUILD_ID
TEMPORAL_HOST_PORT
TEMPORAL_TASK_QUEUE
TEMPORAL_NAMESPACE
Masing-masing hal ini akan secara otomatis diatur dalam env template pod, dan tidak perlu ditentukan secara manual di luar spesifikasi TemporalWorker
.
Setiap sumber daya TemporalWorker
mengelola satu atau lebih sumber daya Deployment
standar. Setiap penerapan mengelola pod yang pada gilirannya melakukan polling Temporal untuk tugas yang disematkan ke versinya masing-masing.
diagram alur TD
wd[Pekerja Sementara]
subgraf "Versi pekerja terbaru/default"
d5["Penerapan v5"]
rs5["ReplikaSet v5"]
p5a["Pod v5-a"]
p5b["Pod v5-b"]
p5c["Pod v5-c"]
d5 --> rs5
rs5 --> p5a
rs5 --> p5b
rs5 --> p5c
akhir
subgraf "Versi pekerja yang tidak digunakan lagi"
d1["Penerapan v1"]
rs1["ReplikaSet v1"]
p1a["Pod v1-a"]
p1b["Pod v1-b"]
d1 --> rs1
rs1 --> p1a
rs1 --> p1b
dN["Penerapan..."]
akhir
wd --> d1
wd --> dN
wd --> d5
hal1a -. "jajak pendapat versi v1" .-> server
hal1b -. "jajak pendapat versi v1" .-> server
hal5a -. "jajak pendapat versi v5" .-> server
hal5b -. "jajak pendapat versi v5" .-> server
p5c -. "jajak pendapat versi v5" .-> server
server["Server Sementara"]
MemuatSaat versi pekerja baru disebarkan, pengontrol pekerja mengotomatiskan pendaftaran versi pekerja default baru di Temporal.
Saat alur kerja lama selesai dijalankan dan versi pekerja yang tidak digunakan lagi tidak diperlukan lagi, pengontrol pekerja juga mengosongkan sumber daya dengan menghapus penerapan lama.
diagram urutan
nomor otomatis
peserta Dev sebagai Pengembang
peserta K8 sebagai Kubernetes
peserta Ctl sebagai WorkerController
peserta T sebagai Temporal
Dev->>K8s: Buat TemporalWorker "foo" (v1)
K8s-->>Ctl: Beritahu TemporalWorker "foo" dibuat
Ctl->>K8s: Buat Deployment "foo-v1"
Ctl->>T: Daftarkan v1 sebagai default baru
Pengembang->>K8s: Perbarui TemporalWorker "foo" (v2)
K8s-->>Ctl: Beritahu TemporalWorker "foo" diperbarui
Ctl->>K8s: Buat Deployment "foo-v2"
Ctl->>T: Daftarkan v2 sebagai default baru
Ctl->>Ctl: Jalankan deteksi perubahan yang melanggar antara v1 dan v2
Ctl->>T: Jika versinya kompatibel, gabungkan v1 dan v2.
loop API Temporal Jajak Pendapat
Ctl-->>T: Tunggu hingga eksekusi alur kerja v1 ditutup
akhir
Ctl->>K8s: Hapus Deployment "foo-v1"
MemuatProyek ini masih dalam tahap awal; karena itu kontribusi kode eksternal belum diminta.
Laporan bug dan permintaan fitur dipersilakan! Silakan ajukan masalah.
Anda juga dapat menghubungi @jlegrone
di Temporal Slack jika Anda memiliki pertanyaan, saran, atau tertarik untuk memberikan kontribusi lainnya.