14 คะแนน โดย GN⁺ 2023-11-24 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • Windmill พิสูจน์ผ่านการทดสอบเบนช์มาร์กว่าเป็นเอนจินเวิร์กโฟลว์โอเพนซอร์สแบบโฮสต์เองได้ที่เร็วที่สุดเมื่อเทียบกับเอนจินเวิร์กโฟลว์อื่น ๆ เช่น Airflow, Prefect, Temporal
  • Windmill รองรับภาษาการเขียนโปรแกรมหลากหลาย และมีสภาพแวดล้อมการพัฒนาแบบรวมศูนย์ที่ช่วยให้สร้างและทดสอบเวิร์กโฟลว์ได้ภายในไม่กี่นาที โดยไม่ต้องมี SDK ที่ซับซ้อนหรือกระบวนการดีพลอยที่ยุ่งยาก
  • Airflow/Prefect รองรับเพียงรันไทม์เดียว (Python) แต่ Windmill รองรับ Python, Typescript, Go, Bash และรองรับการรัน SQL query โดยตรงกับ BigQuery, Snowflake, Mysql, Postgresql
  • เมื่อเทียบกับ Temporal นั้น Temporal เชี่ยวชาญด้านการจัดการคิวงาน แต่ Windmill ยังทำหน้าที่เป็นเอนจินการรันงานแบบทนทานได้ด้วย โดยมีความสามารถในการรอเหตุการณ์ (reactivity) รวมอยู่ด้วย

ความแตกต่างระหว่างเอนจินเวิร์กโฟลว์กับคิวงาน

  • คิวงานคือแกนหลักของเอนจินเวิร์กโฟลว์ และนักพัฒนาจำนวนมากก็สร้างตรรกะของตนเองขึ้นมาเพื่อใช้คิวงานโดยไม่ใช้เอนจินเวิร์กโฟลว์
  • มีอิมพลีเมนเทชันของคิวอยู่แล้วหลายแบบ เช่น SQS, Kafka, Redis with RMSQ, Orban
  • นักพัฒนาจำนวนมากสร้างตรรกะของตนเองโดยยึดคิวงานเป็นศูนย์กลาง จนได้ประสบการณ์ที่คล้ายกับการใช้เอนจินเวิร์กโฟลว์ (หรือก็คือการสร้างเอนจินเวิร์กโฟลว์ของตัวเอง)

