二、 Serverless数据库关键技术及应用场景
(一)Serverless数据库关键技术
云计算的核心理念在于池化资源的弹性使用。阿里云数据库基于线上数百万实例的运维经验,分析大量客户的核心痛点需求,总结出以底层池化资源为基础,利用RDMA高性能网络高效管理、使用物理资源的云原生数据库Serverless关键技术,实现资源池化及弹性扩展、高可用、高性能、低成本的Serverless能力。
1、 资源池化及弹性扩展
(1)存储资源池化,存储计算解耦
云数据库作为贴近数据存储的中间件服务,其与底层存储有着紧密联系。传统数据库将数据存储在物理机本地的持久化存储设备中,如磁盘、NVMe SSD等,并在同一台物理机上部署数据库实例以访问持久化数据。因此,当用户数据超出本机存储上限时,需要手动添加新的存储设备,或者迁移数据到存储空间更大的机器上。无论哪一种方案都是缓慢且长时间影响数据库服务能力。
云原生数据库第一步是要将底层的庞大数据量池化,使得数据存储空间的弹性伸缩成为可能。池化的存储资源池,为上层的数据库计算服务提供弹性的存储能力。常见的池化存储方法可以是分布式文件存储服务,如Ceph、HDFS等,也可以是数据库系统定制的共享存储服务,如Ceph、HDFS等,也可以是数据库系统定制的共享存储服务,如Aurora的quorum机制存储服务、PolarDB高性能共享存储PolarStore等。存储池化条件下,当用户需要进行存储空间扩容时,只需要向底层服务发起请求,数据库计算实例不需要做任何数据迁移,用户业务亦是无损影响。
(2)资源调度
在存储资源池化以后,云原生数据库Serverless的计算资源弹性也需要实现优异的资源隔离能力,进而为基础的计算资源提供池化管理。管理平台需实时监控实例负载,根据丰富的弹性参考维度(CPU、内存、IOPS、链接数等),提供高效率的计算资源调度服务,最终提供秒级的计算资源弹性能力。
实现该功能的常见技术路线可以是使用以Kubernetes等容器形式管理和调度计算资源,也可以是以虚拟机的形式管理计算资源,例如开源服务OpenStack。
(3)计算+内存+存储三层解耦
云数据库通常需要较大的内存对缓存磁盘上海量数据进行加速查询,以保证数据库的服务质量,尤其是对于OLTP类型对延时及其敏感的业务。然而,云上用户的业务类型丰富,其各种业务对计算资源与内存资源的需求比例是不同的,这就导致固定的vCPU+内存的数据库规格售卖模式,通常导致用户购买的实例存在部分资源浪费的现状。例如用户对200G常用数据进行简单的插入操作,由于不需要复杂的计算,因此4vCPU可能足以满足用户需求,但是用户为了保证服务质量,想选用32GB内存从而缓存更多的数据实现加速查询,但当用户购买8vCPU+32GB规格的数据库实例,将导致购买的实例闲置了4vCPU资源。在其它场景下,用户业务可能需要更多的CPU资源,但对数据量要求并不多,导致用户购买的内存资源闲置。
为了更多地降低用户成本,提升云上资源的利用率,云原生数据库需要将内存与计算节点进行深度解耦,实现CPU+内存+持久化存储的三层解耦模型。如图4所示,在共享存储服务和计算节点之间存在一个GBP(Global Buffffer Pool Service)服务。计算节点在物理服务器上只需要较小的内存作为用户查询在GBP中实际需求数据页的缓存,而将其余clean data page暂存在GBP中。使用池化内存有两个好处,一是计算节点服务器不再需要巨大内存,当用户需要扩展内存时只需要在GBP中动态扩展即可;二是当实例崩溃、重启或者迁移时,由于其数据页仍然在GBP中,其可以快速恢复服务而不需要再此从共享存储中加载持久化数据。
《Serverless数据库技术研究报告》——二、 Serverless数据库关键技术及应用场景——(一)Serverless数据库关键技术(2) https://developer.aliyun.com/article/1223710?groupCode=polardbforpg