- "เฟรมเวิร์กเวิร์กโฟลว์แบบ durable และ resumable ที่เขียนด้วย TypeScript"
- มี workflow engine สำหรับ เชื่อมต่อบริการและ API ที่หลากหลาย เพื่อทำให้งานที่มีลำดับซับซ้อนเป็นอัตโนมัติ
- เป็น แพลตฟอร์มโอเพนซอร์สแบบโมดูลาร์ ที่พัฒนาขึ้นเพื่อแก้ปัญหา workflow automation และ integration
- แม้เซิร์ฟเวอร์จะล่มหรือมีการ deploy ก็สามารถบันทึกสถานะไว้ใน Postgres และกลับมาทำงานต่อได้อย่างแม่นยำตั้งแต่สเต็ปล่าสุด
- แต่ละ
step.run({ name }, fn) จะ ถูกรันเพียงครั้งเดียวและผลลัพธ์ถูก memoize ดังนั้นเมื่อรีสตาร์ตหลังเกิด crash จะไม่รัน side effect ซ้ำ เช่น การตัดบัตรหรือการส่งอีเมล แต่จะนำผลลัพธ์ที่แคชไว้กลับมาใช้
- ไม่ต้องมีเซิร์ฟเวอร์เฉพาะแยกต่างหาก โดยใช้โครงสร้างที่ worker process (
ow.newWorker({ concurrency })) คอย polling pending run จาก DB แล้วนำมารัน จึงสามารถเปิดหลาย worker เพื่อรองรับ high availability และ scale-out ได้ และ long sleep อย่าง step.sleep("id", "1h") ก็ไม่กินช่องของ worker
- ออกแบบมาให้จัดการ การนิยามแบบ type-safe, การจัดการเวอร์ชัน, การดูผลลัพธ์ และการยกเลิก ได้ทั้งหมดในระดับโค้ด ผ่าน workflow input/output generics, ฟิลด์เวอร์ชัน (
version: "v2"), run().result(), handle.cancel() เป็นต้น
- รองรับการขยายและการปรับแต่งให้เข้ากับระบบภายนอกผ่าน plugin architecture
- รองรับการเชื่อมต่อกับ SaaS และเครื่องมือพัฒนาหลัก เช่น OpenAI, Slack, GitHub, Notion
- ขณะนี้โฟกัสที่ PostgreSQL backend และความสามารถรันไทม์พื้นฐาน (concurrency, retry, parallel step, sleep, versioning, cancel)
- หลังจากนี้มี CLI, dashboard, idempotency key, rollback/compensation functions, signals, OpenTelemetry, Redis/SQLite backend, Go/Python SDK อยู่ในโรดแมป
2 ความคิดเห็น
เมื่อไม่นานมานี้มีโพสต์นี้ขึ้นมาอยู่เหมือนกัน GitHub - earendil-works/absurd: An experiment in durability https://share.google/PCjaLh3j46ayECI9b ... ดูเหมือนจะเป็นโปรเจ็กต์แนวคอนเซปต์เดียวกัน แต่หายไปไหนแล้วนะ...
ให้ความรู้สึกคล้ายกับ spring batch เลยครับ