00:00
我开始了。喂,大家好。啊,我是杨吉啊,腾讯的工程师,我是负责T-C的这个数据库产品的研发,以及t service产品形态的一个设计和表达,这我来介绍一下这个service如何让用户可以像自来水一样用这个数据库。这是整个的目录啊,Service的,我们先知道它的特点与架构,它的应用与场景,最后做。总结展望。先讲架构与特点。然说到service呢,其实大家都会有印象,说这是一个函数计算,它这个呃对外宣传最多,那其实根据CNCF定义呢,Service其实分为嗯跟bus,它更多的是描述的是一云产品是否能满足一些呃特殊的的一些产品能力,它更多是个形容词啊。如果一产品它能满足说不需要用户去自动人工的运维,然后不的那个有自动能力,以及它的使用计费是非常的贴近用户使用,比如按量计费,按使用次数计费。
01:14
形态,它就可以称为service。在那个上其实就是function数数计算,这个我们在其他的一些文章看到比较多,其实就是嗯代替的CM这种形态去做一个服务的展示,他就说嗯提供一种计算的服务,他是不需要用户去自己进程,然后嗯。用API方式访问,然后它能够自动缩按调用是收费,所以它是它,所以它属于满足这个形容词。但是bus呢,其实有是全称是back and service,就后端服务,其实我们很多的云产品都是属于back and service,包括对象存储,消息队列这些都属于service,那大部分的,嗯,大服呢,其实都是满足这个要求的。
02:06
就如这种变存储啊,它就是你存了多少的存储量,它就可以扣多少钱,然后它你是按下载次数,你带宽来进行收费啊。所以就是贴近用户的一个使用收费,而不是预付费,但是我们的数据呢,其实并没有满足这个要求。我们来看一下,为什么云数据库不行呢?云数据库,目前业界常用云数据库呢,其实嗯帮助用户实现的这种高可用组成复制,以及做嗯自动备份能力,用户如果改错了数据,可以做快速的回档。但是嗯,就是解决了这个D或者开发者这个运维的痛点,但是它在自动扩缩容以及这种计费模式上确实是非常的传统。是要预规划这么一个形态,就是你在购买时,你就要说我要买一个四核CPU,四核内存8G,然后磁盘的一个T这样的一个实例啊,然后就就开始计费了,即使你刚开始停第一天可能什么都没有用,服务还没布起来,你就开始收费。
03:11
这么一个形态,但为什么传统云数据库就是要这么的僵硬呢?就是最主要问题在于它是统计、部署、计算和存储的。以左边图为例啊,就比如说嗯,举个例子,它是以那个字段进程和存储资源统计部署。你搜后就跑到一个计算机能上,它消耗的是那个CPU里程资源,你的那个数据的啊,你的那个就写在那个当本地磁盘上,如果你本地磁盘已经达到90%了,那这台机器剩余的资源,剩余资源资源是不能把书卖出去的,比如说有有用户有个十核的实力,他当前只用一盒,那剩下的九盒他没有办法分配给其他用户。那自然而然,那这个用户虽然满十盒只用了一盒,那他那个九盒也必须得付钱,就是他不能按使用资源去计费的,这个最大的原因在这里,那反过来也是一样,当你的呃这段资源快不满的情况下,你的存储资源其实还有很多空闲,你无法分配给其他用户,就导致他的云平台这个分时用能。
04:14
资源能力比较差,也就是说用户需要提前去购买一个打包套餐,CPU多少,存储多少。反过来看我那个。反观看我们这个海计,它为什么能做?因为海计算它是一个的计算的服务,它没有储资源,或者资源根本不重要。他主要关心他的CP怎么分配就可以,空闲CPU完全可以分配给其他用户,也就他也就是说他的资源分配决定了他的模型是非常灵。对象存储也是一样,它是一个纯存储的这么一个应用,它没有计算资源,或者他计算资源也也不是那么重要,不会满负载的情况,就它可以完全的就是你用多少存储计算多少存储费,你不用说我提前买一个1T的空间。
05:05
所以我们要做云数据库的策划。我们要做的第一步就是结。其实是我们云原生数据库T-C做这么一个事情,就存储分离分成两层。底下是一个存储池。是个啊,它可以认为是一个啊,分布式的一个存储集群,如果存储式不够的话,我们就平行的加机器就可以了,然后上面是个计算层,计算层以每台机器为单独去看资源。假如这台机上有空闲的资源,我们完全可以把空闲的资源分配给其他用户,用户访问存储池,这上面空闲资源不依赖于这台机器上本身的存储资源的限制,就导致了我们计算和存储结尾之后,我们每一层的这个资源利用率可以最大化的利用。不用受另层的约束,这是第一点,最重要优的优势。第二优势是我们这个跨界扩的很快,打个比方,比如说这个90%上有有一个实力,他想扩容,那本的CP不够怎么办?那我们就会在其他一台空闲机器上,这个资源分配给他,比如这把50%资源分配给他。
06:10
然后把这个进程绑上,存储上,就访问以前的数据了。这个时间就是只有一个进程启动的时间和绑定存储的时间,这个时间是秒级的。不,如果换做存储的数据库,他如果要做自动的一个跨机的扩容,该怎么做,他们需要找到也是找新机器,那新机器上存储遥控型,计算遥控型,然后他需要把存储资源。搬迁过去,那存储之前搬迁大家也知道,可能是你可能是GB级和TB级的数据,需要小数级别的搬迁,中间还要建立一个号的组成复制,这个跨界扩容非常慢,非常僵硬。我们总结一下,就是我们做了资源存储分离之后,你本地的资源可以更加灵活的分配。哪怕你本地资源不够,我们跨区扩也是非常快。秒级别。
07:01
然后存储是整个我们service的一个最大的一个实现基础,然后我再往下看,这个是整个service一个架构的一个整体图,大有个整体的概念。我们分了四层,用户通过访问的话,是先访问到接入层,接入层是通过啊,访问到这段层之后,这段层通过啊,从存储层获取数据,访问用户,就这样一个四成情况,然后我们的旁边是有告平台和监控,去做资源和储资源的一个监控和计费,它监控了我们的层是否有多少的CP使用,以及存储层有多少的。空间的占用来进行计费。同时他能发现这个计算层当前的资源,资源利用率啊,是否决定是否要扩容,或者说我们通知管控平台对资源进行一个重新的调整。比如他还发现这个T层啊,自然层它没有那个,嗯。链接数的占用,那他就会通知百分百计算资源进行一个回收,我们就可以做到没有计算资源计费就0CU。
08:05
啊,这个审核架构,然后我们再回来说service我们的,呃,因为刚才也说就是数据库做service,其实还缺少几个特点,就是一个是自动扩缩能力,另个是按真的使用量计费。然后我们做tto service就是呃,T-c service的主要目的就是让用户用数据库,像自来水一样用,就你可以用很多,也可以用很少,你可以就是。然后我们用用水一样,你家用水是按用了多少毫升啊,经常进行计费的。进一步的,我们可以做到,就是你不用这个数据库,你就可以像自来水那样把开关关掉。关掉,你就可以不用更多的费用产生。首先我们来说自动扩缩容,自动扩缩容的话,我们就是希望用户能够,呃,我们能够把。嗯,根据负载去扩充这个实力,那开发者不需要提前去预测,说我这个负载要来了,我还提前做个窟窿。我们就免去这部分的那个工作,他可以像我们希望这个实力呢,我这个数据库是可以像水滴一样,就是你可以少的时候像水滴一样,多的时候可以像瀑布一样产生这个水的资源。
09:13
但是用户有可能会担心,就是我如果。写错了很多资源这选择规格选一个区间,比方最最规格,比方说是一盒2G到两个4G,那我们自动扩只会在这一个范围之内去做一个扩,用户不会用多用超过两个4G。这么一个。形态,然后在实现方案上,我们其实刚开始是有想过一个比较常见的方案,这也是其他厂商比厂商那么一个方案。就是我们这边介绍一下这个矩形框呢,是一个资源限制,两侧矩形框资源资源限制这边看到这个资源限制是一核2G,也就是你刚刚是买的最小规格,就后面的是两核4G框更大一些。
10:01
这个纵轴方向是CU的资源,描述的是很多方向,描述的是内存资源,刚开始的时候我们这个可能没有什么负,买了之后,那CPU呢,是0.1占10%的总轴上,然后用数据库就有八个破这么一个概念,就是你的缓存BP破缓存就是数据缓存在内存里面更快的反馈用户。这边缓存我们用的是50%,也就是这边当前这个场景的1G就2G 50%是1G,然后其他内存包括一些用户链接数或者比例,一些内存可能占了100兆,这一个当前一个低负载的场景用户,如果这时候来了高负载场景的话,那我们CPU可能一颗达到一达到100%。因为限制你这是一盒,所以你此时你不用的更多。然后你的其他内存,因为可能你的电流数变多了嘛,你要负带来,那你的那存可能到500兆,就这边紫色就变多了。是这么个情况。那一般的做法是说,我们在这边发现高负载的话,那我们可能持续一分钟或者五分钟,然后判定你需要扩容了,那我们就把你资源扩大,两个司机。
11:06
那快两个C之后,你的CPU自然就可以用到1.8核或者更高。相应的我们把调成两是四分之样可的数据。提供更好的性能。可以看到这个方案下其实能满足这个扩充的能力,但是它有缺点就在于从第二步到第三步之间是有个监控时间的。它触发到比如说呃,配一般都配在五分的一个扩容时间,那这部分其实用户的业务是受到一个制约,CPU无法用到更高,他虽然你买是最大的规格是两,但其实你在这五分钟之内,你用的是一。比如说另外就是如果你此时病人数来的很多啊。虽然这边是580,你可能验出很多,你可能1000链接,那你可能这边就超出这个总共的2G,再产生一个OM现象,那你的那这就就会重启嘛,这也是非常不好,只是你业务又来了高复杂,但你还在重启这个实例。
12:06
后来我们讨论我们整个方案。我们发现就是,呃,限制就是。就是现在最大规格。矩形框就一直是两个司机的。然后你可以在刚开始的时候用最低的CPU内存。使用。然后我们的负载来了之后,你的CPU可以立刻使用到1.8核。你的内存也可以超过500帧,小一小1G也不会产生OM的现象。那这个时候我们也会通过监控去发现你这个CPU使用率比较高,我们会相应的调整你的。变成两级包破调整还是跟原来方案一样,就是他通过一个监控去把你去做,因为包括调整其实是比较消耗资源,同时他在调过程中。发放过程中它是可以呃,会对内核会产生一些性能影响,所以包括调整是有一个。
13:00
呃,负载变低的时候,我们也会做自动扩容,自动缩容,就其其实自动缩也没有什么,就是你CPU用少了,它就会掉下来,对吧,只用1.8核,你你如果你没有S,可能变成一核0.1核零核什么。此时,我们就会把那包也会相应缩小。其实我们自动缩容,其实就做的是包括的调整。可以看到这个方向就是我们这个第二第三步之间是呃,是有包括的时间,但是第一步和第二步之间的是没有时间的,也就是你的CPU可以立刻用到最高的一个一个单位。然后在这个方案下,我们,呃,在上个方案下,一般的做法是按整个你当前这个蓝色框的资源去给你扣费的,但是在这个方案下我们就不这么做,我们是按你当前使用的这么一个CPU之间去收费,比如当前使用一核0.1核,那么就按零一核收费,如果你使用1.8核,那么就按1.8核去收费。也就是我们说下一章就是我们第二课就是精准的计量。
14:01
根据当前的一个负载去收费,而你不需要去问你自己还没有使用到的资源去收费。我们怎么做?我们是每五秒采集一次资源的产量。包括CPU、内存链接数,但我们这边做了一个呃抽象,就是一个叫C的一个单位,计费单位叫三,叫T-c unit,它只能是CPU和内存以G为单位除以二,以最小规格这三个值取得最大值。举个例子,就比如说刚开始的时候,你这个实例CPU还是呃比较低,这个情况下内存也比较低,那我们就按最小规格0.25来低,就0.25C。然后负载来了,CPU比较高了,那内存还没有B还没上调整,包括还没调整,那我们CPU是最大一个值,就按三进行收费。当然,当你负载过去之后,我们能慢慢收拢,慢慢就BP的收拢。
15:01
B用过程中BB会有一个延迟,但BP此时BB是最大的一个,就内存最大一个,然后一存是1.6g 1.6除以二就是0.8CU。可以看到就是我们就是,呃,基本其实都是每个采样都是秒级的,就是每五秒有一个采样点。因为我们的计费单位就是非常的细,就是。一个是就是你不是一小时去扣费的,而是你就每0.5秒,每五秒都会影响你这个费用。嗯,不是说你这一小时用最大规格,是就按大规格收费,也没有说你啊不足四核按四核收费,或者你看可以看到我这边可以最少0.25核0.8盒,你用到0.7盒也可以,就是你用多少盒就按多少盒收费,没有这种。的话有费用,就你真的用了那么多资源,就可以扣那么多费用,就是精准的计费。然后往这个按矢量计费,再进一步我们做什么,就是就是像自来水一样,就是你可以把这个开关关上,就你就如果你,呃,你没有资源使用,比如刚开始的时候,你想0.25是还是有资源资源使用,但是如果你真的没有访问,我0.25都不想,对不对。
16:12
就我们说这个事,就是你像教程一样把这个开关关上,你不需要计算资源。我们这么做的就是通过这个监控去采集这个计算层的一个当前数的一个情况,如果十分钟之内没有用户链接,我们会自动的收回收这个阶层的资源。那进来就变成这个样子,没有资源,只有有只有数据,你没有CPU内存。这个情况下我们的C就是零,就是那个unit,就是计,计算资源的一个单位,那存储量还是按你原来写了多少数据,那我们就按多少数据进行计。只做钱,不做计算钱,那这个情况下,用户如果进行一个访问,就他接接入厂进行一个访问,那么接入会通通通知我们的广告平台进行一个恢复,那我们就把这个实例唤醒,就变成这样子。
17:03
换进之后,这个资源层又可以绑定,存储完之后,它又可以从存储层获取数据,返回用户,那这个时候我们再对资源层进行一个收费。个招聘明白。啊。然后这边从呃暂停状态到恢复状态,其实有一个比较重要的指标,就是一个冷启动时间,就是你在暂停后,用户第一次访问到你正把实际启动,并把数据提供给用户,这个时间是多少,目前我们网现在是两秒一。然后我们这边也做了非常多优化,这两本目前也是业界比较好的一个成绩了。这个优化主要来自于就是内的优化,因为我们是一个分布的存储,然后我们的那个,嗯,不同的分片上的那个位点是不一样的,我们启之后我们说广播这个所有的存储分片,然后获取一个一致性的位点,今天通过一个败者数加来来找一个连续性的位点,然后把后面的位置都都给截断掉。
18:03
另外我们在内核启动的时候,还进行了很多系统的一个初始化的并行过程,包括BP的并并行,以及它的初始不需要,就是如果你是一个2G的内内存,你不需要,不要刚开始就初始化2G,在后面再把数据加载起来的时候,再去做一个内存分配。以及事务系统的一个并行税法,包括多线程去加上那个配置。然后大家如果对这个T-C的程度分离架构很感兴趣,我这边再简单介绍一下。然后,嗯。算存储分类架构是其杠C,整个设计原则是尽可能的存储组件嘛。层,我们是T,很多个PT上。其实然后。那个云其实也是基于开源的那个去做一个版本,其包括社区的以及C就是那个呃云。
19:05
这些都是我们的那个的前那个上游分支,他们那些系统都可以过来,就是比较好的一个点,第二我们和那个平板那个不一样,是我们是做了一个。维度日志的一个息,还不带写本地的。我刚刚说他是通过一个叫D组件,往下面写那个维度日志,这边会看那个,嗯,这个日志是属于哪个配置的,比如配置零,那么往前面写配置另外个地址写。就是这面是不同的分片嘛,每个分片三个部分,然后嗯,它主从之间不再通过那个同步,我们通过物理以及进行同步。有图同步的话,优点是说他们的组延迟会非常低,就小于一毫秒几点。大概用过云上买这个的话应该知道用变复制的话可能会非常的高,如果你们大师跑过来。这是我们的一个比较大的优势。
20:02
在存储上,我们是基于CS是云硬做一个存储平台,这个平台呢,它可以做到副本就三本间的同步,以及故障的自动迁移,以及做数据校验。另外他也提供这个。嗯,快照以及回答能力,这个速达几比几每秒。以及,嗯。它还提供多种那种充分包括SSD。还有那个H的以及E版本。它提供在。在那个性能和成本上提供多种方案可以让用户去选择。对上,我们是开发这个D组件来接收这个,并且实现一些DB的逻辑,包括日志配的回放和应用。然后把它存在这个三副本的这当中,然后这个这还呃一一一方面接受这个日志,另外一方面也像那个。读写节点和只读节点提供这个配置的访问,当然说用户通过那个访问来访问我的正常,他如果在缓存里面直接返回,如果数据不在缓存里面,它会从底层捞之前的以前以前的配置,淘汰的配置。
21:11
通过从就号房配置一,那从这边配置一拿到就都要用给用户,这L也是一样的。然后我们来介绍一下这个service的应用场景。第一个我想讲就是一个曼达群,曼达群其实大部分业务都有,曼达群呢,往往就是用户没有建好一个索引,它会导致来一个比较大的全或者。表稍后CPU一个。然后要解决,嗯,要满足这些卖询的的话,呃,都会需要一个比较大的一个C的规格,用户如果一个比较大规格的,在大部分场景下都要承担一个比较大的成本。他如果买了个比较小的规格的话,他可能万群就会跑不了,就会卡在那里,可能会影响他的在线业务,对吧。
22:02
然后通过我们这个service数据库看到它的C情况是大部分情况0.6个C的一个费。在少部分情况下,如果有慢照群来了,那我们就按当时的一个CPU使用量进行一个计费。可以看到他就不需要在大规格小规格之间做一个抉择,他只要买一个service,一个区间,他其实大部分情况都是比较低的一个计价水平。如果他买一个1.5核的实力,那他这边其实0.6就能满足他的需求,相当于承担了,嗯,大概提升这个用户60%的成本。然后然后定时任务,定时任务的话,就是也是很多业务会都有这个逻辑,包括会夜间去清理当天的这个过去的数据啊,过去的一些过期数据,然后生成当天的报表。或者在每个月初的时候就计算一下上个月那些账单情况,那这种定时任务也是就是全表扫,你把所有数据扫一遍,算个最大值或者一个平均值,那他也会去,呃,会带来一个比较高的CPU的一个负载。
23:07
这边用户也是要做这个抉择,就是你要买大的实力还是应该小的实力。那大实力就呃要产生更多成本,小事力就无法这些S的一个。运行。那有有的用户他也会比较那个,呃说自己可以说,比如说洗点的时候做一个扩容,一点完成之后再做一个so容,那其实也很麻烦,用了我们这个数据库,其实根本不用做这些事情,用多少就按多少钱收费,这边看他这个用户其实是都0.3次进行收费的。大部分偶尔会0.8计费,你看这个用户我们一直给他节省对70%大概的成本。然后归档的数据库,归档数据库就是长期就是不带对这个实际进行使用访问的,那我们就可以提供一个。你不需要CPU内存的一个付费,比如说用户就有有些学习嘛,他样本你在做实验的时候,你需要,然后你做完实验论文肯定不就不用这些样本,那那你就可以把它直接暂停。
24:10
这边有一个替代方,就是你把这个数据放到对象存储里面,你用的时候把它下下来,自己解析来自己看,那其实我们数据库你在用的时候,你可以直接拉一个固定内核,提供强大的一个分析能力,都不用下载这个过程。你也不用自己去写脚本去解析,所以能帮你建好了。理解,就可以很快的查询里面内容。然后这些地访业务,包括个人博客啊,还有垂直论,还有一些微信程序,这方面我们都和云函数啊,云发都有合作,这些业务都是每天大概20次左右的请求,那请求完之后就不用收费,你帮这些个人用户省很多的钱。然后这是一个比较典型场景,是开发测试环境,就是呃,这一个图是一周的时间。左边是工作日,后面是周末,可以看到这个这个公司它其实是在嗯,周一至周五的工作时间,他才会有访问,以及晚上都不会做访问,以及周末他也没有任何的访问,我们也也是帮助这个公司大概节省了50%以上的这个计算资源。
25:12
他们的研发策略的成本降低很多。再一个就是一个比较低频的业务。就是现在有很多文章都强调什么微服务的概念,但是呃,微服务在你会把服务拆的比较多,那如果你多个微服务使用同一个数据库的话,你可能就会产生相互影响的问题,那微没写好,可能就会把然其他微也不能用你的你的那个数据库,对就数据库,你是大数据库,然后很多一起用,这样的情况就是嗯。不相影响,没有隔离性,那我们就提供了一个0.25的这么一个能力。哦,就每个位服务都有自己的那个独立的数据库,不会相互影响。最后呢,我们是就是还主要强调是我们希望能帮助这些初创企业,满足他们的一个开发开发诉求。
26:05
因为现在创业很很不容易,呃,一方面是那个呃低成本,我们讲那么多,我中间很多我们这个成本非常低,就是我们是按CPU计费,无使无费用。第二个是就是减少运维能力成本,我们也有,我们也有那种满足。呃,像传统数据库一样,提供这种运维的能力,我们只买一个读写节点就可以满足高可用,不需要买一个,或者另外我们还可以提供就是。智能管家不会诊断的的一些异常,或者是给你建议,第三就是我们迭代速度快,我们发货大概就半分钟就能把那个申请出来给到用户,那如果用户改错,改错数据了,或者删错表了,没有GB级的每秒速度。其实是项目如果搁置暂停的话,你不需要把这个实力销毁你就可以啊,只是把计算进程回收了,那半个月一年之后,你可能觉得这个项目可能还有一些可能,你可以把实力唤醒,然后继续用,继续去做这个项目。
27:05
另外就是用户激增的话,就是对嗯。中企其实它很难预测这个用户是会会积增,所以我们就自动扩这部分诉求,那就是一些小微项目,小规模实力,如果说中小企业,打个比方,如果说中小企业是一片片这个性而更农田,那我们这个提出杠C的思数据库,就是想做一个。把一个大巴做好,然后管理好上下的水资源,然后灌溉了下游的企业,我们先把这个资源,水资源你像水滴一样,像瀑布一样啊,也像自来水一样,可以把它盖拧上。对吧,我们提了自动能力能够顺利达到最大的规格,我们能按量费能够使用量计费。认为是秒级别的,因为是无无使用无费用,然后能启动是两秒钟,未来我们也会做一个呃能能启动优化,进一步降低这个能启动的时间,以及解决现在一些不需要重重的问题。
28:03
以及进行进一步降低那个存储的成本。然后就是。
我来说两句