数据库是公有云上最广泛使用的服务之一。客户们对云数据库产品有一些很朴素的要求:像自来水一样,方便,实惠。
具体来说,自来水打开开关就出水,关上就断水,调节开关就可以调节水量,非常的方便。自来水按照使用量收费,很实惠,不会出现用了5公斤水收10公斤水费的问题。
在很多云服务上,Serverless架构就很好的解决了用户的方便实惠的需求。什么是Serverless呢?简单来说,Serverless分为FaaS和BaaS两部分,FaaS是指函数即服务,BaaS是指后端即服务。下图展示了Serverless的具体内容。
Serverless服务有一些特点。服务大部分以API形式提供,不需要运维,用户也无须关注后端使用情况。服务还能实现实时能够实时弹性扩缩容,就像自来水一样,水量可大可小。对用户来说,非常的方便。Serverless服务按照使用量付费,不使用就不需要付费,也非常的实惠。
如果数据库变成Serverless,那么客户很朴素的要求:简单好用,按使用量付费,就统统都满足了。可以这样说,云数据库Serverless的发展是一种必然趋势,但是,把数据库给做成Serverless,没有那么容易。
传统的数据库,在上云之前,有两个紧耦合的资源的诉求:计算资源和存储资源。一个典型的用户需要大概知道自己的计算资源和存储资源的需求,然后来配置硬件,并在硬件上安装数据库软件,才能比较好的为自己的业务服务。
客户和客户之间的差异是巨大的。比如说,客户A需要2个CPU,4GB内存,400GB硬盘。客户B需要1个CPU,2GB内存,900GB硬盘。在线下的时候,由于硬件配置相对容易定制化,所以传统数据库针对不同客户的不同计算资源和存储资源的需求也比较容易定制化。
当数据库上云之后,最初的云数据库,主要是模仿线下数据库的使用方式,提供数据库托管服务。这当然是为用户解决了数据库运维的问题。
但是云上主机的型号选择相对没有那么灵活和可定制化。用户使用云主机做数据库托管的时候,很容易遇到要么计算资源不能满足业务需求,但是存储资源有富裕,要么存储资源不能满足业务需求,但是计算资源有富裕,很难协调。
这里最根本的原因是传统数据库的计算和存储资源是紧耦合的。所以云数据库的技术架构和传统数据库有了一个巨大的变化,现在的云数据库都是基于计算和存储分离的架构。这也是数据库Serverless化的基础。
TDSQL-C Serverless就是这样一个云原生数据库,它采用计算与存储分离的架构。TDSQL-C Serverless从架构上讲分为三层:接入层,计算层,存储层。在这三层旁边还有监控和计费的组件。
在这个架构下,TDSQL Serverless有一些重要的技术特性。
首先,TDSQL-C Serverless有很好的资源池化能力。通过计算与存储分离的架构,TDSQL-C Serverless做到了计算资源和存储资源分别计费,分开弹性扩缩容。存储不够就增加存储,计算不够就增加计算节点。这样一来,用户就不用关心今天到底要用多少核CPU,多大能力的计算节点了。
这个架构还有一个好处,在计算实例停止,计算资源回收以后,对计算是不计费的,只需要付存储的费用。为了更好地降低存储的费用,系统也引入了对象存储。在计算实例暂停的时候,所有的数据都存进对象存储里面,当实例恢复以后,可以快速从对象存储里面恢复数据。TDSQL-C Serverless团队也在研究冷热存储的问题,如何尽可能把数据都存入对象存储,降低存储成本,是TDSQL-C Serverless团队努力的方向。下图展示了系统如何在对象存储和热存储之间进行数据保存和恢复的过程。
其次,TDSQL-C Serverless能够做到极致的弹性,自动扩缩容。对计算资源来说,业界同类产品通行的做法,是先给用户分配一个比较小的资源,通过监控的方式,发现用户消耗的资源打满的时候,触发一个扩容的操作。
但是这种做法有一个弊端,用户资源已经打满以后,系统还需要监控若干秒才开始扩容。对业务来说,流量峰值都到了,扩容却才开始,这很难保证在弹性过程中对业务做到完全无损。所以,系统的高可用和高性能就不存在了。
TDSQL-C Serverless选择的做法是把所有的CPU资源,根据用户设置的最大的算力区间,先分配给用户。这样可以做到秒级的弹性。然后根据CPU的使用情况,来调整内存Buffer Pool的使用情况。这种做法的好处是,业务峰值到来的时候就可以做到秒级弹性,而且也不会影响系统的高可用性和高性能。下图展示了TDSQL-C Serverless方案和其他方案的区别。
弹性也不仅仅限于针对单节点的内存和CPU的弹性。现在很多大客户出现了很大的读写场景,这个时候,我们就需要做到让只读实例也可以进行独立弹性。
只读实例的弹性有两个方向,一个是数量的弹性,就是到底当前需要几个只读节点来支持业务运行。什么时候需要增加或者减少只读节点。另外一个就是垂直弹性,就是在单个只读节点上如何增加或者减少计算资源(CPU,内存)以便增加或者减少业务承载量。当然,伴随着只读节点的垂直弹性,系统对应的proxy也需要有垂直弹性的能力。下图展示了系统的垂直和横向弹性能力。
再次,当系统完全没有业务负载的时候,TDSQL-C Serverless可以先暂停计算实例。当系统重新有业务负载的时候,TDSQL-C Serverless可以秒级冷启动数据库实例,迅速恢复工作,真正的做到了用户使用多少资源,只收取使用的资源的费用。
TDSQL-C Serverless默认情况下10分钟内没有用户连接,就会回收计算资源。这个默认时间,用户也可以自己定义和修改。如何在后台实例被暂停以后,能够做到秒级冷启动,是一个技术难题。
TDSQL-C Serverless创新地引入了链接不断转发请求能力来解决这个问题。具体来说,在接入层加入一个恢复感知器 perceptron,来实现秒级冷启动。
该方案的核心是通过perceptron和客户端握手后,先不断开链接,,在数据库实例恢复以后,与TDSQL-C握手,后续转发四层报文。具体流程如下图所示:
在实例暂停的状态下,有连接发起的时候,MySQL客户端会首先同preceptron握手,如上图P0所示。preceptron会向对方回复“随机数A”挑战,如P1所示。随后MySQL客户端用自己的账号密码和“随机数A”来计算并回复自己的“登录答案A”,如P2所示。
Preceptron并不储存用户账号和密码,所以无法校验“登录答案A“。但是真正的TDSQL-C可以,所以preceptron通过P3唤醒TDSQL-C。TDSQL-C醒来以后,它看preceptron,也是个客户端,它给preceptron也发了新的”随机数B“挑战,如P5所示。
Preceptron回复一个由TDSQL-C团队实现的特殊报文P6。这个报文里面同时包含了"随机数B"挑战的”登录答案B“,以及“随机数A”和“登录答案A”。
TDSQL-C收到这个特殊报文会做两次校验,首先校验“登录解答 B”,再校验“随机数 A” 和 “登录解答 A” ,完成用户身份登录,并回复成功登录。如图P7所示。Preceptron收到P7以后给用户恢复登录P8,如图所示。
这样,在用户毫无感知的情况下,后台就完成了TDSQL-C的冷启动,和系统成功登录。接下来新增的链接就转为客户端和TDSQL-C的实例直连了。
这个直连是通过VIP权重来实现路由的定向转发。当实例处于暂停状态的时候,仅保留Preceptron路由,当实例恢复以后,同时保留prec和TDSQL-C路由,并把权重设置成TDSQL-C 100%。这样就保证了新链接都可以直连。
这个设计比我见到的其他同类产品的设计都巧妙,通过两个随机数挑战进行鉴权是一种很有优势的做法。Preceptron里面不需要存储用户名和密码,这样安全系数很高。
最后,TDSQL-C Serverless引入了创新的计费方式,让用户真正的感受到实惠。TDSQL-C Serverless有一个新的概念CCU(TDSQL-C Compute Unit),简单来说,1个CCU等于1个CPU+2GB内存。
系统间隔5秒钟进行一次CPU和内存的采集,然后按照CCU=max(CPU, MEM/2, 最小规格)记录当前的CCU使用情况。如下图所示:
系统按照1小时内的平均CCU进行计费。这个计费方式比同类型的产品要合理很多。同类型的产品通常采用1小时内的最大规格按量进行计费。最近还推出了新的资源包计费模式。资源包可以提前购买,然后消费使用。资源包比同规格的数据库使用,最高降幅25%,真正帮客户做到了实惠。
TDSQL-C Serverles可以应用在很多的场景里面,比如说慢查询、定时任务、归档数据库、低频访问业务、开发测试环境以及活动类场景。
所有的这些场景,都是负责不确定的场景。用户使用TDSQL-C Serverless,无须担心什么时候需要扩容,什么时候需要缩容。通过TDSQL-C Serverless的极限自动弹性扩缩容能力,和按使用付费的计费方式,用户可以很有效的降低成本。
一个典型的案例就是微信云托管。微信小程序用这个平台打造了Serverless的概念。这个平台的底层数据库就使用了TDSQL-C Serverless。下图展示了通过微信云托管使用了TDSQL-C Serverless的一些小程序:
TDSQL-C Serverless很好的满足了客户们对云数据库产品的朴素的要求:像自来水一样,方便,实惠。展望未来,TDSQL-C Serverless一定能像一个大坝一样管好水资源,为所有的客户进行最方便实惠的灌溉。这也是云数据库产品的未来发展方向。
最后,新一期的《腾讯云工具指南》也详细分享了如何使用TDSQL-C Serverless服务实现数据库极致弹性,同时,还系统性介绍了腾讯云《TDSQL-C MySQL 数据库开发者认证》的实验考试内容。对数据库技术及资格认证感兴趣的朋友可以点击原文链接或下方图片下载了解更多。
﹀
﹀
﹀
-- 更多精彩 --
腾讯云TDSQL-C重磅升级,性能全面领跑云原生数据库市场
TDSQL-C 数据库开发者认证来啦!
↓↓点击阅读原文,了解更多