在上期,我们提到了,以NFS,CIFS(SAMBA)为代表的资本主义时代的存储技术,虽然实现了远端主机跨越互联网访问共享的数据,极大地提升了生产力,但集中式存储主控(俗称机头)的处理能力成为了IO和吞吐能力的瓶颈,正如资本主义生产关系下,生产资料私有制约束了生产力的进步。
在早期,工程师们的经验是,每1GHz每Core的计算力,应当配置1K IOPs能力。这样的经验数据在2010年以前大致上是适用的,但随着Intel Xeon处理器从Xeon Legacy的8核心演进到现在的28核心56线程,理论上单台2路服务器有可能需要配置300K以上的IOPS的能力。显然,在100台服务器的小型数据中心中,即使采用了SSD固态盘等高性能存储介质,传统集中式存储的性能,也已经成为了瓶颈。
如图,传统的FC-SAN存储系统,虽然控制器(机头)具备一定的扩展性,但节点数量基本不可能超过32的限制(想一想,为什么?)
我们知道,对于分布式系统,如果期望它是一个可无限扩展的系统,那么,理论上要尽可能多地将每个组件都设计为分布式的。这样一来,分布式存储系统就呼之欲出了。
分布式存储本质上是将IO分散到集群的多个节点上,节点使用通(pian)用(yi)的x86服务器构建,节点之间采用通(pian)用(yi)的以太网互联互通。
如下图所示:
由于以太网的高度可扩展性(目前单机框可以支持700+个400G/100G高速端口,单Fabric可支持2万个以上25G端口完全无阻塞交换),理论上分布式存储的容量可以无限扩展。
所以,正如社会主义社会打破了资本主义下生产资料私有制的界限,构建了社会主义大生产体系一样,分布式存储能够让理论上无限扩展的节点彼此协作,从而实现IO能力和吞吐能力的无限扩展。
也正如社会主义在初级阶段,生产力并不能完全满足人民群众的物质需求一样,一开始的分布式存储系统的性能和稳定性,与FC SAN存储存在一定的差距,这是受到机械盘/SATA SSD磁盘天生的局限性,TCP/IP协议的局限性以及Linux操作系统的局限性导致的。也正是由于这些原因,催生了分布式存储向共产主义时代进军——
首先,是NVMe PCIe SSD盘的出现。
NVMe是“Non-Volatile Memory express”的缩写,指的是非易失性存储接口。它可以通过PCIe直通CPU,大大降低时延,提升读写效率,单盘吞吐可达GBps级别,IO随机写可以达到数百K IOps。
而“傲腾”SCM(Storage Class Memory)则可以让SSD像DRAM一样挂载在系统的DRAM接口上工作,IO路径更短,读写IOPS可以到1M以上,读延迟在1us以内,写入速度可达6GB/s。
固态存储的演进突破了机械磁盘性能的瓶颈,但另一个问题随之而来:
无论是NVMe SSD还是SCM,对它的每一次IO,都需要调用驱动程序,也就是进入操作系统内核。
我们知道,Linux的操作系统内核需要使用syscall()调用,在Intel体系架构下调用INT 80中断,其开销是很大的,可达到1us级别。那么,对于百万IO,仅仅在系统中断的开销方面就可以吃掉一个CPU内核/线程的全部时间,也就是说,我们需要对操作系统这样的上层建筑做一次革命。
Intel考虑到这一点,重写了内核中的经典驱动,将其运行在用户态,这就是SPDK(Storage Performance Development Kit )和PMDK(Persistent Memory Development Kit),让分布式存储软件能够绕开内核,直接访问到NVMe和SCM,使得上层建筑不再束缚生产力的发展。
在NVMe/SCM,SPDK/PMDK的加持下,分布式存储进入了共产主义社会,生产力高度发达,性能与容量可接近无限扩展以及可按需分配的存储IO能力。
事实上,最新一代公有云,以及与其同源的企业专有云计算产品,支持基于NVMe+SPDK的高性能分布式存储,已经成为了事实标准。而开源社区也维护着一系列的相关项目,如Ceph,HDFS,Openstack swift,Kubernetes CSI等……
后面我们也将展开为大家介绍这些技术的来龙去脉。敬请继续关注。