20 คะแนน โดย GN⁺ 2025-04-18 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • 3FS คือระบบไฟล์แบบกระจายโอเพนซอร์สประสิทธิภาพสูงที่พัฒนาโดย DeepSeek รองรับการประมวลผลข้อมูลขนาดใหญ่และปริมาณงานสูง
  • แม้จะทำงานเหมือนระบบไฟล์ทั่วไป แต่เบื้องหลังคือการกระจายจัดเก็บข้อมูลไว้บนหลายเครื่อง โดยมีชั้น abstraction ที่ทำให้ผู้ใช้ไม่จำเป็นต้องรับรู้รายละเอียดเหล่านั้น
  • ใช้งานผ่าน องค์ประกอบหลัก 4 ส่วน (Meta, Mgmtd, Storage, Client) โดยแยกหน้าที่ด้านเมทาดาทา การจัดการโหนด การเก็บข้อมูลจริง และการประมวลผลคำขอของผู้ใช้ออกจากกัน
  • บรรลุทั้งความสอดคล้องแบบเข้มงวดและการทนต่อความขัดข้องด้วยอัลกอริทึม CRAQ พร้อมส่งต่อคำขอเขียนอย่างปลอดภัยผ่านโครงสร้างแบบเชน
  • 3FS แตกต่างจากระบบไฟล์แบบกระจายอื่น ๆ ในด้าน ความพร้อมใช้งานจริง และ การขยายประสิทธิภาพ

3FS คืออะไร?

  • 3FS ย่อมาจาก Fire-Flyer File System เป็น ระบบไฟล์แบบกระจาย ที่ DeepSeek เปิดเผยสู่สาธารณะ
  • เปิดตัวพร้อมกับสัปดาห์เผยแพร่โอเพนซอร์สของ DeepSeek
  • ภายนอกดูเหมือนพาธไฟล์ทั่วไป แต่จริง ๆ แล้วเป็น abstraction ที่นำเสนอข้อมูลซึ่งถูกกระจายเก็บอยู่บนหลายเครื่อง

ระบบไฟล์แบบกระจายคืออะไร?

  • สำหรับผู้ใช้ มัน ดูเหมือนระบบไฟล์ภายในเครื่อง แต่เบื้องหลังจะกระจายเก็บข้อมูลไว้บนหลายเซิร์ฟเวอร์
  • ตัวอย่าง: พาธ /3fs/stage/notes.txt ดูเหมือนเป็นไฟล์เดียว แต่จริง ๆ แล้วถูกแบ่งเก็บอยู่บนหลายเซิร์ฟเวอร์
  • ผู้ใช้สามารถใช้คำสั่งอย่าง mkdir, cat ได้เหมือนเป็นไฟล์ปกติ

ทำไมจึงใช้ระบบไฟล์แบบกระจาย?

  • รองรับ ข้อมูลขนาดใหญ่ (ระดับเพตะไบต์) และ throughput สูง
  • รับประกันความเสถียรด้วย การทนต่อความขัดข้อง (fault tolerance) และ ความซ้ำซ้อน (redundancy)
  • ตัวอย่างการใช้งานจริง:
    • เฟรมเวิร์กประมวลผลแบบขนานอย่าง HDFS + Spark
    • การทำ checkpoint ใน ML training pipeline
    • Colossus ของ Google
    • Haystack ระบบจัดเก็บรูปภาพของ Meta
    • ตัวอย่างสตอเรจสำหรับ AI: JuiceFS vs CephFS

องค์ประกอบของ 3FS

  • ประกอบด้วยโหนดหลักทั้งหมด 4 ประเภท

Meta

  • จัดการ เมทาดาทา เช่น พาธไฟล์ คุณสมบัติ และตำแหน่ง
  • ประมวลผลคำขอจากไคลเอนต์ผ่าน RPC (open, stat, close เป็นต้น)
  • ข้อมูลเมทาจะถูกเก็บไว้ใน FoundationDB
  • Inode เก็บข้อมูลอย่างขนาดไฟล์ เจ้าของไฟล์ เป็นต้น
  • DirEntry ใช้เชื่อมพาธกับ inode (จึงอาจมีหลายพาธที่ชี้ไปยังไฟล์เดียวกันได้ คล้าย symbolic link)

Mgmtd

  • รับผิดชอบ การลงทะเบียนโหนดและตรวจสอบสถานะ ของคลัสเตอร์
  • เมื่อบูต โหนดจะลงทะเบียนตัวเองและส่ง heartbeat เป็นระยะ
  • ทำหน้าที่เป็น เราเตอร์ศูนย์กลาง ทำให้ไม่จำเป็นต้องรักษาการเชื่อมต่อระหว่างโหนดโดยตรง
  • จัดการข้อมูลตั้งค่าที่ใช้สร้างเชน CRAQ ด้วย

