PingCAP创始人刘奇:TiDB设计理念进化与大规模实践

简介:

我今天介绍一下我们PingCAP的设计理念进化和一些实践。

到现在为止TiDB已经开源有三年零两个月,我是TiDB CEO,打杂比较多,偶尔写写代码。

142a3aaa7667819d6f3842b15419d48fecb482f9

为什么做这个?我们被无数人问到这个问题。当初为什么我们要做一个分布式数据库?作为程序员我相信很多人很愿意花些时间写代码写自己的东西,然而一直没有非常理想的机会。

第二个不用关心容量规划,程序员不知道这个东西最终能增长多少倍。

第三个任意时候都能扩展,弹性伸缩。大家都有这个经历,凌晨三点做扩容经历。

第四个,已有成本迁移,这是没有办法去避免的问题,现在有大量的产品在已有数据库在跑着,我们希望得到更好的弹性。

fb9d45e6039986a3576f24a8e78ccc522af22d60

在定这些目标之后我们开始做行动,作为数据库厂商,大家通常担心的第一件事情是产品的正确性,特别是算法的正确性证明。如果算法是错的,我们算下来100%是错的。所以我们对于每个算法,每个改进都先写证明,我们把所有证明过程也开源了。写证明会发现整个系统里有大量的并发问题。

cbcbf6dcf328a9e4ff8f461f4688196211c1f2c7

另外几点水平扩展、高可用。因为大家知道数据库情况很复杂,整个系统的复杂性,我们有点类似于像微服务的思维,把整个系统分成几层,存储层、计算层、调度层,彻底分开,分别变成不同的。产品总体看起来是这样的,大体上是MySQL协议支持,SQL layer、tiKV,调度器会动态把一些数据移动、分裂,让所有的数据在整个系统里都是动态的,这也是不同其他的地方。近距离看大概是这样的,时间关系不详细展开。

2e67f2c30a002e02d9f8de11403d28237335d484

从SQL角度来看,我们有逻辑计划,逻辑计划做优化最后会变成物理的plan。下面整个底层是存储层。

38e8dae4d201285da85bdebb69bcbc4b12d52ac2

从用户角度来讲,用户通常不关心说我到底是OLTP还是HTAP。Oracle从一开始设计,考虑新产品上线的时候大家觉得紧张,觉得数据库上去会不会是安全的。我线上已经做了库分表,或者线上已经有多个业务在跑,我现在需要有一个平台去查询已有的所有数据,于是他们就干了这样的一件事情,搭了一个大的TiDB咨询,把全公司所有业务全部导在这上面进行同步,这样TiDB就变成了很有意思的数据中台,全公司的数据都可以在毫秒级内去做查询。

我们当时看这个案例都惊呆了,觉得我们不是用来干这个事儿的,后来用户把TiDB用成认证SAP的场景,比较早期它一上来解决这样的痛苦,当时TiDB完全没有想到。后来我们慢慢想明白了当你把所有数据放在一个平台上的时候,你在这个平台上做查询你把原来分库分表写的很痛苦的问题,每天晚上做分析,这个已经不满足现在社会需要,大家希望在毫秒级对数据进行决策,比如说分控

这是我们存储层整体的用户感受,存储层为SQL提供,一个是分布式事务,再也不用操心这个事务是分布式事务还是单机事务,我们只提供一种就是分布式事务,不管什么操作都是满足数据属性的。刚才我也提到数据被拆分很多层,它已经拆分可以合并,这个好处在于什么?

这时候分库表就会非常痛苦,它会自动把这个块切成多块再分布多个机器里,它会做自动的负载均衡。当我们有很多这样小块出现,这些小块平时可能有很少访问的时候,我们会尝试把它变成大块,可以对它进行分裂、合并。这块很明显看到,TiDB和其他数据库的理念差异,我们认为所有数据库都应该是动态的,而不应该是静态的。同时我们也会把SQL计算,把函数会推到存储节点,这样减少中间的环节。

0541cac25a6728a61e642c09cc3857290ecfaa1e

这是一个大图,TiDB怎么做到高数据中心的强一致,单数据中怎么挂节点,怎么确保数据可用。通常部署是这样的,通常有三个副本,用颜色标出来,然后是协议复制。这是通常的线上的部署的场景,对于金融环境,比如说像银行,我们一般推荐5个副本。这个也是符合google当初提到的,他们推荐的是7个副本。取决于数据库的重要性。

e2087189e39f078ac097102b021daddbcb169e6f

