การปรากฏตัวของ ArkFlow ซึ่งเป็นเอนจินประมวลผลสตรีมประสิทธิภาพสูงตัวใหม่ที่เขียนด้วยภาษา Rust ได้จุดประเด็นถกเถียงอย่างคึกคักในหมู่นักพัฒนาเกี่ยวกับแนวทางพื้นฐานในการสร้างไปป์ไลน์ประมวลผลข้อมูล แม้ว่าโปรเจกต์นี้จะสัญญาว่าจะมีประสิทธิภาพที่ยอดเยี่ยมผ่านการใช้ภาษา Rust และ Tokio async runtime แต่การสนทนาในชุมชนกลับมุ่งเน้นไปที่ปรัชญาสถาปัตยกรรมมากกว่าความสามารถทางเทคนิค
ArkFlow วางตำแหน่งตัวเองเป็นโซลูชันที่ครอบคลุมสำหรับการประมวลผลสตรีม รองรับแหล่งข้อมูลหลายประเภท เช่น Kafka, MQTT และ HTTP พร้อมทั้งมีความสามารถในการประมวลผลที่ทรงพลัง รวมถึงการสืบค้น SQL และการประมวลผล JSON อย่างไรก็ตาม แนวทางการกำหนดค่าที่อิงตาม YAML ได้กลายเป็นจุดสนใจสำหรับการพิจารณาของนักพัฒนา
ความกลืนไม่เข้าคายไม่ออกระหว่างการกำหนดค่าและการเขียนโค้ด
หนึ่งในการถกเถียงที่น่าสนใจที่สุดเกี่ยวกับ ArkFlow เกี่ยวข้องกับข้อจำกัดที่มีอยู่ในระบบไปป์ไลน์ที่อิงตามการกำหนดค่า นักพัฒนาที่มีประสบการณ์ในบริษัทเทคโนโลยีขนาดใหญ่ได้ชี้ให้เห็นว่า แม้ไฟล์การกำหนดค่า YAML จะดูสง่างามในตอนแรก แต่มักจะวิวัฒนาการไปสู่ภาษาเขียนโปรแกรมเทียมที่ซับซ้อนเกินไปเมื่อความต้องการของโปรเจกต์เพิ่มความซับซ้อนมากขึ้น
Any bit of logic that defines a computation should prefer explicit imperative code (eg python) over configuration, because you are likely to eventually implement an imperative language in that configuration language anyway.
ข้อมูลเชิงลึกนี้สอดคล้องกับหลายคนในกระทู้ที่มีประสบการณ์คล้ายกัน เมื่อไปป์ไลน์มีความซับซ้อนมากขึ้น ทีมมักพบว่าตนเองกำลังใช้ตรรกะแบบมีเงื่อนไข การปรับแบบไดนามิก และการประกอบคอมโพเนนต์ภายในไฟล์การกำหนดค่า—ซึ่งเท่ากับการสร้างภาษาโปรแกรมแบบเฉพาะกิจที่มีเครื่องมือดีบักที่ไม่ดีและการแสดงออกที่จำกัด
SQL ในฐานะภาษาการแปลงสากล
อีกประเด็นสำคัญในการสนทนาเน้นไปที่บทบาทของ SQL ในไปป์ไลน์การแปลงข้อมูล นักพัฒนาที่มีประสบการณ์หลายคนเห็นตรงกันว่า SQL ยังคงเป็นหนึ่งในภาษาที่มีประสิทธิภาพมากที่สุดสำหรับงานแปลงข้อมูล โดยเฉพาะอย่างยิ่งเมื่อย้ายข้อมูลระหว่างระบบที่คล้ายกัน
เมื่อทำงานกับข้อมูลที่มีโครงสร้าง SQL นำเสนอแนวทางเชิงประกาศที่ลูกค้าและผู้มีส่วนได้ส่วนเสียทางธุรกิจมักเข้าใจและสามารถแก้ไขได้โดยตรง การเข้าถึงนี้สามารถเป็นข้อได้เปรียบที่สำคัญในบริบท B2B ที่ลูกค้าอาจต้องการปรับแต่งการแปลงข้อมูลโดยไม่ต้องมีความรู้ด้านการเขียนโปรแกรมเชิงลึก
อย่างไรก็ตาม แม้แต่ SQL ก็มีข้อจำกัดในสถานการณ์ที่ซับซ้อน นักพัฒนาสังเกตว่าเมื่อความต้องการมีความซับซ้อนมากขึ้น พวกเขามักจะใช้การสร้าง SQL แบบไดนามิกหรือแนวทางคล้ายแมโครเพื่อจัดการกับพารามิเตอร์ ซึ่งอาจสร้างความท้าทายในการบำรุงรักษาในระยะยาว
แนวทางทางเลือกและโซลูชันที่มีอยู่
การสนทนาในชุมชนได้เปิดเผยแนวทางทางเลือกหลายประการสำหรับปัญหาที่ ArkFlow พยายามแก้ไข นักพัฒนาคนหนึ่งแนะนำให้สร้างโค้ด Rust จากไฟล์การกำหนดค่าเป็นวิธีที่จะรักษาความเรียบง่ายของการกำหนดค่าในขณะที่เปิดใช้งานพลังเต็มรูปแบบของโค้ดเชิงบังคับเมื่อจำเป็น
คนอื่น ๆ ชี้ไปที่โซลูชันที่มีอยู่ในพื้นที่นี้ ได้แก่:
- Tremor - ระบบประมวลผลเหตุการณ์อีกตัวที่ใช้ Rust
- RisingWave - ฐานข้อมูลสตรีมมิ่งที่ใช้ Rust ซึ่งมีรายงานว่ามีประสิทธิภาพดีกว่าตัวเลือกอื่น ๆ หลายตัว
- Arroyo - เอนจินประมวลผลสตรีมแบบมีสถานะที่รองรับหน้าต่าง การรวม และการเชื่อมต่อ
- Benthos/Redpanda Connect - เครื่องมือประมวลผลสตรีมที่เติบโตเต็มที่พร้อมระบบนิเวศที่อุดมสมบูรณ์
การเปรียบเทียบประสิทธิภาพระหว่างระบบเหล่านี้กลายเป็นอีกหนึ่งประเด็นในการสนทนา โดยนักพัฒนาคนหนึ่งสังเกตว่าในการทดสอบประสิทธิภาพของพวกเขา RisingWave ที่ใช้ Rust มีประสิทธิภาพดีกว่าทั้ง Bento และ Spark Streaming อย่างมีนัยสำคัญสำหรับการแปลง JSON ที่มีปริมาณสูง
เครื่องมือประมวลผลสตรีมที่กล่าวถึงในการสนทนา
เครื่องมือ | ภาษาที่ใช้พัฒนา | คุณสมบัติเด่น | หมายเหตุเกี่ยวกับชุมชน |
---|---|---|---|
ArkFlow | Rust | ใช้ Tokio async runtime, อิงจาก DataFusion, กำหนดค่าด้วย YAML | โปรเจกต์ใหม่ ยังไม่พร้อมใช้งานในระดับการผลิต |
RisingWave | Rust | ประสิทธิภาพสูงในการทดสอบเปรียบเทียบ | มีรายงานว่าทำงานได้ดีกว่า Bento และ Spark |
Arroyo | Rust (บางส่วนใช้ DataFusion) | การประมวลผลแบบมีสถานะ, windows, aggregates, joins | มี dataflow และ operators แบบกำหนดเอง |
Tremor | Rust | การประมวลผลเหตุการณ์ | โปรเจกต์ที่มีความเสถียร |
Benthos/RPCN | Go | มีระบบนิเวศที่อุดมสมบูรณ์, มีตัวเชื่อมต่อมากมาย | ถูกอธิบายว่าเป็น "Perl ของยุค 2020" สำหรับการเชื่อมต่อ |
Bento | Go | พัฒนาบนพื้นฐานของ Benthos | - |
Spark Streaming | Scala/Java | - | ถูกกล่าวถึงว่ามีประสิทธิภาพต่ำกว่าในการทดสอบเปรียบเทียบ |
อนาคตของการประมวลผลสตรีม
ผู้สร้าง ArkFlow ได้รับทราบข้อเสนอแนะและแสดงความเปิดกว้างที่จะพิจารณาแนวทางอื่น ๆ โปรเจกต์นี้ยังคงถูกทำเครื่องหมายว่าไม่พร้อมสำหรับการใช้งานในการผลิต ซึ่งบ่งชี้ว่ายังมีพื้นที่สำหรับวิวัฒนาการทางสถาปัตยกรรมตามข้อมูลจากชุมชน
มองไปข้างหน้า การสนทนาเน้นย้ำถึงความตึงเครียดที่สำคัญในเครื่องมือวิศวกรรมข้อมูล: ความสมดุลระหว่างความเรียบง่ายและการแสดงออก ในขณะที่ระบบที่ขับเคลื่อนด้วยการกำหนดค่าเสนอการเข้าถึงและการตั้งค่าอย่างรวดเร็ว แนวทางที่ขับเคลื่อนด้วยโค้ดให้ความยืดหยุ่นและพลังที่จำเป็นสำหรับสถานการณ์ในโลกแห่งความเป็นจริงที่ซับซ้อน
เมื่อความต้องการในการประมวลผลข้อมูลยังคงเพิ่มความซับซ้อนขึ้น ชุมชนดูเหมือนจะมุ่งไปสู่แนวทางแบบผสมผสานที่รวมความเรียบง่ายเชิงประกาศของไฟล์การกำหนดค่ากับช่องทางหนีไปสู่ภาษาโปรแกรมเต็มรูปแบบเมื่อจำเป็น
ในตอนนี้ ArkFlow เป็นอีกหนึ่งผู้เข้าร่วมที่น่าสนใจในระบบนิเวศที่เติบโตของเครื่องมือโครงสร้างพื้นฐานที่ใช้ Rust สะท้อนให้เห็นถึงการนำภาษานี้มาใช้เพิ่มขึ้นสำหรับแอปพลิเคชันที่ต้องการประสิทธิภาพสูง ซึ่งเสถียรภาพและประสิทธิภาพของทรัพยากรมีความสำคัญสูงสุด
อ้างอิง: ArkFlow - High-performance Rust stream processing engine