Edge and fog computing have grown popular as IoT deployments become wide-spread. While application composition and scheduling on such resources are being explored, there exists a gap in a distributed data storage service on the edge and fog layer, instead depending solely on the cloud for data persistence. Such a service should reliably store and manage data on fog and edge devices, even in the presence of failures, and offer transparent discovery and access to data for use by edge computing applications. Here, we present Elfstore, a first-of-its-kind edge-local federated store for streams of data blocks. It uses reliable fog devices as a super-peer overlay to monitor the edge resources, offers federated metadata indexing using Bloom filters, locates data within 2-hops, and maintains approximate global statistics about the reliability and storage capacity of edges. Edges host the actual data blocks, and we use a unique differential replication scheme to select edges on which to replicate blocks, to guarantee a minimum reliability and to balance storage utilization. Our experiments on two IoT virtual deployments with 20 and 272 devices show that ElfStore has low overheads, is bound only by the network bandwidth, has scalable performance, and offers tunable resilience.
Due to the increasing number of applications (and their data) being placed on mobile devices, access to dependable storage is becoming a key issue in mobile system design -- and cloud storage is becoming an attractive solution. However, this introduces a number of new issues related to unpredictable wireless network connectivity and data privacy over the network. In this article we present RFS, a wireless-friendly network file system for mobile devices and the cloud. RFS provides deviceaware cache management and client-driven data security and privacy protection. We implement the RFS client in the Linux kernel and the RFS server with Amazon S3 cloud storage, and we employ two new optimizations: server prepush (a server-side data pre-fetching mechanism) and client reintegration (synchronizing a mobile device's cache with the cloud). The empirical results over wired, WiFi and 3G networks show that RFS achieves good performance compared to Coda and FScache, and it reduces network activity visibly. Further, the privacy overhead is acceptable when RFS is run over wireless networks. We present a case study of booting Android over RFS, thereby demonstrating the ability for RFS to host a full mobile system. Overall, RFS can deliver a good user experience under undependable network conditions, allowing mobile users to seamlessly, and safely, use the cloud for data storage.