接下来说一下我们的实战经验,刚才我提到大中台业务,实时把公司数据会聚在一起,因为它是很自然的需求,也是一个完美的替代方案。这是历史上很有意思的使用逻辑,刚开始把数据同步,可靠性都能达到要求的时候,就把前面分库表撤下去直接把它打到集群里,这时候整个系统就高度一致了。这是一个更加好理解的图,中间所有的数据都可以通过Syncer,进行数据同步。目前我们数据量特别大的场景里,这种场景用的比较多。

4c01205edc32c214186233dd281b8ed4cdad7147

考虑到实时性和Spark生态,我们提供Spark connector,它会绕过TiDB层直接跟Tikv层,期间减少转换开销。

74583c8c107cb17af8915454e3d0962f813768df

这是非常典型的异地多活架构图,也是目前我们在银行里实施的整体架构。目前一部分核心电子交易系统也使的这样的架构,通常使用5个副本,大体上是这样的,在整个系统里代表数据块,可以看到对于同样的一块数据,我们会让它复制在多个数据中心,同时通过调度器会将相同的数据块leader调度到离业务比较近的一块地方,这样一来业务去访问的时候延迟就会比较低,这就是有一个很好的调度器带来的好处,它可以控制数据,按照需要去做分布。比如说如果这时候我们要维护一个数据中心,假设我们要维护这边的IDC,这时可以把数据录入到其他地方,等它恢复之后再挪过来。

1abea7ce7fa926dbbd4590b7f9f6512dbd0ed22d

这是转转前一阵分享的案例,转转All in TiDB,把以前的很多业务都迁到TiDB上面,当时微信支持转转,他们当时增长约五倍,有一篇非常详细的文章,分享时间会比较长。我这边稍微小结一下,他们目前的上线情况,上线11套OLTP系统,1套OLAP系统,完成90%的数据迁移,TiDB数据千亿级表,万级TPS。这个地方他们分享了一个截图,在他们放量期间,整个TiDB响应时间非常的短。

37a14cce7f4c22651b79e17795834ad0cc9bc07e

美团昨天刚刚发了一篇文章讲他们自己的使用经验,目前上线了大概200台物理机,上了10多个业务,以前的时候美团主要数据库用的MySQL、NoSQL,同时他们有一个自己的研发。当然融合起来都非常的痛苦,同时美团用了很强的研发能力,也在参与TiDB的开发。当时他们选择新一代数据库的定义几个重要目标,一个支撑未来几十倍数据增长目标,数据库其中是很重要的一个组件,所以在数据库选型花了大量的时间,应该是以几个月时间对数据库做各种的测试,对于数据库原理的理解,对于数据库阅读,最终对比之后他们选择了TiDB。

7b2ab871f9b6da02bb1f626d27184d307a45a100

这是目前在美团上线10套系统里分布的范围,分到6个事业群和平台。刚才我也提到,在线上层开启Region,整个系统会自动把小的数据块合成大的数据块,永远有调度源根据负载做调度,这是加快删除数据后的空间回收速度。

8e7ff0f72a7da9111c1bc1a39bd2b993e31f90cd

美团推广速度非常快,大概只用三个月时间就上线这么多系统,后来我们也去找美团同学请教经验,为什么推广这么快?他们有专门的地推小组,第二有专门的研发同学和我们有直接的合作,直接是代码级别的合作,也会发布他们自己对于TiDB的改进经验,还有一些从研发层面的源码改进。这是HTAP的案例,这是易果生鲜,他们非常符合刚才我们提到的大中台的结构,就会数据同步

b12279801509ab1590376f9f5b598ce342094d01

讲商业银行之前,我想说一句,根据我们自己的统计,目前30亿美金以上的互联网公司已经有8成用了TiDB,我当时看了也觉得特别的震惊,我相信明年会更多,这是国内的一个商业银行的多活的交易系统里面的部署结构。这部署结构相对来说,看起来很顺畅,按照一个TiDB的标准结构,同时为了数据的绝对安全,我们后来又加了集群,它主要做备份,它有3个副本,所以我们搭建了备份系统。

前一段时间我们看到他们支撑双十一的过程,非常让人过程,双十一是很神奇的节日,可以把一天的流量聚集到那么两分钟。有一篇文章写的很详细,网上有发表,他们怎么用,怎么测试,怎么选型以及怎么上线和上线的经验。

