People nowadays store more and more data and it’s necessary that they can access it reliably and easily. Cloud based data storages offer a solution to this problem by storing the user’s data on the internet, so it can be accessed from anywhere while they provide a certain level of security and reliability, that’s why these services enjoy undeniable popularity.
My goal was to design and implement a system that mends the possible errors in these services, furthermore increases the availability and security of the files. I try to achieve this by building a distributed system on the already available cloud storage services that stores files split into multiple fragments with adjustable level of redundancy.
The benefit of distributed redundant storage is that the system doesn’t rely on a single cloud storage, increasing the availability of the stored data. Also, a file is not stored in its entirety at a single cloud storage, so if someone were to gain unauthorized access to a storage server, the data stored there could not be used to decode the original files.
To handle distribution and redundancy I chose to use Random Linear Network Coding (RLNC). It’s used to encode a file generating multiple fragments with a given redundancy, so while decoding the file later (depending on the level of redundancy used) not all the generated fragments may be required.
The system also includes a Raspberry Pi used as a server working on the user’s home network. Its role is to relieve the clients connecting to the home network from the computational overhead and providing a cache functionality. The Raspberry Pi is an ideal solution for this function, because it has all the features of a regular computer, while it has a minimal power consumption enabling continuous operation.