在理解云计算趋势下的数据库形态及技术趋势之前,需要先探讨云计算和数据库的本质。
云计算在本质上是将各类信息技术基础资源“池化”,将客户所需的计算、通信、存储资源纳入统一的资源池进行管理。用户在实际使用时,对于大型信息系统或信息基础设施的构建,用户无须自建机房、购买硬件设施、搭建基础网络、安装系统和软件等,极大地减少了前期的IT设施投入成本;同时,借助云计算资源的虚拟化和池化技术,用户拥有了基础设施弹性能力,能快速应对业务流量的变化。对于云服务提供商而言,规模化的资源供应、使用、运维和管理,也极大地提升了云服务提供商的技术、供应链管理等能力,从而形成了规模效应,大大提升了整体的资源利用率。
而对于数据库来说,可以从数据库的用户入手分析。用户使用数据库的目的,是希望借助数据库的计算和存储能力,完成数据的生产、存储、处理和消费的全链路过程。因此,从能力上来说,数据库系统必须要能为客户的数据生产、存储、处理和消费全链路提供功能性和非功能性需求支撑。传统的数据库系统软件是运行于冯·诺伊曼体系的硬件系统之上的。冯·诺伊曼体系的基本原理是“存储程序和程序控制”:“存储程序”是指计算机运行的代码和数据都要有特定的地方进行保存;“程序控制”是指计算机按一定的逻辑顺序存取指令并有效执行。对应到数据库系统软件之上,数据库管理系统的本质就是用户希望借助数据库管理系统提供的“计算+存储”能力,通过计算节点的计算能力对存储中的数据进行用户指定的分析和计算来获得计算结果,最终实现数据的应用。
从数据库系统的本质来看,计算和存储以及各组件间的通信能力是数据库系统必须具备的。因此,在云计算时代下,如何借助云计算提供的强大的计算、存储和通信能力,实现数据库系统在各个层面的高可用、高性能、弹性和高安全性是目前业界研究的重点。不同的架构与云计算架构的契合度是不同的。对于单机版数据库,可以安装在一台云厂商提供的云服务器上,其计算和存储能力受限于云服务本身计算和存储能力的上限,而当前云服务器主流技术是虚拟化技术,因此可以认为单机版数据库如果部署在云主机上,符合如下性能限制公式:
数据库<云主机(容器)<宿主机(物理机器)
因此,传统的单机版数据库管理系统部署在云主机上,其实只是把云主机当成普通服务器在用,并不能充分地利用云计算的优势。比单机版更进一步的是分布式的数据库管理系统,后者可以根据计算复杂度和存储规模,增加适当的节点,满足计算和存储要求,因此在一定程度上满足了可扩展性的要求。但是对于集群中的单个节点,其处理瓶颈依然满足上述公式。尽管大多数数据库可以在云中运行,但想要充分体现和利用云平台的优势还要取决于数据库的体系架构。从长远来看,在云计算平台上设计、构建和运行数据库系统能够获得更大的价值,而设计出符合云计算的资源弹性管理特征的数据库系统架构才是云原生数据库的本质。
传统的分布式数据库“弹性”能力不足、单节点存在瓶颈的缺陷是由于单节点计算和存储的“绑定”造成的。因此,一类解决方案就是寻求“计算与存储分离”的技术架构。目前来看,真正的云原生数据库通常是向计算和存储分离架构方面发展的。而各个云厂商在实现计算和存储分离架构时,通常是将CPU和内存绑定在一起,并和SSD/HDD等持久化存储分开。随着非易失性存储器(Nonvolatile Memory,NVM)技术的成熟,未来可能会再将CPU和内存隔离,对内存资源进行池化,从而形成三层资源池化,更好地帮助客户实现按需按量使用资源。
按照冯·诺伊曼体系结构,整个数据库系统可以抽象为“计算、通信、存储”三层架构,云原生数据库可以确保各个层次架构的资源独立扩展。对于计算、通信资源而言,其都是一种“无状态”的基础设施,因此在缩扩容时,可以做到快速地启动和关闭节点,充分利用云计算的弹性能力。存储层则是彻底的“池化”,完全按需使用。在具体的处理技术上,计算层无状态,只处理业务逻辑,不持久化存储数据,主要关注分布式计算技术,包括但不限于分布式事务处理、大规模并行计算、分布式资源调度等;存储层只存储数据,不处理业务逻辑,主要关注分布式场景下的数据一致性、安全性及多模数据存储模型等。
综上,在云计算时代,对数据库系统架构提出了新的课题与挑战。云原生数据库系统的设计理念是其各个核心组件需要能够充分利用云计算资源池化的特性,构建更高效、更安全的数据服务。从技术实现上来看,就是需要在确保安全可靠和正确性的前提下,区分有状态的存储资源和无状态的计算资源,分别采用不同的资源调度和利用策略,尽量减少数据的移动,减少附加的计算、存储和通信开销。同时,在编程接口上,尽量使用和传统数据库系统兼容的接口,使用户的学习曲线更加平滑,让用户可以更加简便、快捷地完成数据生产、存储、处理和消费的全链路过程。