- FUSE ช่วยให้เขียนไดรเวอร์ไฟล์ซิสเต็มได้โดยไม่ต้องมีเคอร์เนลโมดูล
- มีไคลเอนต์ไฟล์ซิสเต็มหลากหลายแบบใช้งาน เช่น NTFS, SFTP, S3
- ยังสามารถสร้างสิ่งที่ไม่ใช่ไฟล์ซิสเต็มจริง ๆ ได้ด้วย เช่น WikipediaFS
- แต่ FUSE ไม่ค่อยสะดวกต่อการพัฒนา
- ต้องเลือกจาก 2 API: Low-Level และ High-Level
- มี API 2 เวอร์ชันที่เข้ากันไม่ได้: libfuse2 และ libfuse3
- API เปลี่ยนไปเรื่อย ๆ ทีละนิด (FUSE_USE_VERSION)
- บน Mac และ Windows ไม่ได้เป็นเนทีฟ ต้องติดตั้งไดรเวอร์จากภายนอกอย่าง MacFuse, WinFuse ก่อนเท่านั้น
- เรา (XetHub) ต้องการให้เข้าถึงเวอร์ชันต่าง ๆ ของชุดข้อมูลภาพได้สะดวกจากโน้ตบุ๊กส่วนตัว โดยไม่ต้องใช้คำสั่ง S3
- จากคำถามว่า "จะสร้างไฟล์ซิสเต็มใน userspace ที่เป็น cross-platform อย่างแท้จริงได้ไหม?" จึงมาลงเอยที่ NFSv3
NFS
- NFSv3 เป็นโปรโตคอลไฟล์ซิสเต็มผ่านเครือข่ายที่มีอายุกว่า 20 ปี ซึ่งเรียบง่ายและแพร่หลายมาก จนแทบทุกระบบปฏิบัติการมีการติดตั้งมาให้โดยพื้นฐาน
- หลักการออกแบบที่เรียบง่ายและสวยงาม
- เซิร์ฟเวอร์เป็นแบบ stateless อย่างสมบูรณ์
- เซิร์ฟเวอร์ NFS ฉลาดน้อย ส่วนไคลเอนต์ NFS ฉลาดมาก
- มีกฎเรื่องความสอดคล้องของแคชที่เรียบง่าย (เซิร์ฟเวอร์ไม่กำหนดนโยบายแคช ส่วนไคลเอนต์จัดการได้ตามต้องการ)
- ไคลเอนต์ NFS รับรู้อยู่แล้วว่ากำลังสื่อสารข้ามเครือข่าย
- ในทางปฏิบัติให้ประสิทธิภาพที่ยอดเยี่ยมมาก
- สรุปคือ หากใช้ local host NFS แทน FUSE เพื่อสร้างไฟล์ซิสเต็มใน user mode ก็จะได้ทั้งประสิทธิภาพและความทนทาน (resiliency) ได้ง่ายกว่า
- เมื่อทำโปรโตคอลฝั่งเซิร์ฟเวอร์เพียงครั้งเดียว ก็สามารถใช้ประโยชน์จากระบบแคชเดิมและความสามารถที่ผ่านการปรับปรุงมานาน 20 ปีได้ทันที
วิธีที่ XetHub ใช้ NFS
- พัฒนาอิมพลีเมนเทชันไฟล์ซิสเต็มใน user mode แบบเนทีฟข้ามแพลตฟอร์ม
- เมานต์ชุดข้อมูลขนาดใหญ่บนเครื่องผู้ใช้ได้โดยไม่ต้องมีเคอร์เนลไดรเวอร์
- เช่น เมานต์โมเดล Llama 2 ขนาด 660GB หรือวิเคราะห์ไฟล์ Parquet ขนาดใหญ่ด้วย DuckDB query
- รองรับ Linux, Mac และ Windows Pro ขึ้นไป (Windows Home ใช้งานไม่ได้)
- เปิดซอร์สบน GitHub แล้วสำหรับ nfsserve ซึ่งเป็นเซิร์ฟเวอร์ NFS ที่พัฒนาด้วย Rust
- ประสิทธิภาพการอ่านค่อนข้างดี ส่วนการเขียนใช้งานได้แล้ว แต่ยังต้องปรับแต่งเพิ่มเติม
4 ความคิดเห็น
ต่างจากชื่อเรื่อง แต่กลับไม่ได้บอกไว้เลยว่าจริงๆ แล้วทำไมถึงเขียนด้วย Rust
ประเด็นหลักของต้นฉบับคือเหตุผลที่พวกเขาพัฒนาเซิร์ฟเวอร์ NFS ของตัวเองขึ้นมา...... แต่ดูเหมือนว่าจะใส่ไว้ในชื่อเรื่องเพราะพลาดคีย์เวิร์ดยอดนิยมอย่าง Rust ไปไม่ได้ :-)
ดูเหมือนว่าเนื้อหาต้นฉบับไม่ได้พูดถึงเหตุผลที่เขียนด้วย Rust แต่เป็นเรื่องว่าทำไมถึงเลือก NFS แทน FUSE มากกว่านะครับ
อ๊ะ พอมาคิดดูแล้วก็ไม่มีอะไรนอกจากบอกว่าเร็วเพราะเป็น Rust สินะ ผมสรุปไปแบบไม่ได้คิดเลย