Storage

  • รับผิดชอบการเก็บข้อมูลจริง
  • จัดการบล็อกดิสก์ผ่าน ChunkEngine ที่พัฒนาด้วย Rust
    • ติดตามขนาดบล็อกดิสก์ ออฟเซ็ต checksum เวอร์ชัน เป็นต้น
    • ผู้ใช้ไม่ได้โต้ตอบกับบล็อกโดยตรง แต่เข้าถึงผ่านอินเทอร์เฟซที่จัดเตรียมไว้
    • เมทาดาทาถูกเก็บไว้ใน LevelDB
  • มี worker หลายประเภท
    • AllocateWorker จัดสรรบล็อกใหม่
    • PunchHoleWorker เรียกคืนบล็อกที่ไม่ได้ใช้งาน
    • AioReadWorker จัดการการอ่านแบบ asynchronous ผ่านคิว io_uring
  • ระหว่างการเขียนข้อมูล จะ ส่งต่อไปยังโหนดถัดไป ตามเชน CRAQ

Client

  • ประมวลผลคำขอของผู้ใช้และสื่อสารกับโหนดอื่น ๆ
  • ลำดับการทำงาน:
    • สอบถามตำแหน่งโหนดจาก Mgmtd
    • ส่งคำขอเกี่ยวกับไฟล์ไปยัง Meta
    • รับส่งข้อมูลกับ Storage

อัลกอริทึม CRAQ

  • ย่อมาจาก Chain Replication with Apportioned Queries และให้ ความสอดคล้องแบบเข้มงวด (linearizability)
  • ลำดับการเขียน:
    • กระจายการเขียนจาก Head → Middle → Tail
    • ในขั้นกลางจะทำเครื่องหมายข้อมูลเป็น dirty (ยังอ่านไม่ได้)
    • เมื่อ commit ที่ Tail แล้ว จะกระจายสถานะ clean ย้อนกลับไปด้านหลัง
  • ลำดับการอ่าน:
    • ถ้าเป็น clean จะส่งคืนได้ทันที
    • ถ้าเป็น dirty จะส่งคำขอไปยัง tail เพื่อดึงข้อมูลล่าสุด

CRAQ ในมุมของประสิทธิภาพ

  • ความเร็วในการเขียนถูกจำกัดโดยโหนดที่ช้าที่สุด
  • หากมีการเข้าถึงข้อมูล dirty บ่อย คำขออ่านอาจไปรวมที่ tail ทำให้ เกิดคอขวดในการอ่าน
  • ตัวอย่าง: ประสิทธิภาพอาจลดลงใน Zipfian workload
  • ในคลัสเตอร์ที่มี 5 โหนด จะทำ replication 3 ชุดเพื่อลดการสูญเสียประสิทธิภาพเมื่อเกิดความขัดข้อง

ความแตกต่างจากระบบไฟล์แบบกระจายอื่น ๆ

  • แม้โครงสร้างจะคล้ายกัน แต่ มีจุดต่างในด้านการนำไปใช้จริงและแนวทางการพัฒนา
  • ปัจจัยที่ใช้เปรียบเทียบ:
    • เด่นใน workload แบบใด
    • ความยืดหยุ่นในการปรับประสิทธิภาพ
    • ความง่ายในการ deploy
    • ความสามารถในการขยาย throughput
    • การควบคุม latency ให้อยู่ใน SLO
    • ความน่าเชื่อถือ
  • รายละเอียดทางเทคนิค:
    • สาเหตุของคอขวดและวิธีจัดการ
    • มีการใช้ lock หรือไม่
    • โครงสร้างข้อมูลที่ใช้
    • ฮาร์ดแวร์เป้าหมาย
    • อัลกอริทึมทนต่อความขัดข้อง หรือ วิธีการแก้ไขข้อผิดพลาด ที่ใช้

หัวข้อถัดไปของซีรีส์บล็อก

  • มีแผนจะตรวจสอบคำกล่าวอ้างของ DeepSeek ผ่านการวิเคราะห์ประสิทธิภาพจริง
  • ประเด็นที่จะทบทวน:
    • คำกล่าวอ้างของ DeepSeek เกี่ยวกับ คอขวดของ FUSE
    • ความเป็นไปได้ในการทำซ้ำกราฟประสิทธิภาพ
    • การวิเคราะห์สถานการณ์ที่ประสิทธิภาพลดลง
    • ปัจจัยคอขวด (CPU, หน่วยความจำ, ดิสก์, เครือข่าย)
    • workload แบบใดที่ให้ประสิทธิภาพโดดเด่น
    • การวิเคราะห์เปรียบเทียบกับระบบเดิม
    • ความแตกต่างจากวิธีแก้ปัญหาของระบบเดิม
    • การพิจารณาความเป็นไปได้ในการปรับปรุงโดยตรง

แหล่งข้อมูลเพิ่มเติม

2 ความคิดเห็น

 
softer 2025-04-19

