ข้ามไปเนื้อหาหลัก

rekuiper: เอนจินประมวลผลสตรีม Rust บน Edge

rekuiper เอนจินประมวลผลสตรีมเขียนด้วย Rust ใช้แรมเพียง 5-10 MB จัดการข้อความ MQTT 1 แสนข้อความต่อวินาทีบนฮาร์ดแวร์จำกัด

เรียบเรียงโดย AI
Inewgen
14 Sep 2026ที่มา: Dev.to3 นาทีอ่าน (0 ครั้ง)
แชร์
rekuiper: เอนจินประมวลผลสตรีม Rust บน Edge

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • rekuiper ควบคุมหน่วยความจำให้คงที่ระหว่าง 5-10 MB ภายใต้ภาระงานหนัก
  • ประมวลผลข้อมูล MQTT ได้สูงถึง 100,000 ข้อความต่อวินาทีบนซีพียูเพียง 1 คอร์
  • สถาปัตยกรรมจัดการหน่วยความจำอิงตามจำนวนอุปกรณ์ ไม่ใช่จำนวนข้อความ
  • รองรับ REST API และไวยากรณ์ SQL ของ LF Edge eKuiper ทั้งหมด

การวัดประสิทธิภาพงานประมวลผลสตรีมส่วนใหญ่มักมุ่งเน้นไปที่ตัวเลขเพียงชุดเดียว นั่นคือปริมาณงานสูงสุดบนเซิร์ฟเวอร์ขนาดใหญ่ แต่ตัวเลขดังกล่าวแทบไม่มีประโยชน์สำหรับอุปกรณ์ที่เอนจินเหล่านี้ต้องทำงานจริง เช่น เกตเตรย์อุตสาหกรรม ฮับ ESPHead หน่วยหัวรถยนต์ หรือเครื่องชาร์จรถยนต์ไฟฟ้า ซึ่งมักมีซีพียูเพียงหนึ่งหรือสองคอร์และหน่วยความจำฟรีเพียงไม่กี่ร้อยเมกะไบต์ ขณะที่ข้อมูลขาเข้ามุ่งหน้าผ่าน MQTT และมักจะมาแบบกระชากอย่างรุนแรงเมื่อยานพาหนะหรืออุปกรณ์จำนวนมากเชื่อมต่อกลับเข้ามาพร้อมกันหลังเกิดเหตุขัดข้อง

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

100kข้อความต่อวินาทีบน 1 คอร์
5-10 MBการใช้แรมของ rekuiper
0.5-1 GBการใช้แรมของเอนจินภาษา Go

ผลลัพธ์สำคัญคือจากการทดสอบเวิร์กโหลด MQTT ห้าแบบจำลองการใช้งานจริง rekuiper สามารถผลิตผลลัพธ์ที่ถูกต้องและครบถ้วนที่ 100,000 ข้อความต่อวินาทีบนซีพียู 1 คอร์ในทุกเวิร์กโหลดโดยไม่พบขีดจำกัดสูงสุด แต่ผลลัพธ์ที่น่าสนใจยิ่งกว่าคือในเวิร์กโหลดแบบมีหน้าต่างเวลา (windowed workloads) หน่วยความจำของ rekuiper คงที่อยู่ระหว่าง 5 ถึง 10 เมกะไบต์ ในขณะที่เอนจินภาษา Go พุ่งสูงถึงครึ่งกิกะไบต์จนถึงหนึ่งกิกะไบต์ หรือไม่ก็ล้มเหลวไปเลย ช่องว่างดังกล่าวเกิดจากการออกแบบ ไม่ใช่ภาษาที่ใช้เขียน

microcontroller iot electronics circuit board

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

rekuiper เป็นเอนจินประมวลผลสตรีมที่พัฒนาด้วยภาษา Rust โดยจำลองการทำงานพื้นผิวของ LF Edge eKuiper ทั้ง REST API, ไวยากรณ์ SQL, นิยามสตรีมและกฎ รวมถึงอินเทอร์เฟซบรรทัดคำสั่ง kuiper เป้าหมายคือการใช้งานร่วมกันได้โดยไม่ต้องเขียนโค้ดใหม่ทั้งหมด ผู้ใช้ที่คุ้นเคยกับ eKuiper อยู่แล้วจะสามารถใช้งาน rekuiper ได้ทันทีผ่าน API 98 เส้นทางและ 140 การทำงานที่ตรวจสอบเทียบกับ OpenAPI ของ eKuiper

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

การที่ rekuiper เลือกใช้ภาษา Rust ควบคู่กับการออกแบบสถาปัตยกรรมแบบ bounded memory ถือเป็นก้าวสำคัญในการแก้ปัญหาคอขวดของ Edge Computing เนื่องจากอุปกรณ์ IoT มักมีข้อจำกัดด้านฮาร์ดแวร์ การควบคุมการใช้แรมไม่ให้รั่วไหลหรือขยายตัวตามปริมาณข้อความแบบสุ่ม จึงช่วยป้องกันระบบล่มจากการขาดแคลนหน่วยความจำได้อย่างมีประสิทธิภาพ

ความแตกต่างที่สำคัญซ่อนอยู่เบื้องล่างภายใต้หลักการหน่วยความจำต้องจำกัดภายใต้โหลดหนัก การออกแบบหลักสามประการประกอบด้วย:

  • ระบบสตรีมบัสภายในกระบวนการที่มีคิวจำกัดต่อผู้สมัครรับข้อมูลรายละ 4,096 รายการ
  • แหล่งข้อมูล MQTT ใช้ไคลเอ็นต์ rumqttc รวบรวมข้อมูลเป็นชุดสูงสุด 1,024 รายการเพื่อลดต้นทุนการปลุกสตรีม
  • ตัวประเมินผลแบบเพิ่มส่วน (incremental evaluator) ที่คำนวณหน้าต่างเวลาโดยอิงตามจำนวนอุปกรณ์แทนที่จะเก็บบันทึกทุกแถว

"หน่วยความจำของ rekuiper คงที่ระหว่าง 5 ถึง 10 MB ในขณะที่เอนจินภาษา Go พุ่งสูงถึงครึ่งกิกะไบต์ถึงหนึ่งกิกะไบต์หรือล้มเหลว"

ทีมพัฒนา rekuiper

สำหรับการจัดการกรณีลิงก์สัญญาณขาดหายเปรียบเสมือนรถยนต์ที่วิ่งเข้าอุโมงค์หรือพื้นที่ห่างไกล ตัวซิงก์สามารถเปิดใช้งานแคชตามตัวเลือกของ eKuiper ได้ โดยบันทึกที่ไม่สามารถส่งได้สำเร็จจะถูกเข้าคิวในหน่วยความจำจนถึงขีดจำกัด ก่อนจะย้ายไปบันทึกยังดิสก์เพจ เพื่อป้องกันข้อมูลสูญหายอย่างเงียบๆ

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้