เอนจินเวิร์กโฟลว์แบบ "All-Inclusive" คืออะไร

  • เอนจินเวิร์กโฟลว์จะประสานงานเวิร์กโฟลว์ในระบบกระจายเพื่อให้งานเสร็จสมบูรณ์ โดยเคารพข้อจำกัดด้านการพึ่งพากันของงาน
  • ข้อดีหลัก 5 ประการของเอนจินเวิร์กโฟลว์:
    • การจัดสรรทรัพยากร: ใช้คลัสเตอร์ได้อย่างคุ้มค่าสูงสุด สามารถมอบหมายงานทั้งหมดไปยังเวิร์กเกอร์ที่ต่างกันซึ่งมีทรัพยากรต่างกัน (CPU, หน่วยความจำ, GPU) และรับประกันได้ว่าทรัพยากรทั้งหมดของเวิร์กเกอร์จะถูกใช้กับงานนั้น
    • การประมวลผลแบบขนาน: หากบางขั้นตอนสามารถรันแบบขนานได้ตามข้อจำกัดของเวิร์กโฟลว์ (branch, for loop) เอนจินเวิร์กโฟลว์ก็สามารถ dispatch ขั้นตอนเหล่านั้นไปยังเวิร์กเกอร์หลายตัวที่แยกจากกันจริง ไม่ใช่แค่เธรดเท่านั้น
    • การสังเกตการณ์: ทุกงานมี ID เฉพาะตัว และสามารถสังเกตได้เป็นรายงาน เช่น ตรวจสอบอินพุต ล็อก เอาต์พุต และสถานะได้
    • ความทนทาน: หากเครื่องหยุดทำงานหรือเกิดผลข้างเคียงจากเหตุผลที่ไม่คาดคิด ต้องสามารถเริ่มเวิร์กโฟลว์ใหม่ได้
      • เวิร์กโฟลว์ควรสามารถเริ่มใหม่ได้เร็วที่สุดเมื่อเกิดเหตุการณ์ไม่คาดคิด และวิธีหนึ่งในการทำเช่นนั้นคือ idempotency ซึ่งหมายถึงการที่การทำงานเดิมซ้ำหลายครั้งให้ผลเหมือนทำเพียงครั้งเดียว
      • หากไม่แน่ใจ ให้ replay โฟลว์ทั้งหมดโดยไม่ทำให้เกิดผลลัพธ์ซ้ำ โดยทั่วไปจะทำผ่านไฟล์ล็อกและ SDK ที่ข้ามผลข้างเคียงได้ หาก ID เฉพาะที่แนบกับงานเป็นส่วนหนึ่งของล็อก
      • อีกวิธีหนึ่งคือสร้าง transactional snapshot ของสถานะโฟลว์และบันทึกสถานะหลังจบแต่ละงาน เมื่อต้องเริ่มใหม่ก็เพียงโหลดสถานะล่าสุดแล้วทำงานต่อจากจุดนั้น
      • Windmill ใช้วิธีหลัง และตั้งสมมติฐานว่าสามารถทำ idempotency ได้ในฝั่งพื้นที่ของผู้ใช้เมื่อจำเป็น
    • การตอบสนองต่อเหตุการณ์: หยุดโฟลว์ชั่วคราวจนกว่าจะมีเหตุการณ์ เช่น webhook หรือการอนุมัติ แล้วจึงกลับมาทำงานต่อ

เคล็ดลับที่ทำให้ Windmill เร็ว

  • Windmill ใช้ Postgresql และ Rust เพื่อเพิ่มประสิทธิภาพสูงสุดผ่านการออกแบบที่เรียบง่ายและการปรับจูน

การออกแบบระบบและคิว

  • Windmill ให้มาเป็นไบนารีเดี่ยวที่คอมไพล์ด้วย Rust โดยเวิร์กเกอร์และเซิร์ฟเวอร์เชื่อมต่อกับ Postgresql แต่ไม่ได้เชื่อมต่อถึงกันโดยตรง
  • มีการอิมพลีเมนต์คิวไว้ภายใน Postgresql เอง และงานสามารถถูกทริกเกอร์จากภายนอกผ่าน API ได้

สถานะ

  • เอนจินเวิร์กโฟลว์แทนงานด้วย finite state machine (FSM) และ Windmill จัดการทั้งโฟลว์เป็น FSM ด้วยตัวมันเอง

การส่งผ่านข้อมูล

  • Windmill มีหลายวิธีสำหรับการส่งผ่านข้อมูล เช่น JavaScript expression, การแชร์โฟลเดอร์ชั่วคราว, การผสานรวมกับ S3

ประสิทธิภาพของเวิร์กเกอร์

  • เวิร์กเกอร์ของ Windmill ประมวลผลงานครั้งละหนึ่งงาน และรันงานโดยไม่ใช้คอนเทนเนอร์เพื่อเพิ่มประสิทธิภาพ

บทสรุป

  • Windmill เป็นโอเพนซอร์สและเป็น serverless runtime กับแพลตฟอร์มที่โฮสต์เองได้ ซึ่งมอบความเร็วสูงมากด้วยการออกแบบที่เรียบง่ายและการปรับจูนบนพื้นฐานของ Postgresql และ Rust

ความเห็นของ GN⁺

