- FUSE फ़ाइलसिस्टम ड्राइवर को kernel module की ज़रूरत के बिना लिखने देता है
- NTFS, SFTP, S3 जैसे विभिन्न फ़ाइलसिस्टम client इसका उपयोग करते हैं
- WikipediaFS की तरह ऐसी चीज़ें भी बनाई जा सकती हैं जो वास्तविक फ़ाइलसिस्टम नहीं हैं
- लेकिन FUSE के साथ development करना असुविधाजनक है
- 2 API में से चुनना पड़ता है: Low-Level और High-Level
- 2 असंगत API version: libfuse2 और libfuse3
- API लगातार थोड़ी-थोड़ी बदलती रहती हैं (
FUSE_USE_VERSION)
- Mac और Windows पर यह native नहीं है, इसलिए MacFuse, WinFuse जैसे third-party driver इंस्टॉल करने पड़ते हैं
- हम (XetHub) इमेज dataset के अलग-अलग version को S3 command इस्तेमाल किए बिना व्यक्तिगत laptop से आसानी से access करने योग्य बनाना चाहते थे
- "क्या हम एक सचमुच cross-platform userspace file system बना सकते हैं?" इस सवाल से हम NFSv3 तक पहुँचे
NFS
- NFSv3 20 साल पुराना network file system protocol है, जो बहुत सरल और व्यापक है, इसलिए लगभग हर operating system में default रूप से implement किया गया है
- सुंदर और सरल design principles
- सर्वर पूरी तरह stateless होता है
- NFS server सरल होता है और NFS client स्मार्ट होता है
- सरल cache consistency rules (server cache policy को define नहीं करता; client अपनी ज़रूरत के अनुसार संभालता है)
- NFS client जानता है कि वह network के पार बात कर रहा है
- व्यवहार में performance भी बहुत अच्छी है
- संक्षेप में, FUSE की जगह localhost NFS का उपयोग करके userspace file system लागू करने से performance और resiliency अधिक आसानी से मिल सकती है
- यदि server protocol को एक बार implement कर लिया जाए, तो मौजूदा caching और 20 वर्षों में मज़बूत हुई सुविधाओं का सीधा लाभ लिया जा सकता है
XetHub में NFS का उपयोग कैसे किया जाता है
- native cross-platform, userspace file system implementation विकसित की
- kernel driver के बिना user machine पर बड़े dataset mount किए जा सकते हैं
- जैसे 660GB Llama 2 model को mount करना, या DuckDB query के साथ बड़े Parquet file का विश्लेषण करना
- Linux, Mac और Windows Pro या उससे ऊपर के version पर support (Windows Home पर काम नहीं करता)
- Rust में लिखा गया NFS server nfsserve GitHub पर सार्वजनिक है
- read performance काफ़ी अच्छी है, और write काम करता है, लेकिन अभी optimization की ज़रूरत है
4 टिप्पणियां
शीर्षक के उलट, इसमें यह नहीं बताया गया है कि आखिर इसे Rust में लिखने की वजह क्या थी।
मूल लेख का फोकस यह है कि हमने अपना खुद का NFS सर्वर क्यों बनाया... लेकिन लगता है कि
Rustजैसे लोकप्रिय कीवर्ड को छोड़ा नहीं जा सकता था, इसलिए उसे शीर्षक में डाल दिया गया है :-)लगता है कि मूल लेख का फोकस यह नहीं है कि इसे Rust में क्यों लिखा गया, बल्कि यह है कि FUSE की जगह NFS क्यों चुना गया।
अरे, अब ध्यान आया कि सिर्फ़ यह कहने के अलावा कि यह Rust होने की वजह से तेज़ है, और कुछ था ही नहीं। मैंने बिना ज़्यादा सोचे-समझे सारांश कर दिया था।