The Infinit storage platform is composed of several layers, from high-level utilities, customizable storage logics and an underlying key-value store. Even though many key-value store projects exist, most of them are unsuitable to the most demanding applications. Infinit's key-value store takes a different approach, relying on a decentralized architecture and an per-block quorum-based consensus algorithm.
4. the
PERSISTENCE
Docker has gained in popularity mainly through the use of stateless
applications. Developers and enterprises now require statefulness.
A modern storage platform should be both elastic (scalable and fault
tolerant) and customizable to accommodate various data flows.
7. the
CLUSTERING
Infinit’s key layer is its clustering mechanism whose role is to aggregate
storage capacity from a set of nodes.
This layer exposes a key-value store built on top of a value store.
VALUE STORE
KEY-VALUE STORE
9. the
LOGICS/INTERFACES
On top of the key-value store, a number of logics and interfaces are
provided, each with their tradeoffs from usage, performance etc.
File System
Hierarchical organizations with concurrent
accesses from multiple nodes.
Such a storage logic can be accessed through
FUSE/Dokan or an NFS gateway for instance.
#expensive #legacy #posix
Object Storage
Unstructured data through binary large
objects (blobs).
Accessible through proprietary APIs such as
Amazon S3, Google Cloud Storage, OpenStack
Swift etc.
#simple #developers
Block Device
Raw partition with concurrent accessed
limited to a single node.
Often accessed through standard protocols like
iSCSI, NBD etc.
#fast
10. the
EXAMPLE
database
block (iSCSI)
512-byte block size
replication
file (NFS)
replication
versioning
deduplication
object (Amazon S3)
1-megabyte block size
datacenter aware
erasure coding
compression
ext4
im
ages/videos
configurationfiles
content
Below is an example of a micro-service application relying on a policy-based
storage platform providing multiple interfaces: Wordpress.
11. the
DEPLOYMENTS
Hyperscale
Deploy your storage infrastructure for it
to evolve and scale independently of
your cluster of applications.
#powerful #operators
Hyperconverge
Your storage infrastructure scales along
with your cluster of applications (Swarm,
Kubernetes etc.).
#simple #developers
13. the
INTRODUCTION
Key-value store is a fundamental construct for distributed systems, often
used to store and share configurations, logs and metadata in general.
14. the
PROBLEM
While many applications have benefited from such key-value store over the
past years, it hasn’t been the case for some more demanding applications.
This comes from the distribution model commonly used: manager/worker.
manager manager
worker
worker
worker
15. the
LIMITATIONS
This model implies a number of limitations, in particular when the overlying
application puts the manager under pressure e.g in the data path.
Scalability Resilience Security Performance
16. the
APPROACH
Infinit’s key-value store, named memo, takes a different approach by relying
on a decentralized architecture. Such a model brings a number of benefits…
node
node
node
17. the benefit:
SCALABILITY
Decentralized architectures are scalable by nature with all the nodes
assuming both manager and worker roles.
Overlay Network
(not to be confused with Docker’s)
Distributed Hash Table
18. the benefit:
RESILIENCE/PERFORMANCE
Because of the natural distribution between the available nodes, it is more
difficult to overflow the system.
Also, the more nodes in the system, the faster!
19. the benefit:
SECURITY
No central authority means that it is harder to take over the whole system.
Network Protocol Portion of the Network
27. the
KEY-VALUE STORE
Pick a key, insert a value. Simple!
- Insert(Key, Value) -> Boolean
- Fetch(Key) -> Value
- Update(Key, Value) -> Boolean
- Upsert(Key, Value) -> Boolean
- Delete(Key) -> Boolean
28. the
VALUE STORE
Insert a block, get an address. Weird!
“foo”
Key/Value vs Address/Block Mutable vs Immutable Block
Two families of functions.
BLOCK GENERATION
- MakeImmutableBlock(payload) -> (Address, Block)
- MakeMutableBlock(payload) -> (Address, Block)
STORE MANIPULATION
- Insert(Block) -> Boolean
- Fetch(Address) -> Block
- Update(Block) -> Boolean
- Delete(Address) -> Boolean