我重点说一下,当一个数据库产品从开始的到用户去用到场景越来越多的时候,需要产品有更好的适应性。在这种情况下产品需要不断的进化,在进化里有很有意思的过程,就像我们人一样,我们一步步往外的。通常情况下,一个MySQL大家觉得合理,大家觉得一行在50列以内是合理的举手?200列以内合理的举下手?400列以内合理的举下手?在很多行业几百列是常态。咱们互联网一般在这些场景见的不多,现在觉得500列已经不够用了,大家需要更多的怎么办?

d60b15d033934bf3ed4326b9dd03c55025dd1e92

那好,我就什么都能存,这时就面临一个问题。SQL有一个问题,当我们把实际减少字段挪出去只处理它的源数据在哪一个位置,它长度多少,我们只需要几十个字节就搞定了。所以我们就把value从LSM tree中分离出来。

Serverless是去年和今年都比较火的话题,TiDB目前已经在上面提供了服务,目前在google GKE和AWS EKS都已经上线,大家可以在这两个平台一键搭建TiDB,目前这两个平台API和 K8S上线非常舒适,我们很好的在线上给大家提供服务。同时正在做的事情,根据负载自动添加计算节点,让大家无感,让大家不用计算,我到底要部署多少个存储节点,这些东西不需要关心,后台自动会帮你做,它会根据负载自动添加或伸缩。

TiDB对于存储要求,我们要求使用SSAD。这时候就会带来大家担心的成本问题,我知道虽然现在MME(音)已经是新的采购标配,不是所有数据都需要在数据库里,需要在内存里有索引,但是对于数据变冷之后,系统应该自动识别冷数据,并且把冷数据自动搬出去,同时保持相对可以接受的延迟,需要时按需做加载做计算,当一个集群到几百T时需要算几百T的成本,这时就需要有一套方式能够把数据的冷热进行分离出来。分离的过程,完全不需要人操作,因为系统可以根据访问数据热度上线时间来决定。简化数据管理最重要,当然存储成本现在已经很便宜,这个也会进一步降低存储的成本。

刚才我也提到用户根本不关心所谓的OLTP、OSTP,能不能搞定,和很好的做隔离。所以在TiDB下一代迭代里会出现全新的结构,在TiDB的三个副本里有三个副本使用列存,它会根据查询特点,这时候根本不进到行存会直接在列存出现结果。同时在扫大范围表里会自动到列存,会把行存列存数据统一出来,这时会有非常震撼的效果,它会像列存行存跑得快,最重要一点不用关心它是列存还是行存,同时访问的时间没有延迟。

如果大家先用现在的版本,会发现现在的版本没有很好的做到在CPU,在内存上的隔离。现在按照队列优先级来的,接下来的版本会看到完全不一样的,同时对优化器产生非常高的要求,以前大家见到所有的优化器都考虑我是行存或者列存优化器,现在

它是智能优化器,它会根据你的特点到底选择行存还是列存去存,还是一部分到列存里,比如ID会印什么,印的这里会在行存里存,其他在列存里,最后折合在一起,这将让我们非常兴奋,我们预期1月份放出第一个可以体验的版本。

很多人知道TiDB,知道TiDB很多事情,也有很多事情可能大家不知道。我说一下大家可能不知道TiDB的一些事情,我们知道TiDB今年拿了最佳的开源软件奖,我印象中历史上好像是第一个国内厂商拿到这个奖,欢迎大家纠正我。

a60531a07a04cf1173ab7ee0c9fe19422b40d049

TiDB也是进了CNCF database landscape,如果没记错,国内厂商第一个进到这里我非常欣慰,这么多年终于可以为国争光了。同时我们也做了一些事情,我们把TiKV给了CNCF,在前两天大会上也是被大家认出来了。作为一个低调厂商,可能这些东西都不知道,我们从来没有做过融资发布会,从来没有做过产品发布会,和大家印象中的很多公司都不一样,我们一直低调做事情,最终还是能看到大家以前看不到的那些东西。我们也进了Big data landscape,好像也是唯一的国内厂商,大家可以看一下这个图,非常的欣慰。

72dae5a08be393347ccff3bf66a5f4e009470220

大家可能不知道TiDB的用户早就分布了全球,大家通常只能看到身边,美团好在用,Oracle在用。大家可能不知道新加坡的也在用,可能也不知道印度在用,台湾也用上了。

3a043fa59b2c81d4dea1656f842dbedd00f5c052

谢谢大家!


原文发布时间为:2018-11-22

本文作者:刘奇

本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”。