ประเด็นสำคัญที่สุดของบทความนี้คือ Windmill รองรับภาษาการเขียนโปรแกรมที่หลากหลาย และมีสภาพแวดล้อมการพัฒนาแบบรวมศูนย์ที่ช่วยให้สร้างและทดสอบเวิร์กโฟลว์ได้อย่างรวดเร็วโดยไม่ต้องมี SDK ที่ซับซ้อนหรือกระบวนการดีพลอยที่ยุ่งยาก คุณสมบัติเหล่านี้มีประโยชน์อย่างมากสำหรับนักพัฒนาซอฟต์แวร์ และประสิทธิภาพกับความเร็วของ Windmill ก็จะช่วยให้นักพัฒนาปล่อยผลิตภัณฑ์ที่ดีกว่าได้เร็วขึ้น บทความนี้มีเนื้อหาที่น่าสนใจสำหรับนักพัฒนา โดยเฉพาะผู้ที่กำลังสร้างเอนจินเวิร์กโฟลว์ของตนเองหรือพยายามปรับแต่งเอนจินที่มีอยู่ให้เหมาะสมยิ่งขึ้น

2 ความคิดเห็น

 
xguru 2023-11-24

Windmill - โอเพนซอร์สสำหรับการสร้างแอปภายในองค์กรและแพลตฟอร์มอัตโนมัติบนพื้นฐาน Python

