ในโลกของวิทยาการเข้ารหัสลับและโครงสร้างข้อมูล Merkle trees ได้รับการยอมรับมานานว่าเป็นองค์ประกอบพื้นฐานสำหรับระบบที่ต้องการการยืนยันความถูกต้องของข้อมูลอย่างมีประสิทธิภาพ การเปิดตัว rs-merkle-tree ซึ่งเป็นไลบรารีที่พัฒนาด้วยภาษา Rust ที่อวดเมตริกประสิทธิภาพอันน่าประทับใจและการออกแบบแบบแยกส่วน ได้จุดประกายการอภิปรายใหม่เกี่ยวกับที่ทางของโครงสร้างการเข้ารหัสเหล่านี้ นอกเหนือจากการประยุกต์ใช้กับบล็อกเชนที่เรารู้จักกันดี
นักพัฒนาที่อยู่เบื้องหลังไลบรารีใหม่นี้เน้นย้ำถึงการปรับให้เหมาะสมกับโครงสร้างข้อมูลแบบเพิ่มเติมเท่านั้น (append-only) ซึ่งมักพบในระบบกระจายศูนย์ (distributed systems) บันทึกการตรวจสอบ (audit logs) และระบบความโปร่งใสของใบรับรอง (certificate transparency systems) ด้วยแบ็กเอนด์การจัดเก็บและฟังก์ชันแฮชที่สามารถกำหนดค่าได้ ไลบรารีนี้มีเป้าหมายเพื่อให้มีความยืดหยุ่นในขณะที่ยังคงประสิทธิภาพสูงสำหรับการสร้างและยืนยันหลักฐาน (proof)
นอกเหนือจากบล็อกเชน: การค้นหาการประยุกต์ใช้ในทางปฏิบัติ
การอภิปรายในชุมชนได้เปลี่ยนไปสู่การระบุกรณีใช้จริงนอกเหนือจากสกุลเงินดิจิทัลอย่างรวดเร็ว ในขณะที่บล็อกเชนยังคงเป็นการประยุกต์ใช้ที่โดดเด่นที่สุด นักพัฒนากำลังสำรวจทางเลือกอื่นๆ ที่ใช้ประโยชน์จากจุดแข็งหลักของ Merkle trees ผู้แสดงความคิดเห็นหนึ่งท่านระบุถึงความท้าทายในการหาการประยุกต์ใช้นอกเหนือจาก crypto และบันทึกความโปร่งใสของใบรับรอง ซึ่งจุดประกายการสนทนาที่กว้างขึ้นเกี่ยวกับการนำไปปฏิบัติในทางปฏิบัติ
ขณะนี้ฉันกำลังสำรวจว่า API ต่างๆ คำนวณ ETags อย่างไร ฉันมีแนวโน้มที่จะคิดว่า overhead ของ Merkle-trees ทำให้พวกมันมีประโยชน์ค่อนข้างน้อยสำหรับ ETags สำหรับ API ที่แบ่งหน้า ซึ่งการตอบกลับมีขนาดเล็กและการแฮชแบบธรรมดาทำได้เร็ว
มุมมองนี้เน้นย้ำถึงการประเมินอย่างต่อเนื่องว่า Merkle trees ให้คุณค่าที่แท้จริงในสถานการณ์ใด ในขณะที่โซลูชันที่ง่ายกว่าอาจเพียงพอ การอภิปรายเปิดเผยการประยุกต์ใช้ที่เป็นไปได้หลายประการ รวมถึงระบบไฟล์แบบกระจายศูนย์สำหรับพิสูจน์ความสมบูรณ์ของข้อมูล ระบบควบคุมเวอร์ชันเช่น Git และกรณีใช้ด้านความปลอดภัยเฉพาะทางที่ต้องการการยืนยันความถูกต้องของข้อมูลในอดีต
เกณฑ์มาตรฐานประสิทธิภาพเผยเรื่องน่าประหลาดใจเกี่ยวกับการจัดเก็บ
เมตริกประสิทธิภาพของไลบรารีสร้างความสนใจอย่างมาก โดยเฉพาะผลลัพธ์ที่ไม่คาดคิดซึ่งแสดงให้เห็นว่า SQLite ทำได้ดีกว่า RocksDB ในบางสถานการณ์ สิ่งนี้ทำให้หลายๆ คนในวงการนักพัฒนาประหลาดใจ ที่คาดว่า key-value stores จะเป็นฝ่ายนำในเกณฑ์มาตรฐานประสิทธิภาพ ชุมชนคาดการณ์ว่าลักษณะการเข้าถึงของต้นไม้ ซึ่งเกี่ยวข้องกับการอ่านและการเขียนระหว่างการแทรกใบ (leaf insertion) อาจเป็นคำอธิบายสำหรับผลลัพธ์ที่ขัดกับสัญชาตญาณเหล่านี้
เกณฑ์มาตรฐานที่ดำเนินการบนฮาร์ดแวร์ AMD Ryzen 7 แสดงให้เห็นว่าการจัดเก็บแบบหน่วยความจำ (memory-based storage) บรรลุปริมาณงานสูงสุดที่ 86,084 ใบต่อวินาที ในขณะที่ตัวเลือกการจัดเก็บแบบถาวรเช่น Sled และ SQLite ให้ประสิทธิภาพในระดับที่น่าพอใจระหว่าง 22-43 พันใบต่อวินาที เวลาในการสร้างหลักฐาน (proof generation) แตกต่างกันอย่างมาก โดยที่การจัดเก็บในหน่วยความจำสร้างหลักฐานเสร็จในน้อยกว่า 600 นาโนวินาที ในขณะที่โซลูชันที่ใช้ฐานข้อมูลใช้เวลาไมโครวินาที
การเปรียบเทียบประสิทธิภาพ
Storage Backend | add_leaves Throughput (Kelem/s) | Proof Generation Time |
---|---|---|
memory | 86.084 | 560.990 ns |
sled | 43.280 | 7.878 µs |
sqlite | 22.348 | 14.562 µs |
rocksdb | 18.280 | 34.391 µs |
ผลการทดสอบวัดประสิทธิภาพบนเครื่อง AMD Ryzen 7 7700 8-Core Processor พร้อม RAM ขนาด 64GB
การนำไปปฏิบัติทางเทคนิคจุดประกายคำถามเกี่ยวกับการทำงานพร้อมกัน
ลักษณะการทำงานแบบตามลำดับ (sequential) ในปัจจุบันของไลบรารี ทำให้เกิดคำถามเกี่ยวกับการทำงานพร้อมกัน (concurrent operations) นักพัฒนาแสดงความสนใจที่จะเข้าใจว่าการนำไปใช้อาจปรับขนาดไปสู่สภาพแวดล้อมแบบมัลติเธรดได้อย่างไร โดยเฉพาะอย่างยิ่งเมื่อพิจารณาถึงลักษณะการเพิ่มเติมเท่านั้นของ Merkle trees ผู้ดูแลไลบรารียอมรับว่ากำลังทำงานบนโมเดลการทำงานพร้อมกัน แต่แสดงความไม่แน่ใจเกี่ยวกับแนวทางที่เหมาะสมที่สุด
ประสิทธิภาพของการจัดเก็บยังปรากฏเป็นข้อพิจารณาหลัก โดยนักพัฒนาอภิปรายว่าการจัดเก็บด้วย SQL แสดงถึงการออกแบบที่เกินความจำเป็น (over-engineering) สำหรับสิ่งที่โดยพื้นฐานแล้วเป็นโครงสร้างข้อมูลแบบลำดับชั้นหรือไม่ บางท่านแนะนำว่าแนวทางแบบไฟล์ที่เรียบง่ายกว่าโดยใช้เลย์เอาต์มาตรฐานอาจให้ลักษณะประสิทธิภาพที่ดีกว่าสำหรับกรณีใช้บางอย่าง
การพัฒนาแบ็กเอนด์การจัดเก็บแบบ Async ที่กำลังดำเนินอยู่ บ่งชี้ถึงวิวัฒนาการของไลบรารีไปสู่รูปแบบ I/O สมัยใหม่ แม้ว่าการนำไปปฏิบัติเฉพาะจะยังอยู่ระหว่างการอภิปราย ชุมชนดูเหมือนกระตือรือร้นที่จะเห็นว่าไลบรารีจะปรับตัวให้เข้ากับโมเดลการเขียนโปรแกรมแบบอะซิงโครนัส ซึ่งเป็นเรื่องปกติในแอปพลิเคชันเครือข่ายอย่างไร
ประสิทธิภาพการจัดเก็บข้อมูลสำหรับ 1,000,000 Leaves (ความลึก 32)
Storage | การใช้พื้นที่ดิสก์ |
---|---|
sled | 290.00 MiB |
rocksdb | 183.27 MiB |
sqlite | 159.18 MiB |
อนาคตของโครงสร้างข้อมูลการเข้ารหัสลับ
ในขณะที่การอภิปรายยังคงดำเนินต่อไป เป็นที่ชัดเจนว่า Merkle trees ครอบครองพื้นที่เฉพาะทางแต่สำคัญในการออกแบบระบบกระจายศูนย์ การนำไปปฏิบัติด้วยภาษา Rust ใหม่นี้แสดงถึงทั้งความสำเร็จทางเทคนิคและตัวเร่งปฏิกิริยาสำหรับการทบทวนอีกครั้งว่าการมีโครงสร้างเหล่านี้ให้คุณค่าที่แท้จริงในสถานที่ใด โฟกัสของชุมชนเกี่ยวกับการประยุกต์ใช้ในทางปฏิบัติที่นอกเหนือจากบล็อกเชน บ่งชี้ถึงความสมบูรณ์ในวิธีที่นักพัฒนาจัดการกับพื้นฐานการเข้ารหัสลับ – ไม่ใช่ในฐานะโซลูชันที่กำลังมองหาปัญหา แต่เป็นเครื่องมือที่มีจุดแข็งเฉพาะสำหรับสถานการณ์เฉพาะ
การออกแบบแบบแยกส่วนของไลบรารี ซึ่งอนุญาตให้ใช้แบ็กเอนด์การจัดเก็บและฟังก์ชันแฮชที่แตกต่างกัน สะท้อนให้เห็นถึงความเข้าใจที่ว่าขนาดเดียวไม่สามารถใช้ได้ทั้งหมดในระบบกระจายศูนย์ ขณะที่นักพัฒนายังคงสำรวจกรณีใช้ ตั้งแต่ความโปร่งใสของใบรับรองไปจนถึงระบบไฟล์แบบกระจายศูนย์และบันทึกการตรวจสอบ การสนทนาเกี่ยวกับ rs-merkle-tree ทำหน้าที่เป็นจุลภาคของแนวโน้มที่กว้างขึ้นในการเขียนโปรแกรมระบบ – การสร้างสมดุลระหว่างประสิทธิภาพ ความยืดหยุ่น และประโยชน์ใช้สอยในทางปฏิบัติ
อ้างอิง: rs-merkle-tree