云存储硬核技术内幕——小结(下)

2022-08-04 16:03:31 浏览数 (1)

在这段时间里,我们小结了云存储的基本知识、块存储和对象存储的基本实现,以及如何让块存储和对象存储为云计算的基本单位——虚拟机,提供存储服务。

在云计算时代,由于需要访问存储的计算节点迅速增加,传统的FC网络扩展性能有限,同时,集中式存储控制器也难以应对无限扩展的计算节点的IO请求,因此,需要构建分布式的存储系统,利用分布式的存储节点扛住海量的并发存储请求,各个节点与客户端之间通过以太网/TCP-IP互联互通,以实现近乎无穷大的可扩展性。

最常见的分布式存储系统是Ceph。Ceph可以提供块存储、文件存储和对象存储三种服务方式。

传统的块存储,客户端(initiator)与服务器端(target)通过TCP协议通讯。由于TCP是点对点的,即使后端的存储节点为分布式的,target(又称为iscsi网关)本身也会成为性能扩展的瓶颈。Ceph的解决之道是在每台宿主机上安装客户端(如QEMU的RBD Driver),直接将来自各个客户端(VM)的IO请求分发到目标存储节点的目标磁盘。

为了使得IO请求尽可能地均衡发送到集群中的各个磁盘,Ceph将每个块切分为2MB或1MB大小的object,每个object切分为4KB/8KB/16KB的PG。

对于最常见的三副本存储,每个PG对应到3个物理磁盘,主副本所在的节点会将数据向另外两个副本复制。当一个副本所在的磁盘损坏,另外两个副本会发起复制。

为了提升分布式存储的性能,Ceph支持利用高速SSD/NVMe存储作为缓存,提升IO性能,降低时延。这种缓存背后的原理,叫时间局部性和空间局部性。

然而,在企业级和运营级的场景中,Ceph也有着难以逾越的限制,如高可用性、扩展性、资源利用效率等方面,都影响了Ceph承载生产系统。因此,各大云运营商在借鉴Ceph的基础上,都自行开发了分布式存储引擎,如腾讯云的CBS等,通过控制集群规模及引入云原生仲裁等手段实现高可靠的块存储集群。

当然,块存储在作为虚拟机系统盘或高性能数据库存储等场景,能发挥出自己全部的小宇宙,但在低频归档存储、跨越互联网的存储访问、需要断点续传或并发传输、多版本管理、根据标签筛选内容以及传输加密等场景,还需要更合适的存储服务。云对象存储(Cloud Object Storage)就是完美适应这一场景的存储服务产品。

对象存储的访问方式是HTTP。由于HTTP是基于TCP/IP的,只要IP可达,用户可以从全球任意位置访问对象存储桶中的内容,基于HTTPS(TLS)的加密机制可以保障数据传输的安全以及双方身份的安全性,而HTTP的断点续传功能可以在让用户不必担心传输中断的同时,也解决并发传输问题。

作为分布式存储系统,对象存储一般使用一致性哈希算法,实现存储池的弹性扩容,同时还可以利用内建的key-value数据库实现多版本管理和根据标签筛选内容的功能。

为了让分布式对象存储具有更高的业务可用性和数据持久性,可以让分布式对象存储跨AZ部署,在两个AZ各建立2副本,总共4副本,这样实现成本与收益的平衡。

在云计算进入容器时代后,由于容器本身固有特性,为了让容器运行中需要持久化存储的数据,在容器被销毁后不丢失,需要为容器挂载持久化存储。Kubernetes提供了PVC/PV和StorageClass两种为容器挂载持久化存储的方法,并且可以通过CSI (Container Storage Interface)实现调用第三方存储的接口,对存储卷进行创建/销毁/扩容/快照等操作。

容器时代对云存储的另一个挑战是由于容器的快速拉起和销毁需求,以及容器实例比起虚拟机来又出现了数量级的提升,需要更低的读写时延和更多的队列。因此,基于持久化SSD盘直接挂接到PCIe总线,以绕开南桥-SATA控制器或HBA卡从而缩短IO路径的思路,工程师们创造了NVMe盘。NVMe盘在成本增加不多的前提下大大提升了存储的时间响应特性,迅速成为了闪存的主流。

在NVMe盘的普及后,单盘IO进入准百万数量级,为避免每次IO操作需要从用户态切换到内核态,造成昂贵的CPU时间用在等待中,Intel发布了SPDK (Storage Performance Develop Kit),以类似DPDK的机制,提供用户态驱动,轮询机制,内存零拷贝技术等机制,并利用Linux的大页机制来提升NVMe本地盘的读写性能。而在远端的分布式存储上,工程师们又利用NVMe Over Fabric技术,特别是NVMe Over RoCE的实现,将NVMe盘的性能发挥到极致。

未来在Persistent Memory (SCM)普及后,云存储的性能还会有进一步的提升。

0 人点赞