การประมวลผลสตรีมในภาษา Rust: ArkFlow จุดประเด็นถกเถียงเรื่องแนวทางการใช้การกำหนดค่าเทียบกับการเขียนโค้ด

BigGo Editorial Team
การประมวลผลสตรีมในภาษา Rust: ArkFlow จุดประเด็นถกเถียงเรื่องแนวทางการใช้การกำหนดค่าเทียบกับการเขียนโค้ด

การปรากฏตัวของ 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 จากไฟล์การกำหนดค่าเป็นวิธีที่จะรักษาความเรียบง่ายของการกำหนดค่าในขณะที่เปิดใช้งานพลังเต็มรูปแบบของโค้ดเชิงบังคับเมื่อจำเป็น

คนอื่น ๆ ชี้ไปที่โซลูชันที่มีอยู่ในพื้นที่นี้ ได้แก่:

  1. Tremor - ระบบประมวลผลเหตุการณ์อีกตัวที่ใช้ Rust
  2. RisingWave - ฐานข้อมูลสตรีมมิ่งที่ใช้ Rust ซึ่งมีรายงานว่ามีประสิทธิภาพดีกว่าตัวเลือกอื่น ๆ หลายตัว
  3. Arroyo - เอนจินประมวลผลสตรีมแบบมีสถานะที่รองรับหน้าต่าง การรวม และการเชื่อมต่อ
  4. 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