frontendfs
play

FrontendFS Creating a userspace filesystem in node.js Clay Smith, - PowerPoint PPT Presentation

FrontendFS Creating a userspace filesystem in node.js Clay Smith, New Relic BUILDING A FILESYSTEM IN NODE.JS A file system (or filesystem) is a way of storing all data on a data storage device. Simple English Wikipedia BUILDING A FILESYSTEM


  1. FrontendFS Creating a userspace filesystem in node.js Clay Smith, New Relic

  2. BUILDING A FILESYSTEM IN NODE.JS A file system (or filesystem) is a way of storing all data on a data storage device. Simple English Wikipedia

  3. BUILDING A FILESYSTEM IN NODE.JS a ¡process userspace Kernel kernel Virtual ¡File ¡System EXT3 NFS Hardware

  4. BUILDING A FILESYSTEM IN NODE.JS a ¡process fuse ¡client userspace Kernel kernel Virtual ¡File ¡System EXT3 NFS FUSE Hardware

  5. BUILDING A FILESYSTEM IN NODE.JS fuse ¡client a ¡process userspace libfuse Kernel kernel Virtual ¡File ¡System EXT3 NFS FUSE Hardware

  6. BUILDING A FILESYSTEM IN NODE.JS fuse ¡client .js good news: node is great at I/O

  7. BUILDING A FILESYSTEM IN NODE.JS How to write a (virtual) filesystem in node.js CC ¡A ¡SA ¡https://www.flickr.com/photos/ewedistrict/25323526

  8. BUILDING A FILESYSTEM IN NODE.JS • Use the fuse-bindings github project • https://github.com/mafintosh/fuse-bindings • Implement required filesystem operations • Run your node.js code and mount on an existing directory. • Success?!?!

  9. BUILDING A FILESYSTEM IN NODE.JS read(filePath, fd, buf, len, pos, cb) { } write(filePath, fd, buf, len, pos, cb) { } create(filePath, mode, cb) { } open(filePath, flags, cb) { } getattr(filePath, cb) { } readdir(filePath, cb) { } Good ¡list ¡for ¡reference: ¡https://www.cs.hmc.edu/~geoff/classes/hmc.cs135.201001/homework/fuse/fuse_doc.html#function-­‑ purposes ¡

  10. BUILDING A FILESYSTEM IN NODE.JS Example: What does a file copy look like? getattr(/) getattr(/cat.jpg) create(/cat.jpg, 33188) getattr(/cat.jpg) write(/cat.jpg, 0, len: 65536, buf.length: 65536, pos: 0) write(/cat.jpg, 0, len: 65536, buf.length: 65536, pos: 65536) // ... getattr(/cat.jpg) release(/cat.jpg, 0)

  11. BUILDING A FILESYSTEM IN NODE.JS In-memory virtual filesystem backed by JS array (yikes)

  12. BUILDING A FILESYSTEM IN NODE.JS A 'file' is just an item in this array: Buffer()-backed var files = [ { name: 'readme.md', data: new Buffer('# test file\n'), } ];

  13. BUILDING A FILESYSTEM IN NODE.JS Let's rename the filename to be a hash! readdir() { // ... for (var i = 0; i < files.length; i++) { var buffer = files[i].data; var hash = hasha(buffer).substring(0, 12); files[i].name = `${hash}-${files[i].name}`; files[i].hasFingerprint = true; } }

  14. BUILDING A FILESYSTEM IN NODE.JS Like gzip? releaseFile(filePath, fd) { // Buffer is a WritableStream() var buffer = this.files[fileIndex].data.getContents(); zlib.gzip(buffer, function(error, result) { // create file if compression succeeded. }); }

  15. BUILDING A FILESYSTEM IN NODE.JS CC ¡A ¡SA ¡www.flickr.com/photos/libertinus/9231731038 ¡ Performance profiling

  16. BUILDING A FILESYSTEM IN NODE.JS Benchmarking disk or file system IO performance can be tricky at best. James Coyle

  17. BUILDING A FILESYSTEM IN NODE.JS dd: "The Easy Route" • time sh -c "dd if=/dev/zero of=./in- memory/tst.tmp bs=4k count=1000 && sync" • 409600 bytes written 1000 times... • Result: 3 mb/s (node, FuSE fs) 777827192

  18. BUILDING A FILESYSTEM IN NODE.JS tl;dr - use for fun dev tools, exporting APIs, system learnings

  19. BUILDING A FILESYSTEM IN NODE.JS see also... • https://github.com/Munter/fusile • ^ the "real" frontendFS • https://www.npmjs.com/package/mount-url • github.com/mafintosh/torrent-mount

  20. BUILDING A FILESYSTEM IN NODE.JS thanks! @smithclay require('afterparty') - tomorrow at New Relic PDX. https://bit.ly/nodeparty

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend