Step 3 of 8 - Storage
Pay for bytes, not boxes
One change drives the next three pages: the persistent state stops living on the node.
Cold tiering needs Plenum: block storage on the node has no colder place to keep a byte.
1 cluster x 10 GB = 10 GB of logical data becomes 60 GB of provisioned capacity.
| Step | Working | Result |
|---|---|---|
| Logical data | 1 cluster x 10 GB | 10 GB |
| Provisioned capacity | 10 GB x 6 bytes on disk per logical byte | 60 GB |
| Metered as provisioned | reserved capacity, billed used or not | 60 GB |
| Storage bill | every one of the 60 GB is on it | 100% |
3 Raft copies at 50% utilization (3/0.5 = 6), on top of the block store's own internal replication.
What reaches the bill
Block storage is provisioned: you size a disk and you pay for the disk. It isn't a setting alongside the layer, which is why switching to Plenum changes both at once.
The ratio is the point, not the size: the volume is the one you described on the front page, and every figure on the following pages follows it, including what a rebalance moves and what a dead node has to re-read.
Where the saving actually comes from
- Double replication eliminated. Hard links let all Raft replicas of a range share one copy, so Raft's 3x stops stacking on the storage layer's own replication. Plenum still replicates across zones.
- Local NVMe instead of network block storage. Reserved EC2 discounts run around 50%, EBS around 25%. Instance-local NVMe takes the better rate.
- Storage utilization. Provisioning storage independently of compute: about 50% to about 75%.
- Compute auto-scaling. Stateless KV nodes come and go freely: 10-15% average CPU to 30-45%.