ก็เป็นปัญหาที่กำลังกังวลและคิดอยู่เหมือนกัน แต่นี่มัน..

 
GN⁺ 2025-04-18
ความคิดเห็นจาก Hacker News
  • S3FS เป็นระบบไฟล์เมทาดาทาที่ขยายขนาดได้ และถูกนำไปเปรียบเทียบกับระบบไฟล์แบบกระจายหลายตัว

    • มีทั้ง Collosus, Tectonic (Meta), ADLSv2 (Microsoft), HopsFS (Hopsworks), PolarFS (Alibaba)
    • S3FS ใช้ FoundationDB, Collosus ใช้ BigTable, Tectonic ใช้ KV store และ HopsFS ใช้ RonDB
    • จุดสำคัญของ S3FS คือ (1) รองรับไคลเอนต์ fuse ทำให้ใช้งานสะดวก และ (2) รองรับสตอเรจ NVMe จึงไม่ติดข้อจำกัดด้านดิสก์ I/O
    • HopsFS เพิ่ม hierarchical storage โดยเก็บข้อมูลล่าสุดไว้บน NVMe และข้อมูลสำหรับเก็บถาวรไว้บน S3
  • เมื่อต้องประเมินระบบเหล่านี้ ควรพิจารณาทั้งข้อจำกัดเชิงทฤษฎี ประสิทธิภาพ และข้อจำกัดในทางปฏิบัติ

    • ในทางทฤษฎี ระบบไฟล์แบบกระจายขนานอย่าง Lustre สามารถขยายได้ไม่สิ้นสุด
    • เพื่อประเมินประสิทธิภาพ จะคำนวณว่าด้วยโหนดที่มีดิสก์ขนาด X TiB จะได้พื้นที่เก็บข้อมูลและ throughput เท่าใด
    • เมื่อเทียบกับ FSx for Lustre แล้ว 3FS สามารถรันบน AWS ได้ถูกกว่าประมาณ 12-30%
    • ยังมีคำถามอยู่ว่าจะสามารถสร้างระบบไฟล์ให้มีขนาดตามที่ผู้คนต้องการใช้งานจริงได้หรือไม่
    • เข้าใจได้ว่า DeepSeek สร้างระบบเหล่านี้ขึ้นมาเองเพื่อให้ได้คุณสมบัติที่ต้องการ
    • หวังว่า Archil จะหา default ที่ดีกว่านี้ซึ่งคนส่วนใหญ่สามารถใช้งานได้โดยไม่ต้องดูแลคลัสเตอร์ขนาดมหึมา
  • สนใจการเปรียบเทียบกับ SeaweedFS

    • SeaweedFS ถูกใช้เก็บข้อมูลสภาพอากาศ และมีการใช้ข้อมูลราว 3 PB สำหรับการฝึก ML
  • มีคำถามว่าทำไมไม่ใช้ CephFS

    • CephFS ผ่านการทดสอบอย่างหนักในสถานการณ์จริง และพิสูจน์ความน่าเชื่อถือได้แม้ในระดับเพตะไบต์
    • เป็นโซลูชันโอเพนซอร์ส สามารถรันบนสตอเรจ NVMe ที่เร็วที่สุดได้ และทำ IOPS ได้สูงมากด้วยอินเตอร์คอนเน็กต์มากกว่า 10 กิกะบิต
  • มีคำถามเกี่ยวกับการเปรียบเทียบกับ JuiceFS

    • มีแผนจะรัน JuiceFS บน S3 Garage ในการตั้งค่า homelab ส่วนตัว
    • Garage รองรับแค่ replication และไม่รองรับ erasure coding หรือ sharding
    • เลือกเพราะการตั้งค่าดูเรียบง่าย
  • ในฐานะผู้ประกอบการรายเล็กและผู้ใช้ homelab คงไม่มีโอกาสต้องใช้ระบบไฟล์แบบกระจายขนาดใหญ่มาก

    • แต่อยากรู้เรื่องการสำรองข้อมูลและการกู้คืนเมื่อจัดการข้อมูลระดับเพตะไบต์
  • การตั้งค่าดูซับซ้อน แต่ยังไม่ชัดเจนว่าฟีเจอร์ใดจำเป็นต่อเวิร์กโหลด deep learning

    • ฟีเจอร์ที่ต้องการคือสตอเรจระดับเพตะไบต์, การอ่าน/เขียนแบบขนาน, และความซ้ำซ้อน
    • การทำให้เกิด consistency เป็นเรื่องยาก และในกรณีนี้ก็ไม่จำเป็น
  • มีคำถามว่าการปิดใช้งานระบบไฟล์แบบกระจายของ DeepSeek ทำได้ง่ายแค่ไหน

    • ตัวอย่างเช่น มหาวิทยาลัยในสหรัฐฯ อาจได้รับอนุมัติให้ใช้ DeepSeek เพื่อการวิจัย แต่ต้องมั่นใจว่าข้อมูลจะไม่ออกนอกระบบไฟล์ของคลัสเตอร์วิจัยภายใน
  • มีคำถามว่าสามารถจำลองสิ่งนี้ด้วยไดรฟ์ ZFS ที่กระจายอยู่บนหลายอุปกรณ์ได้หรือไม่