“云计算无疑是今天名列第一的计算趋势,在数据库领域同样如此。客户越来越喜欢云模式的按计算、弹性和几乎无限的规模扩展以及低成本的安装和管理。”时任微软SQLServer中国研发团队总经理的PrakashSundaresan孙博凯(现为微软亚太研发集团首席技术官)在主题为“数据库新征途—关系数据库40年”的圆桌对话环节上表示到。那一年,是年。
也是在那一年,云计算技术的兴起让整个数据库市场呈现暗流涌动的状态,表现在以AWSAurora为首的美国数据库公司和以阿里云为首的中国数据库公司纷纷开启了数据库上云的新时代。在这个阶段中,他们利用平台管控的优势,将用户存储在传统单机架构下的数据逐步迁移至云端,云原生数据库的雏形初显。
在距离孙博凯那段发言4年之后,AWS发布了业内首个云原生数据库Aurora。在3年后的9月份,阿里云在国内率先发布了云原生数据库PolarDB,并于年4月正式商用。
同年11月,腾讯云也紧随其后,发布了新一代自研云原生数据CynosDB,“CynosDB的推出对于丰富腾讯云数据库产品矩阵,提升腾讯云的产品技术能力具有里程碑的意义,同时,良好的兼容特性和极致性价比,将大大推进企业的’上云’进程。”腾讯云数据库产品总监祝百万在发布会上谈到。
作为深谙“快速迭代”是产品研发范式演进之道的互联网科技公司,阿里云旋即于今年5月21日发布了PolarDB的重大更新,“提供传统数据库一键迁移上云能力,帮助企业将线下的MySQL、PostgreSQL和Oracle等数据库轻松上云,最快于数小时内迁移完成。”据阿里云方面精确计算,数据库的云上成本不到传统数据库的1/6,截至当天,已有将近40万个数据库到阿里云上。此外,阿里云智能数据库事业部负责人李飞飞在发布会上表示,“自70年代的关系型数据库开始,迄今为止已经有50余年的历史了,眼下的数据库已经到了一个变革的关键节点,即从马车时代到汽车时代的更迭。”
数据库市场的格局正悄然发生改变
趋势之下,往往预示着新技术在成本、技术上占绝对的领先优势,对旧技术而言,这注定是一场被围剿的行动。美国知名科技领域分析机构Gartner曾预测,到年,全球3/4的数据库都会跑在云上。换句话说,在接下的5年时间内,过去以线下数据库为主导的市场态势将逐步演进到以云原生数据库为导向的市场新态势。
传统商业数据库市场未来预计将呈现下滑趋势数据来源:Gartner,安信证券研究中心
以传统数据库市场为例,市场运作的基本模式为售卖传统软件许可证,线下用户根据需求则需要按“核”购买,一“核”一年的费用约为20万元,这其中还不包括后期的升级数据库的费用,高昂的初期部署的成本将大多数初创公司拒之门外。不久之前,Oracle就曾与国内某大型央企展开过旷日持久的谈判,在售卖产品的基础上,试图让其一次性缴纳万的服务费。
可以感受得到的是,过去几十年是传统数据库的高光时刻,根据相关数据显示,截至年数据库市场总规模高达亿美元,其中传统数据库一度占比逾80%。但随着传统数据库的日渐式微,让企业不得不转投云原生数据的怀抱,表现为近几年传统数据库份额在逐年下降。据第三方机构统计,到年,传统商业数据库市场将下降20%至30%。阿里云智能数据库事业部负责人李飞飞表示,“94%阿里云上的头部客户正在使用我们阿里云数据库服务,云上数据库的使用率和阿里云头部客户交叉率是非常好的。”由此不难看出,原本传统数据库坚实的防线正在被云厂商撕裂,交接将是时间长短层面博弈的问题。
从MongoDB的营收构成中也可一窥端倪。财年,Atlas营收占比只有1%;财年中已经提升至7%;而到财年第一季度,在总营收中的占比已经达到了11%。MongoDBAtlas,是其与公有云服务厂商合作,自身团队为客户部署所打造的云数据库。Atlas营收迅速增长,可以反映出市场对于这种数据库云化模式的认可。
从技术便捷性的角度来分析,缘由传统数据库要跟现在的物理机器绑定,加之其已历经50余年的“用户需求修改蚕食”,其内核已经变得尤为纷繁复杂,这也直接导致其迭代的速度变得十分缓慢。与此同时,当用户的业务需求容量大于此前的预估容量时,彼时传统数据库较低的可扩展性能则显得捉襟见肘。相比之下,云原生数据库天生所具备的云计算的弹性能力以及开源数据库的易用、开放特点却让其在互联网的“数据大爆炸时代”之下适应地游刃有余。
与此同时,互联网时代所带来的爆炸性增长的数据量和愈加繁复的数据类型将迫使企业IT架构从传统商业软件进化为互联网架构,进而应对不可预测的峰谷流量和业务的快速创新。在《淘宝技术这十年》一书中,阿里技术人员回忆到,年左右,技术人员们花钱如流水,买得IOE(IBM的小型机、Oracle数据库、EMC存储设备)这三家的对口销售年年升职。淘宝从起初的一个单机传统数据库、到4个节点、16个节点,最后到20个节点,成为是彼时全球最大的Oracle集群。
然而,两个致命的问题直接锁住了国内意欲打造自由传统商业数据库的可能性,其一是当直面庞大的消费者人群基数所带来的更为复杂的数据类型时,传统商业数据库的改造性较差;其二,传统数据库的核心技术掌握在少数企业手中,安全问题存在极大的不确定性,这里可以参考后期斯诺登所爆出来的棱镜门事件。
在这样的大环境之下,一旁的IOE则显得格外突兀,对于大多数富有前瞻性和自卫性(保持竞争力)的数据库公司来说,一场去IOE运动迫在眉睫。在去IOE化的过程中,最为重要的一点就是建立与支撑系统云化配套的运行维护管理体系。对于阿里来说,引入云计算技术在让计算资源得以灵活调配的同时也带来了一些不确定性。传统的分工界面、工作流程以及应急预案都会随着系统云化程度的加强而逐步变化,尤其在对软件的维护方面,这将是一场颠覆性的考验。
改造首先从接入层实施了全面的云桌面正式开始,紧接着是对CRM系统的接入模块和BOSS系统的帐详单存储工作进行云化试点。除了对硬件的虚拟机和X86化改造,阿里云也聚焦于基于分布式数据库和开源数据库的应用软件改造,在一些新建的生产系统中,全部采用云计算技术进行系统建设。对于阿里来说,这不亚于进行一次“脱胎换骨”疗程。换骨之后则是新生,在去年的双11零点的第一秒,于这一秒内云数据库内以极致的弹性顶住了瞬时增长一百倍的洪峰,同时也支撑起去年的双11,高达亿的销售额。
云原生数据库的架构之变
想要参透云原生数据库,首先要回归产品本身所扮演的角色。如今处理数据不再是仅仅靠算力,主要集中于对智能化算法的研究,而算法又与用户的需求息息相关,进而演进出云原生数据库的框架,即“完整的基础设施云化、核心技术的互联网化以及叠加’大数据+智能化’的平台”。循着云原生数据库的框架再对其进行提炼,核心脉络的三要素逐渐变得清晰,即“云计算在框架中仅作为基础算力;行业算法是智能化处理数据的主要工具;形成’数据+智能花的平台’的前提是基础设施的云化和核心技术的互联网化。”再深入一步思考云原生数据库的模型,不难联想到原生数据库所扮演的其实是“数据中台”的角色。
那么,什么是“数据中台”?即通过数据技术,对海量数据进行采集、计算、存储、加工,同时统一标准和口径。数据中台将数据统一之后,会形成标准数据,再进行存储,进而形成大数据资产层,从而为客户提供高效服务。以阿里云PolarDB为例,其在原有的RAFT协议的基础上开发了一种全新的共识协议(ParallelRaft),在保障数据一致性的前提下,遵从共识协议提升了PolarFS并行写入性能,在高负载情况下,达到平均延迟缩短一半、系统吞吐量翻倍的效果。这也解释了为什么PolarDB不再是一件单一的产品,而是充当一套完整的生态框架协助企业将数据库迁移上云。对此,阿里云数据库产品总监曹伟对钛媒体表示,“提供智能是数据库的未来发展方向,PolarDB将在后续版本中继续围绕“数据中台”这一概念,向用户提供多维分析和分析计算能力。”
与此同时,厘清云数据库的架构方向也是理解云数据库本质的关键所在。当下多模架构成为云原生数据发展的主流趋势,即在一个数据库平台支持多种存储方式,包括满足应用程序对于结构化、半结构化、非结构化数据的统一管理需求。一般来说,结构化数据特指表单类型的数据存储结构,典型应用为银行核心交易等传统业务;半结构化数据则在用户画像、物联网设备日志采集、应用点击流分析等场景中得到大规模使用;而非结构化数据则侧重于海量的的图片、视频、和文档处理等业务,主要应用在金融科技方面。多模架构在降低使用和运维的成本同时,也完成跨部门、跨业务的数据统一存储与管理,从而实现多业务数据融合,支撑起多样化的服务。
此外,“计算-存储层”分离现已演进成主流的技术方向。那么,何谓“计算-存储层”分离?即将协议解析、计算等模块与底层存储解耦,数据库云平台再将存储层进行分片以实现存储的弹性水平扩张,同时通过计算层的无状态设计允许计算层通过增加节点数量线性提升计算能力,从而整个数据库云平台的弹性水平扩张。简而言之,是指数据库的存储引擎和SQL引擎两部分互相松耦合独立工作的架构。
一般来说,这种类型的分离架构由存储、SQL和元数据三个模块组成。存储层是数据库的存储引擎,负责处理数据的存储管理,同时包含路由及事务控制,保障数据的ACID特性,除此之外,存储层还应还具备索引、查询条件过滤、排序等一系列功能;SQL层为中间件层,主要负责处理SQL请求,上层对接应用程序,将应用程序的访问请求分发给存储层,并接收存储层返回的数据结果;而元数据区负责存储整个数据库的所有元数据信息。目前AWSAurora在SQL访问的单一过程上也采用了类似的架构。
数据来源:安信证券研究中心整理
无独有偶,阿里云PolarDB通过利用高速网络做到分布式共享存储,从而达到“计算-存储层”全面性的分离。这种分离架构到来的直接影响是对存储节点和技术节点进行弹性索扩容,缘由技术节点具备一写多读的功能,进而满足云原生数据库时代用户在云上按需、按量使用、极致弹性等一系列在“马车时代”的传统数据库所不能提供的服务。正是基于此架构的上的技术优势,让阿里云PolarDB在sysbench(一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试,目前是业界标准的测试评估工具)中拔得头筹——“与传统数据库相比,阿里云PolarDB多达十倍性价比;与国外领先的厂商(如AWSAurora)相比,阿里云PolarDB在某些情况下性能达到前者的两倍。”
若技术层面来分析,阿里云PolarDB采用的计算和存储分离架构让“计算—存储”资源池化。数据库通过计算节点运转,计算节点则组成了计算资源池;数据都存储在存储节点之上,同时存储节点也组成了一个存储资源池。当CPU和内存不能匹配需求时,可以扩充计算资源池,当容量或IOPS(每秒进行读写)不能匹配需求时,则可扩充存储资源池,这两个池都是按需扩容,而且存储节点和计算节点可以沿着两个方向进行优化。
反观传统数据库部署模型则是一种烟囱模型,一台主机既要跑数据库又要存取数据,性能交叉之下带来两个问题。其一,缘由CPU和磁盘的配比主要取决于实际业务的需求,很难提前找到最优比例,直接导致难以选择最为匹配的机型;其二,带来了磁盘碎片问题,在一个生产集群中存在部分使用率极低的机器磁盘,有的甚至不到10%,但出于业务稳定性要求,这些机器磁盘会独占主机的CPU,对于主机的资源分配来说,这是一种极为奢侈的资源浪费。通过存储资源池化,这两个问题都能得到解决,SSD的利用率得到提高,成本自然也降低下来。
若从存储成本的只读实例来分析,缘由传统数据库做只读实例。所谓的实施“一写多读”方案,即通过搭建只读副本的方案,先拷贝一个最近的全量备份恢复一个临时实例,紧接着让临时实例连接主库或者其它binlog(二进制日志)源同步增量数据。当数据增量追上时,则将临时实例加到线上升级为一个只读副本。这种方式存在两个问题,一方面是耗时,搭建一个只读实例需要的时间往往与数据量成正比;另一方面费用昂贵,这其中需要增加一份存储的成本,例如当用户购买一个主实例加上五个只读实例,则需要付7~8份存储的钱(其中是7份还是8份主要取决于主实例是两副本还是三副本)。
而在阿里云PolarDB架构之中,这两个问题都得以很好的解决。其一,新增只读实例无需拷贝据,云原生数据的优势让无论多庞大的数据量都可以于2分钟之内创建出来;其二,主实例和只读实例共享同一份存储资源,通过这种架构去增加只读副本,可以做到零新增存储成本。此时,用户只需支付只读实例消耗的CPU和内存的费用即可。
阿里云PolarDB与传统数据库的成本对比数据来源:阿里云官方
来自实际场景应用对比之下的数据往往显得真实的多,作为年全国第一家在港交所上市的零售行业的代表银泰百货,高额的数据库运维成本对银泰来说无异于一杯难以下咽的苦酒。据披露,银泰仅在当年光线下数据库成本已经达到了千万级别以上。于是乎银泰决定把会员库迁移到云原生数据库平台,这一举动也让银泰收到了理想的效果。在去年双11大促上,银泰在顶住20倍峰值波动的同时,成本较传统线下数据库相比节省逾60%。
云原生数据库的性能进击
华为云数据库资深架构师黄伟曾公开表示到,“云原生数据库其实是一个冰山模型,冰山之下的数据库引擎云化才是其核心所在。”数据真正被管理和处理是由数据库引擎完成的,多数的云厂商会提供两类:一类是原生的数据库引擎,第二类则是优化的数据库引擎。根据黄伟团队的实验,在32个连接数情况之下HWSQL比原生MYSQL性能好一些,但差距不明显。伴随着连接数的增多,以连接数个为例,HWSQL的性能大约是MySQL的十倍以上。由此观之,经过云优化的数据库引擎往往会比原生的数据库提供更好的性能及可靠性。
以MySQL为例,用户能感受到的首先是一个VM(虚拟机)下面悬挂着一块或者多块盘,云供应商为了更高的可靠性,将用户数据在云盘上会存储在三个不同的机架上的三个不同的服务器上的三块不同的盘中去,一旦其中任何一个结点或者任何一个机架或者任何一个数据中心宕机,以确保数据库系统仍然具备可用性。在这种模式下,加上MySQL在磁盘上自动双写的特性,MySQL的问题显露无遗,盘上大量的需要双写的数据,在给云上带来极大的负担同时也占用着网络带宽,处理事件时延也随之增加。对于企业来说,数据库的长时延则是一个严重的缺陷。
而云上的“计算-存储层”分离架构却很好的解决了这个问题,分离的结果就是每个模块专注自身的线程处理,计算结点和存储结点可以独立的去扩展。此外,众所周知,存储在进行容灾备份的同时,数据库也要做一份容灾,此时存储结点可以和备份容灾整合到一起,而计算结点下到存储结点的数据只需要原来的七分之一,网络带宽占用和时延随之提升,直接表现在性能上的大幅提升。
阿里云PolarDB作为Gartner数据库魔力想象中国唯一入选,主要得益于其在存储引擎和计算引擎性能方面的优化。在存储引擎优化方面,缘由关系型数据库是IO(输入与输出)密集型应用,因此想要提高数据库的性能关键要提升IO的性能,这也解释了为什么过去十年数据库领域为何要用SSD(固态硬盘)替换HDD(机械硬盘)。
纵深于数据库处理的吞吐能力的提升除了需要前沿的硬件技术,其中包括3DXpoint存储介质的Optane存储卡(超高速内存新技术)、NVMe(逻辑设备接口规范)SSD和RoCERDMA(新的内存访问技术)网络,还需要实现软件栈整个IO链条的深度优化,即将数据库、文件系统、网络通讯协议、分布式存储系统以及设备驱动贯通。于这一点上,阿里云PolarDB通过在软件层对高速的Optane卡和大容量高吞吐的NVMeSSD进行组合,两者兼并为混合存储层,而混合存储层的好处是既保证了数据写入的低延迟、高吞吐、高QoS(服务质量),又使得整体方案兼具较高的性价比。
“PolarDB首次将OSBypass(操作系统旁路)和零拷贝两个核心技术运用于云原生数据库上。”李飞飞表示到。旁路内核的作用则在于榨干硬件性能,为此阿里云数据库团队大胆抛弃Linux内核提供的机制(如块设备)、文件系统入(如ext4)、TCP/IP协议栈和socket编程接口,选择另起炉灶,开发一整套在用户态运行的IO和网络协议栈。
阿里云PolarDB用户态协议很好地解决了内核IO协议快慢的问题,一方面用户程序在用户态直接通过DMA(直接内存存取)操作硬件设备,通过轮询的方式监听硬件设备完成IO事件,消除了上下文切换和中断的开销;另一方面,用户程序将IO处理线程与cpu逐一进行映射,每个IO处理线程都独占CPU达到处理不同的IO请求和绑定不同的IO设备硬件队列的效果。
值得一提的是,一个IO请求完整生命周期都在一个线程、一颗CPU上处理,无需锁进行互斥。这种技术最大化地实现了与高速设备进行性能交互,实现在保持线性的扩展能力的同时,也让一颗CPU高达约20万次/秒的IO处理能力,这也就意味着4颗CPU便可达到每秒80万次IO处理的能力,在性能和经济层面上远高于内核。
“零拷贝”则意味着整个过程CPU不用访问被同步的数据块,为了实现这一点,阿里云PolarDB巧妙地通过RDMA将日志数据发送到存储节点内存之中,存储节点之间通过RDMA互相复制,每个存储节点用SPDK将数据写入NVMe接口的存储介质里。主库和只读节点之间通过物理复制同步数据,直接将数据更新到只读节点的内存里,从而从物理复制上实现数据库的多副本。
在计算引擎性能优化方面,首先阿里云PolarDB针对高并发场景对引擎的内部锁做了大量优化,例如将latch(锁存器)分解成粒度更小的锁、将latch改成引用计数的方式从而避免锁竞争等,值得一提的是,阿里云PolarDB还将部分热点数据结构改成了LockFree(无锁)的结构,例如Server层的MDL锁。
其次,缘由当下多数SSD硬盘是4K对齐(一种高级硬盘使用技术,用特殊方法将文件系统格式与硬盘物理层上进行契合,为提高硬盘寿命与高效率使用硬盘空间提供解决方案),而MySQL代码还是按照早期磁盘字节对齐的方式刷日志的方式,带来的直接表现则是让磁盘进行很多不必要的读操作,从而局限了SSD盘的性能,因而阿里云PolarDB在日志提交过程中进行了相关优化,同时其采用的DoubleRedoLogBuffer(双重日志缓冲区)进一步提升了并行度。
最后也是极为重要的一点,阿里云PolarDB除了在基于数据页维度的并行性能提高上下足了功夫,还对物理复制中的必要流程进行了相关的优化,以在MTR日志中增加了一个长度字段为例,这个简单的优化操作节省了将近60%在日志解析阶段所消耗的时间成本。此外,通过复用DummyIndex内存数据结构,减少了其在Malloc/Free上的开销,从而达到提高复制性能、降低时延的目的。
回归理性,探索云原生数据库的未来
云原生数据库在近些年掀起的近乎燎原之势主要得益于在其在成本层面和支持云服务层面的优势,但我们必须清醒地认识到,眼下的云原生数据库还没有步入真正的成熟(技术、市场)阶段,无法真正取代市场对传统数据库的需求。
眼下大多云计算厂商所开发的数据库系统,市场目标在于在自家产品的云上提供服务,而不是作为传统软件卖许可证。因而,对于很多打算摆脱Oracle欲采用国产数据库,但因为一些特殊的原因目前没打算上云的用户则错过此类产品。
另一方面,缘由云计算供应商所开发的数据库只能在自家的云上提供服务,对于大多数独立软件商来说,他们往往更倾向于一个类似传统的、独立的关系数据库,而这个数据库可以在各个云计算平台上运行,因而目前仍停留在“云优先”的战略之中,即并非要求企业自动的全“云”化,而是依据业务延伸的需要实时更新和优化企业云战略部署,逐步实现企业“云”化。
以工商银行最近公布的最新集采、供应商为例,甲骨文以.9万元入围操作系统及数据库类软件产品升级保护项目,这也从侧面说明了传统商业数据库仍具备着相当的不可取代性,云原生数据库是大趋势,但数据库云上之路则是一个长期的过程。
最后,目前云计算厂商主要业务为提供云服务,而云计算供应商在云上一般会提供多种数据库平台,例如MySQL、PostgreSQL以及自研的数据库。云厂商自研的数据库只是其中一种,只是提供给客户更多的选择,并不见得有真正的优势。
从技术衍生阶段的角度来看,云数据库一般分三个阶段,第一是数据库的服务化,提供一个好的运维,做好数据库的体检与服务;第二是改进引擎,针对云的基础设施来提高它的性能和可靠性;第三是自研引擎,自研引擎的含义是基于云设计,拥有着极高的性能/极大的规模/极高的可靠性。
以在中国云计算市场占主导地位的阿里云为例,阿里云数据库产品总监曹伟告诉钛媒体,“目前阿里云正处于第三阶段,在拥有多项专利的同时,还在去年的VLDB和今年的SIGMOD两大数据库全球顶级数据库学术会议上发表了两篇论文。”
明星产品阿里云PolarDB自年立项研发至今,在5年的时间里,PolarDB迭代过程让未来的云原生数据库的模样逐渐清晰,即一个数据库既可满足当下多类数据库混合使用效果,又在自研能力和资金优势基础之上以产品为契机,进而实现数据库OLTP(联机事务处理)与OLAP(联机分析处理)一体化设计,为企业的数字化升级所需的IT设施架构实现变革性的进化。
在传统商业数据库落后于国外之下,布局云原生数据库或许能让中国未来在数据库领域扳回一城。(本文首发钛媒体,作者/桑明强,编辑/刘湘明)