先回答在《云存储硬核技术内幕——小结(上)》最后留下的三个问题:
Q1、对于大量的小文件的存储,使用什么样的方案合适?
A1、可以利用对象存储的热数据存储解决,使用三副本甚至五副本保证性能。
Q2、对于监控视频这样的不常访问的大文件归档存储,使用什么样的方案合适?
A2、可以利用对象存储的冷数据归档存储解决,如纯机械盘+纠删码方案。
Q3、保存程序代码或共同协作的文档,使用什么样的方案合适?
A3、利用对象存储的多版本管理功能,可以方便地追溯每次对文件的修改。
在这段时间里,我们小结了云存储的基本知识、块存储和对象存储的基本实现,以及如何让块存储和对象存储为云计算的基本单位——虚拟机,提供存储服务。
在云计算时代,由于需要访问存储的计算节点迅速增加,传统的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副本,这样实现成本与收益的平衡。