เมื่อเดือนพฤษภาคมปีก่อนมีการเปิดเผยออกมาเล็กน้อย ตอนนั้นผู้พัฒนาบอกว่ายังไม่พร้อมจะเปิดตัวต่อสาธารณะ และบอกว่าอีก 10 นาทีจะเข้าไปสัมภาษณ์กับ YC! แล้วหลังจากนั้นก็มาเขียนคอมเมนต์ว่าผ่าน YC แล้ว
หลังจากผ่าน YC และลุยมา 1 ปีครึ่ง ก็เปิดตัวผลิตภัณฑ์อย่างเป็นทางการเสียทีครับ

 
GN⁺ 2023-11-24
ความคิดเห็นบน Hacker News
  • ดูเหมือนว่านักพัฒนา Windmill จะทำตรงข้ามกับคำแนะนำที่ว่า "จงทำสิ่งเดียวให้ดี" แม้ดูที่ Windmill.dev ก็ยังไม่ชัดเจนว่าซอฟต์แวร์นี้ใช้ทำอะไรแน่ สับสนว่าเป็นคู่แข่งของ Retool, Airflow, Temporal, เป็นตัวสร้างเวิร์กโฟลว์แบบ no-code, เป็นตัวสร้าง UI แบบลากแล้ววาง, เป็น IDE ออนไลน์ หรือเป็นเครื่องมือที่มีการเชื่อมต่อมากมายกันแน่
  • สงสัยว่าความเร็วของ workflow engine สำคัญหรือไม่เมื่อเกินระดับหนึ่งไปแล้ว เวิร์กโฟลว์จำนวนมากมีงานที่รันระยะยาว ดังนั้นสิ่งสำคัญคือ multi-tenancy หรือความสามารถในการรองรับงานได้มากเท่าที่ผู้ใช้ต้องการ พร้อมกับให้แต่ละงานถูกจัดตารางและรันราวกับว่าเป็นงานเดียวใน workflow engine
  • อยากย้ายกระบวนการทางธุรกิจออกจากสเปรดชีต อีเมลส่วนตัว และความทรงจำของผู้จัดการ ไปสู่เว็บฟอร์ม การอัปโหลด อีเมลอัตโนมัติ และแดชบอร์ด เคยดู Airtable, Smartsheet, Budibase ฯลฯ มาแล้ว แต่ดูเหมือนจะเน้นการจัดการโปรเจกต์มากกว่า และยังไม่ค่อยน่าพอใจในเรื่องการเชื่อมต่อปฏิทิน อีเมล หรือสคริปต์ที่ตั้งเวลาไว้ หากจำเป็นก็เขียนโค้ดได้หรือมี API สำหรับข้อมูลอยู่แล้ว และชอบแนวทาง low-code ที่ผู้ดูแลสามารถทำงาน UI บางส่วนด้วยมุมมองแบบสเปรดชีต ขณะที่โปรแกรมเมอร์จัดการเรื่อง integration ได้
  • แปลกใจที่คนยังใช้เวลาและความพยายามมากมายในการเขียน แต่ไม่เคยใช้ตัวตรวจการสะกดแม้แต่ครั้งเดียว สงสัยว่าในปี 2023 ยังมีคนใช้ text editor ที่ไม่มีการตรวจการสะกดเป็นค่าเริ่มต้นอยู่หรือไม่
  • รู้สึกสับสนที่บอกว่าเป็นโอเพนซอร์ส แต่มีข้อจำกัด SSO ผู้ใช้ 10 คน โดยทั่วไปโอเพนซอร์สหมายถึงอนุญาตให้แก้ไขโค้ดได้ แต่ก็สงสัยว่าจะบังคับใช้ข้อจำกัด 10 คนนี้อย่างไร พอดูซอร์สโค้ดก็พบว่ามีโค้ดตรวจสอบไลเซนส์อยู่ ถ้าเป็นโอเพนซอร์ส ใคร ๆ ก็น่าจะลบโค้ดส่วนนั้นออกได้ไม่ใช่หรือ? ถ้าแก้ไขไม่ได้ นั่นคือ "source-available" ไม่ใช่ "open source" โปรเจกต์ดูน่าสนใจมากจนอยากเสนอหัวหน้า แต่ไม่รู้จะอธิบายประเด็นนี้อย่างไร
  • ติดตาม Windmill มาตั้งแต่เปิดตัวบน HN และเริ่มใช้มากขึ้นตั้งแต่ก่อนหนึ่งปีมานี้ เซิร์ฟเวอร์ Discord คึกคักมาก และ Ruben ก็ตอบกลับพร้อมแก้บั๊กภายในไม่กี่นาที แม้ในช่วงสุดสัปดาห์
  • อยากใช้ระบบของ Windmill แต่ยังลังเลเพราะปัญหาไลเซนส์ ซอฟต์แวร์ส่วนใหญ่อยู่ภายใต้ AGPLv3 แต่ส่วนไลเซนส์เชิงพาณิชย์ใน README ชี้ให้เห็นการตีความ AGPL ที่กว้างมาก การสร้างฟังก์ชันผ่าน Windmill แล้วทำให้ผลิตภัณฑ์ของเราต้องเป็น AGPLv3 เช่นกัน หมายความว่าแม้แต่การเรียกใช้งานผ่าน API ก็อาจอยู่ภายใต้กฎหมายลิขสิทธิ์ได้ ซึ่งทำให้การวางตำแหน่ง Windmill ว่าเป็น "โอเพนซอร์สเต็มรูปแบบ" จะถูกต้องในเชิงเทคนิค แต่ในทางปฏิบัติกลับใกล้เคียงกับ "source-available" มากกว่า หาก Windmill ไม่ต้องการให้มีการตีความไลเซนส์แบบนี้ ก็ควรทำให้ชัดเจน
  • Windmill ยอดเยี่ยมมาก โฮสต์เองได้ และควรยึดมั่นกับประสบการณ์นักพัฒนา (Developer Experience, DX) แม้ที่ทำงานจะไม่เคยจำเป็นต้องใช้ แต่ที่บ้านใช้มันรันเว็บครอว์เลอร์ขนาดเล็กและงาน yt-dlp เป็นเครื่องมือที่สนุกมาก
  • สับสนเรื่องไลเซนส์
  • ยังหาวิธีสร้างสมดุลระหว่างการเก็บโค้ดไว้ในฐานข้อมูลและแก้ไขผ่าน web IDE กับการ commit โค้ดเข้า Git และเปลี่ยนแปลงผ่านกระบวนการพัฒนาและ peer review ตามปกติเท่านั้นไม่เจอ Windmill เก็บโค้ดไว้ในฐานข้อมูลเป็นหลัก แต่มี API สำหรับซิงก์กับ Git repository จึงสงสัยว่ามีกลไกที่บังคับใช้กฎเพื่อจำกัดให้สคริปต์/ฟังก์ชัน/ซีเครตบางอย่างใช้ได้เฉพาะกับเวิร์กโฟลว์ที่นำเข้าจาก repository ที่กำหนดไว้หรือไม่