金山云云数据库MongoDB与阿里云PolarDB的比较
伴随着互联网IT应用从私有化部署转向云化服务,实现计算能力整合和计算资源能效,作为IT三大核心领域的数据库也逐步迁移到云环境,即云数据库。传统数据库相对商业数据库具有绝对的性价比(成本只有商业数据库的十分之一)和开放性优势,但传统关系型数据库在云托管环境下暴露出诸如备份归档慢、容量伸缩难、系统性能瓶颈、故障恢复慢、数据可用性等方面的问题。
在数据库的实际应用中面临的主要问题:
l 海量存储:需要具备弹性扩容能力
l 高并发访问:需要提高数据库吞吐
l 数据一致性:需要保证多副本数据的一致性(数据可用性)
针对以上问题,业内各大云服场商针对业务痛点研发了一系列云数据库产品,通过对比各大云数据库产品,总结归纳如下:
l 海量存储解决方案:利用可灵活扩缩容的分布式存储系统为数据库提供存储服务;
l 高并发访问解决方案
Ø 从数据内容层面进行优化:
(1)减少IO(磁盘IO和网络IO);
(2)分散负载(计算、日志、事务等)。如亚马逊Aurora数据库。
Ø 从数据链路层面进行优化:高速网络 + 高性能磁盘。 如阿里PolarDB数据库。
l 从数据引擎层面进行优化。优化数据库存储引擎 + 异构计算芯片。如阿里XDB数据库。
l 数据一致性解决方案:利用成熟的一致性协议(如raft,paxos,quorum等)提供多副本数据强一致性保证。
业内成熟的新一代云数据库方案对比如表1。
表1 新一代云数据库对比
通过借鉴业内成熟的云数据库解决方案,金山云设计了一款支持弹性扩容、高性能、高可用的OLTP云数据库,即KingDB。金山云云数据库能够实现:
l 性能:5倍于MySQL(读性能:最多15副本,50wQPS; 写性能:单点写入10wTPS)
l 创建只读副本:TB级数据,分钟级(传统数据库架构小时级)
l 容量:<=64TB
l 成本:商业数据库的1/10
l 创建容灾实例:分钟级
KingDB实现了数据库实例和存储服务相互独立,存储服务层为数据库层提供统一的数据
,数据库实例从存储层获取数据与从本地读取数据一样。利用共享的存储层服务,KingDB不仅能实现动态弹性扩缩容,故障恢复的效率更高,可提高整系统的可用性,物理复制为系统性能的提升带来了很大的空间。
(1) KingDB的每个数据库副本所在机器会部署服务agent,负责数据库实例状态的采集并上报到服务管理器(service manager);
(2) 数据库集群由一个主副本和若干个从副本构成,一般同region的跨AZ部署;
(3) 不同的服务层做安全隔离,并通过VPC相互通信;
(4) 存储服务由若干存储节点构成分布式存储系统,跨多AZ,支持多点挂载、弹性扩缩容、故障自愈和负载均衡。同时,还承担了数据备份归档的数据源;
(5) 存储系统中的数据(data & log & config)定期备份到备份系统;在需要进行数据回滚时从备份系统中拉取数据恢复到特地时刻数据。
(6) 备份系统可以使用分布式块存储系统EBS或S3;
(7) 为了保障服务的高可用,整系统需要在异常情况下快速发现问题,因此需要监控系统中所有的关键操作,一旦性能或可用性出现问题需要第一时间产生报警。
KingDB的总体解决方案,从存储扩展性、IO链路和一致性等不同方面做出改进和优化,旨在打造一款适合公有云环境的关系型数据库:具备弹性伸缩能力、快速故障恢复能力、快速归档回档能力、高吞吐、低成本。目前的架构还有待完善的方面如下:
(1) 依赖的存储系统建设有待改进:目前使用的云盘不支持在线扩缩容,扩缩容过程对业务连续性有一定的影响;
(2) 网络建设有待升级:目前只有千兆网/万兆网基础设施,网络IO性能可能成为瓶颈;RDMA网络环境建设有助于提高整系统性能;
(3) 新网络硬件及协议以及新存储硬件(磁盘、异构计算芯片、非易失性存储等)引入需要进行适配和对应硬件故障处理;
(4) 数据库层和存储层数据交互需要经过多次内核态和用户态间的拷贝,对时延影响较大,需要考虑在用户态完成数据交互(包括用户态文件系统接口、RDMA网络交互等);
(5) 基于物理复制的模式需要考虑兼容利用binlog进行数据分析的DTS服务接入,需要实现基于redo日志的数据流同步;
(6) redo日志的可读性相比binlog的可读性要差,在服务运维过程中需要基于redo日志的排查工具和分析工具。
随着公有云数据库应用场景的快速增长,未来云数据库在性能、容量、安全、计算等方面将面临更大的挑战,新硬件+新架构将是云数据库的新迭代模式。