โครงการนี้เป็นการทดลอง 100% กรุณาอย่าพยายามติดตั้งคอนโทรลเลอร์ในการผลิตและ/หรือสภาพแวดล้อมที่ใช้ร่วมกันใดๆ
เป้าหมายของ Temporal Worker Controller คือการทำให้การเรียกใช้ผู้ปฏิบัติงานบน Kubernetes เป็นเรื่องง่ายในขณะที่ใช้ประโยชน์จากการกำหนดเวอร์ชันของผู้ปฏิบัติงาน
ข้อจำกัดที่กำหนดขึ้นของ Temporal อาจทำให้เกิดอาการปวดหัวเมื่อเผยแพร่หรือย้อนกลับการเปลี่ยนแปลงโค้ดเวิร์กโฟลว์
วิธีการดั้งเดิมในการกำหนดขั้นตอนการทำงานคือการเกตลักษณะการทำงานใหม่ๆ ที่อยู่เบื้องหลังการตรวจสอบเวอร์ชัน เมื่อเวลาผ่านไป การตรวจสอบเหล่านี้อาจกลายเป็นต้นเหตุของหนี้ทางเทคนิคได้ เนื่องจากการถอดออกจากโค้ดเบสอย่างปลอดภัยเป็นกระบวนการที่ระมัดระวังซึ่งมักจะเกี่ยวข้องกับการสืบค้นเวิร์กโฟลว์ที่ทำงานอยู่ทั้งหมด
การกำหนดเวอร์ชันของผู้ปฏิบัติงานเป็นอีกแนวทางหนึ่งที่ช่วยให้การดำเนินการเวิร์กโฟลว์สามารถยึดติดกับผู้ปฏิบัติงานที่กำลังดำเนินการแก้ไขโค้ดเฉพาะได้ ซึ่งช่วยให้ผู้สร้างเวิร์กโฟลว์สามารถละเว้นการตรวจสอบเวอร์ชันในโค้ด และเรียกใช้ผู้ปฏิบัติงานหลายเวอร์ชันพร้อมกันแทน โดยอาศัย Temporal เพื่อตรึงการดำเนินการเวิร์กโฟลว์ไว้กับผู้ปฏิบัติงานที่ใช้โค้ดที่เข้ากันได้
โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้ระบบอัตโนมัติที่ช่วยลดความยุ่งยากในการทำบัญชีในการติดตามเวอร์ชันของผู้ปฏิบัติงานที่ยังคงมีเวิร์กโฟลว์ที่ใช้งานอยู่ การจัดการวงจรการใช้งานของผู้ปฏิบัติงานตามเวอร์ชัน และการเรียก Temporal API เพื่ออัปเดตเวอร์ชันเริ่มต้นหลังจากการปรับใช้
การลงทะเบียนเวอร์ชันพนักงานใหม่
การสร้างทรัพยากรการปรับใช้ผู้ปฏิบัติงานตามเวอร์ชัน
การลบการปรับใช้ของผู้ปฏิบัติงานที่ไม่สามารถเข้าถึงได้
การเปิดตัวเวอร์ชันผู้ปฏิบัติงานใหม่ด้วยตนเอง สีน้ำเงิน/เขียว และแบบก้าวหน้า
การปรับขนาดการทำให้พนักงานใช้งานได้โดยอัตโนมัติ
การโรลโอเวอร์อัตโนมัติไปยังเวอร์ชันของผู้ปฏิบัติงานที่เข้ากันได้
การวิเคราะห์ Canary ของเวอร์ชันผู้ปฏิบัติงานใหม่
การยกเลิกเพิ่มเติมหลังจากหมดเวลาสำหรับเวิร์กโฟลว์ในเวอร์ชันเก่า
ส่งสัญญาณ ContinueAsNew
ไปยังเวิร์กโฟลว์ในเวอร์ชันเก่า
เพื่อให้เข้ากันได้กับคอนโทรลเลอร์นี้ ผู้ปฏิบัติงานจะต้องได้รับการกำหนดค่าโดยใช้ตัวแปรสภาพแวดล้อมมาตรฐานเหล่านี้:
WORKER_BUILD_ID
TEMPORAL_HOST_PORT
TEMPORAL_TASK_QUEUE
TEMPORAL_NAMESPACE
แต่ละรายการจะได้รับการตั้งค่าโดยอัตโนมัติใน env ของเทมเพลตพ็อด และไม่จำเป็นต้องระบุด้วยตนเองนอกข้อกำหนด TemporalWorker
ทรัพยากร TemporalWorker
ทุกรายการจัดการทรัพยากร Deployment
มาตรฐานตั้งแต่หนึ่งรายการขึ้นไป การปรับใช้แต่ละครั้งจะจัดการพ็อดซึ่งจะสำรวจ Temporal สำหรับงานที่ปักหมุดไว้ในเวอร์ชันที่เกี่ยวข้อง
ผังงาน TD
wd[พนักงานชั่วคราว]
กราฟย่อย "เวอร์ชันผู้ปฏิบัติงานล่าสุด/เริ่มต้น"
d5["การปรับใช้ v5"]
rs5["ชุดแบบจำลอง v5"]
p5a["พ็อด v5-a"]
p5b["พ็อด v5-b"]
p5c["พ็อด v5-c"]
d5 --> RS5
rs5 --> p5a
rs5 --> p5b
rs5 --> p5c
จบ
กราฟย่อย "เวอร์ชันของผู้ปฏิบัติงานที่เลิกใช้แล้ว"
d1["การปรับใช้ v1"]
rs1["ชุดแบบจำลอง v1"]
p1a["พ็อด v1-a"]
p1b["พ็อด v1-b"]
d1 --> rs1
rs1 --> p1a
rs1 --> p1b
dN["การปรับใช้ ... "]
จบ
WD --> d1
wd --> dN
WD --> d5
p1a -. "โพลเวอร์ชัน v1" .-> เซิร์ฟเวอร์
p1b -. "โพลเวอร์ชัน v1" .-> เซิร์ฟเวอร์
p5a -. "โพลเวอร์ชัน v5" .-> เซิร์ฟเวอร์
p5b -. "โพลเวอร์ชัน v5" .-> เซิร์ฟเวอร์
p5c -. "โพลเวอร์ชัน v5" .-> เซิร์ฟเวอร์
เซิร์ฟเวอร์["เซิร์ฟเวอร์ชั่วคราว"]
กำลังโหลดเมื่อมีการปรับใช้เวอร์ชันของผู้ปฏิบัติงานใหม่ ตัวควบคุมผู้ปฏิบัติงานจะทำการลงทะเบียนเวอร์ชันของผู้ปฏิบัติงานเริ่มต้นใหม่ใน Temporal โดยอัตโนมัติ
เนื่องจากเวิร์กโฟลว์เก่าดำเนินการเสร็จสิ้นแล้ว และเวอร์ชันของผู้ปฏิบัติงานที่เลิกใช้แล้วไม่จำเป็นอีกต่อไป ตัวควบคุมผู้ปฏิบัติงานยังทำให้ทรัพยากรว่างมากขึ้นด้วยการลบการปรับใช้เก่า
ลำดับไดอะแกรม
หมายเลขอัตโนมัติ
ผู้เข้าร่วม Dev ในฐานะนักพัฒนา
ผู้เข้าร่วม K8 เป็น Kubernetes
ผู้เข้าร่วม Ctl ในฐานะ WorkerController
ผู้เข้าร่วม T เป็นเวลาชั่วคราว
Dev->>K8s: สร้าง TemporalWorker "foo" (v1)
K8s-->>Ctl: แจ้ง TemporalWorker "foo" ที่สร้างแล้ว
Ctl->>K8s: สร้างการปรับใช้ "foo-v1"
Ctl->>T: ลงทะเบียน v1 เป็นค่าเริ่มต้นใหม่
Dev->>K8s: อัปเดต TemporalWorker "foo" (v2)
K8s-->>Ctl: แจ้ง TemporalWorker "foo" ที่อัปเดตแล้ว
Ctl->>K8s: สร้างการปรับใช้ "foo-v2"
Ctl->>T: ลงทะเบียน v2 เป็นค่าเริ่มต้นใหม่
Ctl->>Ctl: เรียกใช้การตรวจจับการเปลี่ยนแปลงที่แตกหักระหว่าง v1 และ v2
Ctl->>T: หากเวอร์ชันเข้ากันได้ ให้รวม v1 และ v2 เข้าด้วยกัน
วนซ้ำ Poll API ชั่วคราว
Ctl-->>T: รอให้การประมวลผลเวิร์กโฟลว์ v1 ปิด
จบ
Ctl->>K8s: ลบการปรับใช้ "foo-v1"
กำลังโหลดโครงการนี้อยู่ในขั้นเริ่มต้นมาก เนื่องจากยังไม่ได้มีการร้องขอการสนับสนุนโค้ดจากภายนอก
ยินดีรายงานข้อผิดพลาดและการร้องขอคุณสมบัติ! กรุณาแจ้งปัญหา
คุณยังสามารถติดต่อ @jlegrone
เกี่ยวกับ Temporal Slack ได้ หากคุณมีคำถาม ข้อเสนอแนะ หรือสนใจที่จะมีส่วนร่วมอื่นๆ