Distributed block storage with Niova

With Niova, our engineers worked on every layer of a distributed block storage platform, from the Raft-replicated metadata control plane to native Linux block devices and Kubernetes volumes.

What we built

Where we contributed
Kubernetes
Go CSI driver with the full gRPC surface. The block-serving process runs as a host-level systemd unit, so it survives CSI pod restarts without losing in-flight I/O.
Kernel
Linux ublk integration exposes distributed storage as native block devices, shipped as a DKMS driver.
Control plane
Raft-replicated, RocksDB-backed metadata service with leader election, leases and a stateless proxy tier.
Data protection
Chunk-level replication and erasure coding, background GC and compaction, S3-backed cold tiering.
Storage engine
Single-threaded io_uring reactor with a custom coroutine model and a hand-written assembly context switch.
Devices
Raw NVMe admin commands issued directly through io_uring passthrough.

How it was checked

Formal software modelling with TLA+

Protocol-critical logic is modelled and model-checked with TLC, with internal guides for translating C into formal models.

Deterministic system tests

An Ansible framework stands up multi-node control-plane clusters and runs hundreds of parametrised failure scenarios, with fault injection built into the storage engine itself.

Integrity under failure

Kill a storage node mid-write, let chunk recovery run, re-validate every block checksum. Checked automatically in CI.

Storage slower than your compute?

Send us your topology, workload and a benchmark run. We will get back to you.