LiteIO
LiteIO 是一个云原生块设备服务,使用多种存储引擎(包括SPDK和LVM)来实现高性能。它专为超融合架构下的Kubernetes设计,可以在整个集群中进行块设备配置。
特点
- 高性能:LiteIO的数据引擎基于SPDK构建,使用NVMe-over-Fabric协议直接连接计算节点和存储节点。通过高效的协议和后端I/O轮询,LiteIO提供接近本地磁盘的高性能。
- 云原生:LiteIO通过CSI控制器和驱动程序与Kubernetes集成,提供云原生用户界面。用户可以使用PVC动态分配或销毁LiteIO卷。
- 易于设置:只需少量依赖(如Hugepages),LiteIO可以通过单个命令行快速设置。
- 超融合架构:LiteIO采用超融合架构,单个节点可同时作为前端和后端。初始化新集群不需要最小节点数。
动机
许多分布式数据密集型应用(如数据库)通常选择本地NVMe磁盘以获得高性能和成本效益,而不是使用像EBS这样的分布式磁盘服务。然而,这种偏好可能导致资源利用不平衡。例如,一个节点可能出现CPU或内存短缺,但仍有充足的存储资源可用。为解决这个问题,我们的目标是开发一个系统,能够有效利用这些分散的存储资源,同时保持接近本地磁盘的高性能。
架构
LiteIO由六个主要组件组成:
- Disk-Agent:安装在每个后端节点上,管理该节点的StoragePool。与数据引擎交互以创建和删除卷和快照。向中央控制报告StoragePool状态并收集卷指标,可作为Prometheus导出器暴露。
- Disk-Controller:了解集群中所有StoragePool和Volume。主要负责将请求的卷调度到合适的StoragePool。
- nvmf_tgt:基于SPDK的数据引擎,提供存储抽象和功能,如LVS(逻辑卷存储)、LVOL(逻辑卷)、aio_bdev、TCP传输上的NoF和NoF子系统。nvmf_tgt是可选的,但如果应用需要本地磁盘以外的存储则必需。LiteIO也支持Linux LVM作为数据引擎,适用于本地存储场景。
- nvme-tcp:一个内核模块,为NVMe over fabrics提供TCP传输。必须安装在计算节点上。
- CSI-Driver:实现K8S CSI的LiteIO CSI驱动程序,作为DaemonSet pod部署在计算节点上。使用nvme-cli工具连接到后端存储。
- CSI-Controller:处理PV创建和删除的中央服务。
总的来说,LiteIO的架构为云原生块存储提供了可扩展和高效的方法。通过利用多个组件和接口,LiteIO为各种存储场景提供了灵活可配置的解决方案。
快速开始
快速开始指南帮助您设置本地K8S集群并在其中部署LiteIO。
性能基准测试
LiteIO vs 原生磁盘
原生磁盘、LiteIO NoF和OpenEBS Mayastor的FIO性能结果(1个磁盘):(a) IOPS (b) 带宽。
单位:IOPS(K)
原生磁盘 | LiteIO | Mayastor | |
---|---|---|---|
4k-随机写-dq16 4jobs | 356.2 | 317.0 | 218.0 |
4k-随机写-dq1 1jobs | 62 | 18 | 15 |
4k-随机读-dq128 8jobs | 617.0 | 614.6 | 243.8 |
4k-随机读-dq1 1jobs | 11.7 | 8.5 | 7.6 |
128k-顺序读-dq128 4jobs | 24.9 | 24.8 | 19.7 |
128k-顺序写-dq128 4jobs | 15.6 | 15.5 | 15.4 |
单位:带宽(MB/s)
原生磁盘 | LiteIO | Mayastor | |
---|---|---|---|
4k-随机写-dq16 4jobs | 1459.6 | 1299.2 | 896.4 |
4k-随机写-dq1 1jobs | 255.6 | 76.1 | 63.1 |
4k-随机读-dq128 8jobs | 2528.0 | 2516.4 | 998.0 |
4k-随机读-dq1 1jobs | 47.8 | 34.6 | 31.1 |
128k-顺序读-dq128 4jobs | 3263.0 | 3271.0 | 2585.6 |
128k-顺序写-dq128 4jobs | 2037.6 | 2030.0 | 2021.4 |
LiteIO vs ESSD-PL3
4K混合随机读写(70%/30%)IOPS,1个作业
单位:IOPS(K)
队列深度 | ESSD-PL3 | LiteIO |
---|---|---|
1 | 5.0 | 6.0 |
4 | 20.9 | 23.4 |
16 | 83.3 | 84.9 |
128 | 206.1 | 333.9 |
256 | 206.4 | 426.2 |
目标场景
LiteIO不是传统的通用分布式存储系统。它最适合需要类似本地磁盘高IO性能的用户。例如,分布式数据库和AI训练作业受益于LiteIO提供本地和远程卷的能力。
LiteIO专为Kubernetes设计,允许用户利用所有节点上的所有存储。这使其非常适合需要在K8S环境中运行应用的用户。
然而,需要注意的是,LiteIO目前不支持数据复制。如果您的应用需要数据复制,请注意这在我们的未来开发路线图中。同时,建议您的应用有数据副本并能自行保证数据安全,或者您能容忍数据丢失。
高级主题
路线图
- Disk-Agent暴露指标服务
- SPDK卷复制
联系方式
微信群二维码