欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
CynosDB是腾讯云自研的新一代高性能高可用的企业级分布式云数据库。融合了传统数据库、云计算与新硬件的优势,100%兼容开源数据库,百万级QPS的高吞吐,不限存储,价格仅为商用数据库的1/10。
Cynos源于拉丁语中的Cynosura,古希腊神话中北极星的名字,意为焦点,引人注目的人或物。
云数据库的演变之路:
云计算时代,越来越多的企业通过“接入云” 完成数字化转型和升级, 同时也对云服务提供商提出了更高的要求。以传统的方式,将Oracle 和 Microsoft SQL Server等长期以来主导企业解决方案的数据库以“Lift and Shift”的方式直接搬到云上提供托管服务并不能满足用户在扩展性,可靠性等方面的需求,授权许可费用也使得订阅计费的方式不能从根本上降低数据库的使用成本。通过技术手段解决这些问题正是自研新一代云数据库CynosDB的出发点。
公有云的核心技术是资源池化和弹性调度。资源池化是实现扩展性和规模化的基础,而弹性调度的目标则是保证系统可用性的前提下尽量提升资源利用率。现阶段,资源整体上分为计算和存储,计算资源的调度相对容易, 而存储调度就意味着数据的搬迁,不仅增加耗时,还会引起计算资源的大量消耗。不幸的是,数据库本质上就是一个存储和处理数据的系统,如何在公有云上实现数据库服务的弹性调度,是近年来数据库领域的一大难题。
NoSQL数据库的出现,通过简化数据模型,减少数据之前的交互,极大的降低了系统横向扩展的难度。但这是以牺牲关系数据库的核心能力:关系对象模型为代价的。对于Google这类大型互联网公司,由于其业务逻辑相对简单,研发能力强,将相关逻辑从数据库转移到计算层不是难事,但在金融、政府、企业等传统领域,基于关系型数据库构建的系统无处不在,出于安全、可靠和成本等因素,这些系统都无法做类似的改造。
以Google Spanner和Amazon Aurora为代表的NewSQL现代关系型数据库则提供了新的思路:即既能够提供与NoSQL数据库相同的扩展性能,又可以保持传统数据库支持ACID和SQL的特性。其中以Amazon Aurora为代表的DBaaS通过对开源数据库MySQL和PostgreSQL的计算与存储解耦来实现数据库在云端的扩展和弹性调度,并将业务迁移成本和总拥有成本降到最低,得到了市场的普遍认可。
云数据库的设计理念:
Oracle 现任CEO Mark Hurd在回答Forbes的采访中提到了“节约成本和敏捷创新已成为企业上云的核心驱动力”,这也是贯穿于云原生数据库CynosDB的核心设计理念:
- 全面兼容新版的开源数据库 “Comprehensive”
- 极致的内核级优化与新硬件技术相结合“Cohesive”
- 实现全托管智能运维“Creative”
- 无服务器架构的按需按量计费“Cost Effective”
让用户专注于业务端应用的研发,为用户提供灵活的、敏捷的、可持续的,兼具新特性、高性能和低成本的新一代云原生数据库服务。
CynosDB系列之PostgreSQL:
云数据库CynosDB for PostgreSQL是腾讯云和TEG数据平台部联合,基于最先进的开源数据库PostgreSQL10 倾力打造的新一代企业级分布式云数据库,重新定义了云上分布式数据库的架构:
计算层:
- SQL Engine(master/slave):基于PostgreSQL 10.0版本,适配分布式对象存储接口,同时master负责同步增量日志到slave,以更新cache中的内容
- Distributed Object Storage:分布式对象存储接口,屏蔽底层块存储接口的细节,负责对象的生命周期管理、数据块分配管理等工作
- Distributed Block Storage:分布式块存储接口,负责将多个Storage Node上的Segment Group抽象为Logic Segment
存储层:
- Segment :数据管理的最小单元,默认为10G,包含数据和增量日志
- Segment Group :多个Segment通过一致性协议Raft组成一个Group,负责数据的备份和HA
- Storage Node:管理多个Segment的服务,通常就是一个服务进程,负责网络通信、线程池调度等工作
- Cold Backup Storage:基于增量日志的备份存储
调度层:
- SQL Instance Manager:负责SQL Engine的HA
- Storage Cluster Manager:负责存储层的HA,包括:故障转移、自动扩缩容、负载均衡等
计算与存储分离:
CynosDB for PostgreSQL的架构中,我们将计算与存储分离,同时实现了计算节点的无状态。这样做的好处是可以将计算节点与存储节点的故障隔离,同时以秒级的速度调度计算资源。当计算节点失效时,可以快速恢复而不需要恢复存储节点。当存储节点失效时,计算节点也可以以秒级重连新的主存储节点,使得对业务的影响降到最低。
海量智能存储:
由腾讯TEG数据平台部经过十几年的业务沉淀和技术积累打造的新一代的海量分布式智能存储,对计算和存储的资源池化提升了资源的利用率,降低了使用成本,也使得存储突破了单机的空间限制。不仅如此,CynosDB for PostgreSQL 的实现了智能存储:无最大存储量限制,按使用量计费,自动扩缩容,轻松应对突发的业务变化;自动负载均衡,利用数据存储的多副本,通过主副本切换自动从热点存储设备到空闲存储设备以转移IO压力;自动数据纠错,通过内置的校验发现存储数据的跳变,并利用其他副本数据实现页级的自动恢复。通过对数据持续的保护,充分保障业务的稳定和数据的持久性,可靠性达99.9999999%。
减少网络IO:
云数据库的分布式架构带来扩展性的同时也增加了网络开销。为了最大限度的减少网络IO,CynosDB for PostgreSQL 采用了“日志即数据库”的方案,计算层不再需要将脏页发送到存储层,而只需发送增量日志,由存储层异步的将日志转换为数据页。同时,存储层数据的多副本直接通过Raft技术来复制数据,这样计算节点只需一次I/O请求到存储层的Leader节点上即可完成写日志操作。在TPC-C基准测试中,与PostgreSQL 10.0相比,写流量减少了60%。
减少系统调用:
CynosDB for PostgreSQL 采用自研的用户态分布式对象存储系统,通过基于SPDK和RDMA的零拷贝技术,减少了操作系统上下文切换以及数据在用户态和内核态之间拷贝引起的性能损耗,进一步优化了关键路径的系统性能,降低请求延迟。
对于单块的SSD Disk,相比传统的Direct IO方式, 采用SPDK的直接数据传输无论在顺序读还是随机读模式都有超过一倍的性能提升,对比depth为1时的写性能,无论是随机写还是顺序写都有30%的性能提升。
此外,在RDMA与TCP的对比测试中,可以明显的看到4K数据的传输平均延迟缩短到6~7us,在4K数据的echo测试中,CPU使用率降低了65%。
PostgreSQL内核优化:
CynosDB for PostgreSQL在完全兼容社区版PostgreSQL10的基础上也对内核进行了深度的优化:PostgreSQL数据页写入是以Page页面为单位,社区版为了解决在写磁盘的时候“刷新数据页面时掉电,而导致磁盘上存在半页”的问题,引入了Full Page Writes,在CynosDB for PostgreSQL系统中,我们移除了这个机制。此外,社区版PostgreSQL除了刷新日志外,还需要将数据脏页刷新到存储系统中,CynosDB for PostgreSQL仅仅将日志写入到存储系统,无须刷新脏数据页,进一步减少了系统IO。
综上所述:
云数据库CynosDB for PostgreSQL是腾讯云继续提升、丰富,开放云计算能力的重要里程碑,也推动了社区生态的进一步完善。在后面的工作中,我们将结合用户需求不断完善产品功能,提供企业级特性,将更多的云计算普惠带给世界。
CynosDB近期会开放公测申请,采用邀测制,进一步的消息,敬请关注腾讯云官网(https://cloud.tencent.com/act...)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。