相关文章
|
2月前
|
关系型数据库 分布式数据库 PolarDB
稳健前行:PolarDB开源社区调研开始啦!
PolarDB开源社区调研持续进行中!我们会重视每一位开发者的反馈,对提供建设性建议的开发者将会提供精美周边礼品!欢迎大家参与!
|
6月前
|
架构师 Java 开发者
阿里最新丰碑:国内第一本凤凰架构,全面构建可靠大型分布式系统
周志明老师的《深入理解Java虚拟机》想必大家都不陌生,这本书凭借着生动易懂的文风、系统实用的知识点、成为原创计算机图书经典中的经典。周老师凭借一己之力拉高了Java开发者内功水平,把JVM带到了初级面试题环节。
|
8月前
|
SQL 安全 关系型数据库
写在开源前 1 天:OceanBase ODC 开源背后的故事
关于开源协议选择,ODC 开源选择了足够开放的 Apache 2.0 协议,如果和您的产品矩阵能够互补,我们鼓励基于 ODC 开源项目打造自己的完整解决方案提供给客户。对于 OceanBase 而言,这其实也有助于实现最理想的企业级软件销售模式 “分销”,从数据库厂商角度来说,如果能帮助更多合作厂商获得商业利益,销售和交付成本的问题就可以比较彻底的解决。
130 0
|
NoSQL 数据库
今日,迈进NoSQL技术自研无人区
阿里云NoSQL数据库峰会,有奖观看,无型无限,无束可能。
今日,迈进NoSQL技术自研无人区
|
运维 架构师 数据管理
OceanBase Meetup第五期 复杂业务场景下的数据库应用需求及挑战
“OceanBase Meetup”是由OceanBase发起和举办的技术交流活动,每期会邀请对数据库技术感兴趣的技术专家在开放自由的氛围下,分享业界前沿的新兴技术趋势和话题,同时会围绕热点话题进行互动讨论。希望通过线下聚会的形式,让更多的技术人员结识更多行业伙伴,分享和交流技术观点,碰撞出精彩火花。
OceanBase Meetup第五期 复杂业务场景下的数据库应用需求及挑战
|
运维 关系型数据库 MySQL
开源实践 | 六棱镜基于 OceanBase 选型探索与实践
本文将介绍六棱镜关于企业分布式数据库的选型实践,希望帮助有相似应用场景的企业用户高效的进行数据库选型。
299 0
开源实践 | 六棱镜基于 OceanBase 选型探索与实践
|
运维 Kubernetes Cloud Native
云原生体系下的技海浮沉与理论探索
攻技者,短之;理论者,长之;践行者,胜之。可以这么说,一座城市的良心就体现在下水道上,不论这座城市有多少高楼大厦,建设得有多么宏伟,只要是下雨天,雨水就变成了城市良心的检验者。如果由城市建设来类比云原生体系的建设,那么云原生的良心又应该是什么?谁是云原生的暴风雨?谁又是云原生良心的检验者?
云原生体系下的技海浮沉与理论探索
|
OceanBase 存储 索引
首度公开!OceanBase存储系统架构的演进历程及工程实践
OB君:作为一款100%自研的分布式数据库,OceanBase历经了近十年的发展历程。近十年来,OceanBase的存储架构经历了多次演进,以解决业务越来越复杂苛刻的存储需求。本文整理自赵裕众(花名陈群)在2019 SACC中国系统架构师大会中的演讲。
|
存储 前端开发 分布式数据库
首度公开!OceanBase存储系统架构的演进历程及工程实践 | 11月26号云栖号夜读
今天的首篇文章,讲述了:作为一款100%自研的分布式数据库,OceanBase历经了近十年的发展历程。近十年来,OceanBase的存储架构经历了多次演进,以解决业务越来越复杂苛刻的存储需求。本文整理自赵裕众(花名陈群)在2019 SACC中国系统架构师大会中的演讲。
3690 0
首度公开!OceanBase存储系统架构的演进历程及工程实践  | 11月26号云栖号夜读
|
数据库 SQL 存储
蚂蚁金服大规模分布式事务实践和开源历程
本文整理自蚂蚁金服技术专家、分布式事务 Seata 发起者之一张森(花名:绍辉)在 GIAC 全球互联网架构大会的分享。详细讲解了在分布式架构演进中,蚂蚁金服面对的跨服务、跨数据库的业务数据一致性问题以及应对措施,并分享了分布式事务 Seata 的 AT、TCC、Saga 和 XA 四种模式。
2632 0
蚂蚁金服大规模分布式事务实践和开源历程