คิวงานแบบกระจายที่ทนทานต่อความล้มเหลว
- Hatchet ช่วยให้สามารถออกแบบเวิร์กโหลดที่ทนทานซึ่งกู้คืนจากความล้มเหลวได้ และแก้ปัญหาอย่าง concurrency, fairness, และ rate limiting ได้ โดยเข้ามาแทนที่คิวหรือระบบ pub/sub แบบเดิมที่ดูแลจัดการได้ยาก
- แทนที่จะต้องดูแลคิวงานหรือระบบ pub/sub ของตัวเอง สามารถใช้ Hatchet เพื่อกระจายฟังก์ชันไปยังชุดของ worker ได้ด้วยการตั้งค่าหรือโครงสร้างพื้นฐานให้น้อยที่สุด
ข้อดีของ Hatchet
- การจัดตารางแบบหน่วงต่ำมากและรองรับงานปริมาณสูง
- Hatchet สร้างบนคิวแบบ latency ต่ำที่มีเวลาเริ่มต้นเฉลี่ย
25ms จึงมอบสมดุลที่ลงตัวระหว่างความสามารถในการโต้ตอบแบบเรียลไทม์กับความน่าเชื่อถือที่จำเป็นสำหรับงานสำคัญระดับ mission-critical
- Concurrency, fairness, rate limiting
- ใช้กลยุทธ์ในตัวของ Hatchet เพื่อรองรับแนวทางอย่าง FIFO, LIFO, Round Robin และ Priority Queues ช่วยหลีกเลี่ยงปัญหาการสเกลที่พบบ่อยได้ด้วยการตั้งค่าเพียงเล็กน้อย
- ความยืดหยุ่นที่ออกแบบมาในตัว
- ด้วยนโยบาย retry แบบกำหนดเองและการจัดการข้อผิดพลาดแบบรวมศูนย์ Hatchet ช่วยให้มั่นใจได้ว่างานจะกู้คืนจากความล้มเหลวชั่วคราวได้อย่างรวดเร็ว
การมองเห็นและการควบคุมที่ดีขึ้น
- Observability
- การทำงานทุกครั้งสามารถค้นหาได้ทั้งหมด ทำให้ระบุปัญหาได้อย่างรวดเร็ว
- การรันแบบคงทนที่ใช้งานได้จริง
- สามารถ replay event และเริ่มการรันใหม่ด้วยตนเองจากบางขั้นตอนของ workflow ได้
- Cron
- สามารถจัดตารางให้รันฟังก์ชันซ้ำ ๆ ได้
- การจัดตารางแบบครั้งเดียว
- สามารถกำหนดเวลาให้รันฟังก์ชันในวันและเวลาที่ระบุได้
- การป้องกันสไปก์
- ช่วยบรรเทาการพุ่งขึ้นของทราฟฟิก และรันเฉพาะเท่าที่ระบบรองรับได้
- การสตรีมแบบค่อยเป็นค่อยไป
- สามารถ subscribe การอัปเดตตามความคืบหน้าของ background worker ได้
ตัวอย่างกรณีใช้งาน
- Fairness สำหรับ Generative AI
- สามารถใช้ Hatchet เพื่อกระจายคำขอไปยัง worker อย่างเป็นธรรม เพื่อไม่ให้ผู้ใช้ที่ใช้งานหนักทำให้ระบบล้นเกิน
- การประมวลผลแบบแบตช์สำหรับการทำดัชนีเอกสาร
- Hatchet รองรับการประมวลผลเอกสาร รูปภาพ และข้อมูลอื่น ๆ แบบแบตช์ขนาดใหญ่ และเมื่อเกิดความล้มเหลวก็สามารถทำต่อจากจุดกลางของงานได้
- Workflow orchestration สำหรับระบบมัลติโหมด
- Hatchet สามารถประสานอินพุตและเอาต์พุตแบบ multimodal และรองรับการทำงานทั้งชุดในสไตล์ DAG ได้
- ความถูกต้องสำหรับการประมวลผลแบบ event-driven
- สามารถตอบสนองต่อ event ภายนอกหรือ event ภายในระบบ และ replay event ได้โดยอัตโนมัติ
เริ่มต้นอย่างรวดเร็ว
- Hatchet รองรับ SDK โอเพนซอร์สสำหรับ Python, Typescript และ Go
- หากต้องการเริ่มต้น สามารถดูเอกสารของ Hatchet หรือตรวจสอบ quickstart repository ได้
ที่เก็บ SDK
- Hatchet มี Go SDK ให้เป็นหลัก
- นอกจากนี้ยังมี Typescript SDK ให้ใช้งาน
- หากพบปัญหาที่เกี่ยวข้องกับ SDK สามารถส่ง issue ใน repository ที่เกี่ยวข้องได้
มี Hatchet เวอร์ชันคลาวด์แบบจัดการให้หรือไม่?
- มี โดยในช่วงเบต้าได้เปิดให้บางบริษัทใช้งานเวอร์ชันคลาวด์ เพื่อช่วยสร้างและกำหนดทิศทางของผลิตภัณฑ์
มี Hatchet เวอร์ชัน self-hosted หรือไม่?
- มี โดยสามารถดูคำแนะนำสำหรับโอเพนซอร์ส Docker container เพื่อการ self-hosting ได้จากเอกสาร
เทียบกับทางเลือกอื่นอย่างไร? (Celery, BullMQ)
- ทำไมถึงสร้างคิวแบบจัดการอีกตัวขึ้นมา?
- เพราะต้องการข้อดีของระบบคิวสำหรับทรานแซ็กชันแบบครบวงจร โดยเฉพาะที่พึ่งพาการรันในสไตล์ DAG และเชื่ออย่างมากว่า Postgres สามารถเข้ามาแทนกรณีใช้งานด้านคิวส่วนใหญ่ได้
- คิวจำนวนมากสร้างบน Redis และหากไม่ระวังอาจเกิดการสูญหายของข้อมูลจาก OOM ได้ แต่การใช้ PG สามารถหลีกเลี่ยงปัญหาเหล่านี้ได้
ปัญหา
- สามารถส่งบั๊กที่พบได้ผ่าน Github issue
- เนื่องจากโปรเจกต์ยังอยู่ในระยะเริ่มต้น จึงแนะนำให้ติดต่อผ่าน Discord ก่อนหากมีคำขอฟีเจอร์ที่ซับซ้อน
หากต้องการมีส่วนร่วม
- โปรดดูเอกสารการมีส่วนร่วม และแจ้งสิ่งที่อยากทำในช่อง #contributing ของ Discord เพื่อช่วยกำหนดทิศทางของโปรเจกต์และทำให้การร่วมมือกันง่ายขึ้น
ความเห็นของ GN⁺
- Hatchet ดูเป็นโซลูชันที่ช่วยลดความซับซ้อนของการจัดการคิวงานในระบบแบบกระจาย พร้อมมอบความพร้อมใช้งานสูงและความทนทานต่อความล้มเหลว โดยน่าจะมีประโยชน์อย่างยิ่งสำหรับการประมวลผลข้อมูลขนาดใหญ่และบริการแบบเรียลไทม์
- เมื่อเทียบกับระบบคิวอื่นที่ใช้อยู่ในตลาดปัจจุบัน ความเสถียรและความสามารถในการสเกลที่ได้จากการใช้ Postgres ถือเป็นจุดเด่นที่น่าสนใจ
- สิ่งที่ควรพิจารณาเมื่อนำ Hatchet มาใช้งาน ได้แก่ ความเข้ากันได้กับโครงสร้างพื้นฐานเดิม การย้ายข้อมูล และความพร้อมด้านทักษะทางเทคนิคของทีม
- ความสามารถด้านการมองเห็นและการควบคุมขั้นสูงที่ Hatchet มีให้ ช่วยให้การมอนิเตอร์ประสิทธิภาพของระบบและการแก้ปัญหาทำได้ง่ายขึ้น ลดภาระงานของทั้งนักพัฒนาและทีมปฏิบัติการ
- เนื่องจาก Hatchet ยังอยู่ในช่วงเบต้า จึงยังต้องมีการตรวจสอบด้านเสถียรภาพและความสมบูรณ์ของฟังก์ชันอย่างเพียงพอ และควรทดสอบอย่างรอบด้านก่อนนำไปใช้กับระบบขนาดใหญ่
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News