云计算时代的数据库之战
而在阿里云 PolarDB架构之中,这两个问题都得以很好的解决。其一,新增只读实例无需拷贝据,云原生数据的优势让无论多庞大的数据量都可以于2分钟之内创建出来;其二,主实例和只读实例共享同一份存储资源,通过这种架构去增加只读副本,可以做到零新增存储成本。此时,用户只需支付只读实例消耗的CPU和内存的费用即可。 阿里云PolarDB与传统数据库的成本对比 数据来源:阿里云官方 来自实际场景应用对比之下的数据往往显得真实的多,作为2007年全国第一家在港交所上市的零售行业的代表银泰百货,高额的数据库运维成本对银泰来说无异于一杯难以下咽的苦酒。据披露,银泰仅在2016当年光线下数据库成本已经达到了千万级别以上。于是乎银泰决定把会员库迁移到云原生数据库平台,这一举动也让银泰收到了理想的效果。在去年双11大促上,银泰在顶住20倍峰值波动的同时,成本较传统线下数据库相比节省逾60%。 云原生数据库的性能进击 华为云数据库资深架构师黄伟曾公开表示到,“云原生数据库其实是一个冰山模型,冰山之下的数据库引擎云化才是其核心所在。”数据真正被管理和处理是由数据库引擎完成的,多数的云厂商会提供两类:一类是原生的数据库引擎,第二类则是优化的数据库引擎。根据黄伟团队的实验,在32个连接数情况之下HWSQL比原生MYSQL性能好一些,但差距不明显。伴随着连接数的增多,以连接数8000个为例,HWSQL的性能大约是MySQL的十倍以上。由此观之,经过云优化的数据库引擎往往会比原生的数据库提供更好的性能及可靠性。 以MySQL为例,用户能感受到的首先是一个VM(虚拟机)下面悬挂着一块或者多块盘,云供应商为了更高的可靠性,将用户数据在云盘上会存储在三个不同的机架上的三个不同的服务器上的三块不同的盘中去,一旦其中任何一个结点或者任何一个机架或者任何一个数据中心宕机,以确保数据库系统仍然具备可用性。在这种模式下,加上MySQL在磁盘上自动双写的特性,MySQL的问题显露无遗,盘上大量的需要双写的数据,在给云上带来极大的负担同时也占用着网络带宽,处理事件时延也随之增加。对于企业来说,数据库的长时延则是一个严重的缺陷。 而云上的“计算-存储层”分离架构却很好的解决了这个问题,分离的结果就是每个模块专注自身的线程处理,计算结点和存储结点可以独立的去扩展。此外,众所周知,存储在进行容灾备份的同时,数据库也要做一份容灾,此时存储结点可以和备份容灾整合到一起,而计算结点下到存储结点的数据只需要原来的七分之一,网络带宽占用和时延随之提升,直接表现在性能上的大幅提升。 阿里云 PolarDB作为Gartner数据库魔力想象中国唯一入选,主要得益于其在存储引擎和计算引擎性能方面的优化。在存储引擎优化方面,缘由关系型数据库是IO(输入与输出)密集型应用,因此想要提高数据库的性能关键要提升IO的性能,这也解释了为什么过去十年数据库领域为何要用SSD(固态硬盘)替换HDD(机械硬盘)。 纵深于数据库处理的吞吐能力的提升除了需要前沿的硬件技术,其中包括3DXpoint存储介质的Optane存储卡(超高速内存新技术)、NVMe (逻辑设备接口规范)SSD和RoCE RDMA(新的内存访问技术)网络,还需要实现软件栈整个IO链条的深度优化,即将数据库、文件系统、网络通讯协议、分布式存储系统以及设备驱动贯通。于这一点上,阿里云 PolarDB通过在软件层对高速的Optane卡和大容量高吞吐的NVMe SSD进行组合,两者兼并为混合存储层,而混合存储层的好处是既保证了数据写入的低延迟、高吞吐、高QoS(服务质量),又使得整体方案兼具较高的性价比。 “PolarDB首次将OS Bypass(操作系统旁路)和零拷贝两个核心技术运用于云原生数据库上。”李飞飞表示到。旁路内核的作用则在于榨干硬件性能,为此阿里云数据库团队大胆抛弃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还将部分热点数据结构改成了Lock Free(无锁)的结构,例如Server层的MDL锁。 其次,缘由当下多数SSD硬盘是4K对齐(一种高级硬盘使用技术,用特殊方法将文件系统格式与硬盘物理层上进行契合,为提高硬盘寿命与高效率使用硬盘空间提供解决方案),而MySQL代码还是按照早期磁盘512字节对齐的方式刷日志的方式,带来的直接表现则是让磁盘进行很多不必要的读操作,从而局限了SSD盘的性能,因而阿里云PolarDB在日志提交过程中进行了相关优化,同时其采用的Double RedoLog Buffer(双重日志缓冲区)进一步提升了并行度。 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |