Overview
Flexify.IO sits between your application and your data storages: your application sends requests to Flexify.IO, Flexify.IO does the magic and forwards the requests to one or more storages.
The magic includes:
- Converting storage access APIs, for example from S3 to Azure;
- Combining data from multiple storage into a single virtual storage;
- Distributing your data between multiple storages while your application keeps seeing it as a single virtual bucket;
- Copying or moving data between storages as you wish with no downtime or visible effect on your application;
- Improving performance as the data is delivered from the fastest available storage.
We do not store or modify your data in any way: if you don't need Flexify.IO anymore, you can always switch back to accessing your storage directly. By doing so, you will (obviously) lose Flexify.IO features.
Simple Configuration
In the simplest configuration you have just one S3-compatible storage in your Flexify.IO configuration.
Flexify.IO will simply relay all your requests to the storage of your choice.
While this configuration does not really give you any functionality or performance benefits, it's usable for testing your system configuration before proceeding to more advanced scenarios.
API Translation
Instead of a S3-compatible storage, you can add any other supported kind of storage, such as Microsoft Azure Blob Storage.
In this scenario Flexify.IO will transparently convert S3 protocol to Azure Blob protocol your application still works on S3, but in fact accessed data in Azure via Microsoft's protocol.
It can be very handy for migrating from Amazon Web Service to Microsoft Azure because you avoid a need to change your application code.
Multiple Storages
In the more advanced scenario, you add one or more storages to your Flexify.IO configuration.
This enables to unveil the full potential of Flexify.IO as it allows your application to work with all those storage simultaneously!
Each of the storages has its own set of objects, but (thanks to the magic) your application sees it as a single giant storage, with all objects combined:
- Read requests are directed to all storages, and the one that returned the latest version first is used read the object that is relayed to the client;
- List requests are directed to all storages and results are merged;
- Write requests are directed to the storage configured as default; and the key is removed from other storages.
The beauty of this solution is that you can change the default storage on the fly, re-directing all new data to the storage of your choice.
You can also move data between storages with no effect on your application at all – it can still see all storages combined.
Is performance affected?
We paid special attention to ensuring no significant effect on performance. With proper regions configuration (so that you don't send data across The Atlantic Ocean and back) you can expect delay of no more than a few milliseconds.
We achieve this by asynchronous implementation that starts relaying objects at the same time as they are being received, without waiting for the complete object to be transferred.
Moreover, in most cases you can in fact improve performance by making the fastest storage your preferable storage!
It's All About Cloud
Flexify.IO has been specifically designed and tested for object storage. Most cloud storages, such as Amazon S3 or Microsoft Azure Blob Storage, are object storages.
If you store your data locally on a disk or NAS, chances are that you're using block or file storage. Even though some try, block storage is not compatible with the cloud. That's why it's generally recommended to switch to object storage whenever you move your data to the cloud.
You still can mount object storage and see it as local disk or file share, but in this case special considerations should be paid to how your app accesses this data as this may kill performance (don't try this with databases).
Does Flexify.IO provide data storage?
No. Flexify.IO does not store your data. Instead, we are relaying your data requests to one or more 3rd party storages such as Amazon S3 or Microsoft Azure Blob Storage.