分布式数据库TiDB是如何结合OLTP和OLAP的?

TiDB是一款开源、云原生、MySQL兼容的分布式数据库,可以处理混合事务和分析处理(HTAP)工作负载。它是“NEWSQL”关系数据库的一员,被设计为方便大规模部署。也许有人想知道,“Ti”代表了钛。

PingCAP在三年半前才开始搭建TiDB,但是这个产品已经拥有了15000次GitHub点赞,200名贡献者,7200次提交,2000个分支以及300名生产用户。最近TiDB获得了InfoWorld Bossie Award 2018数据存储和分析领域最佳开源项目奖

在这篇文章中,我将介绍TiDB设计的核心功能和架构,覆盖数据库的三个主要用例,并预览了PingCAP即将推出的多云TiDB即服务和TiDB学术版。

TiDB功能

TiDB的核心功能包括弹性的水平可扩展性,有ACID保证的分布式事务,高可用性以及实时交易数据额分析。让我们来看一下这些功能背后隐藏的平台架构。TiDB平台有以下这些组件:

  • TiDB:无状态SQL层,可以兼容MySQL,用Go语言开发。
  • TiKV:分布式事务键值存储,用Rust语言开发。(TiKV最近成为了云原生计算基金会项目)
  • TiSpark:Apache Spark插件,连接到TiKV或者专门的柱状存储引擎(我们还在研究的部分,请持续关注)。
  • Placement Driver(PD):Etcd提供的元数据集群,管理并调度TiKV。

TiKV是基础层。这是所有数据持久化的地方,自动分成小的块(我们称为“区域”),并通过执行Raft一致性协议自动复制并保持强一致。和Placement Driver(PD)一起,TiKV可以复制节点、数据中心和地理位置的数据。它还可以动态地去除形成的热点,并拆分或合并区域,以提升性能和存储使用率。我们在TiKV中实现了基于范围的切片,而不是基于哈希的切片,因为从一开始,我们的目标就是支持全功能的关系型数据库。因此TiKV也支持不同类型的扫描操作:表扫描、索引扫描等等。

TiDB中的无状态SQL层用来负责所有的的在线交易处理(OLTP)工作和80%的常规在线分析处理(OLAP)。这样的设计提升了常规性能(参考我们最新的TPC-H基准测试),这个无状态SQL层使用TiKV的分布式设计,通过协处理器层将部分查询下放到不同TiKV节点进行并行处理。

对于更复杂的OLAP工作,比如说训练机器学习模型的迭代分析或实时业务智能采集,是由第二个无状态SQL层TiSpark负责的,也是直接从TiKV获得数据。TiDB兼容MySQL,而TiSpark兼容Spark SQL。

\"image\"

TiDB平台架构

TiDB架构

你可能已经注意到,整个TiDB平台是模块化的,所有的组件都有单独的代码库,并且是松耦合的。你可以将整个TiDB平台部署为一个完整的包(大多数用户都是这么做的)或是根据你的需要部署其中的一部分。这样的模块化的架构给用户提供了最大的灵活度,并符合云原生架构标准。根据CNCF的官方定义,云原生技术是“有弹性的、可管理的和可观察的松耦合系统”。

作为TiDB的用户,你可以扩展你的无状态SQL服务器或TiSpark层(也就是你的计算资源),或者是单独扩展TiKV(也就是你的存储容量),允许你充分利用消耗的大部分资源,更好地满足你的工作负载。你几乎可以将TiDB无状态SQL服务认为是在TiKV之上的微服务,它是持久化数据的有状态应用程序。这个设计有利于隔离缺陷,更快地滚动升级和维护,而破坏性更小。

TiDB这些优势的代价是额外的部署和监视复杂性,有更多需要追踪的部分。然而,随着Kubernetes的兴起以及CoreOS推动的Operator模式,部署和管理TiDB是简单、直接并且日益自动化的。开源的TiDB Operator for Kubernetes可以帮助你在任何云环境下(公有、私有或混合)部署、扩展、升级和维护TiDB。TiDB默认安装Prometheus和Grafana,所以可以立即进行监视。(查看我们的TiDB Operator教程

灵活的技术资产扩展性是业务成功与否的最终关键。这就是你会成为下一个Facebook还是下一个Friendster的区别。TiDB模块化和Kubernetes的加入可以给你的数据库服务带来灵活的扩展性。

最后,让我们来看一下TiDB的三个主要用例:MySQL扩展性、HTAP实时分析和统一数据存储。

\"image\"

示例Grafana仪表板监视TiDB部署

TiDB用例:MySQL扩展性

由于TiDB兼容MySQL,它同时兼容MySQL连接协议和MySQL生态系统工具,比如MyDumper和MyLoader,对于MySQL用户来说,这是解决问题的自然选择。我们需要清楚,TiDB并非要取代MySQL,相反,它是MySQL的补充。MySQL仍然是很好的单实例数据库选择,所以如果你的数据大小或工作负载不大,那请继续使用MySQL。但如果你还在头疼这些问题

  • 考虑如何复制、迁移或扩展数据库得到更多容量
  • 寻找优化现有存储容量的方法
  • 查询性能慢
  • 研究中间件扩展解决方案或实施手动分片策略

那么请开始考虑使用像TiDB这样的分布式SQL数据库吧,它可以帮你解决你关心的所有问题。MySQL分片的缺陷让世界最大的单车共享平台之一Mobike选择使用TiDB(阅读Mobike案例)。Mobike在200个城市拥有9百万单车,服务于2亿名用户,因此不难想象团队使用MySQL时候会遇到的扩展瓶颈。Mobike通过在MySQL之外部署TiDB,以及PingCAP的企业级工具套件,包括可以自动将MySQL主机和TiDB集群同步的Syncer,解决了弹性扩展需求。

TiDB和其他MySQL兼容数据库之间最主要的区别在于TiDB的分布式架构。MySQL技术已经存在了23年了,它从来没有打算涉足于分布式领域。比如说,不像TiDB,MySQL不能产生查询计划,将部分查询下放到多台机器中同时进行并行处理。TiDB的SQL解析器、基于成本的优化器和协处理器层从头开始构建的,利用了分布式数据库的计算资源和并行性,因此MySQL用户可以从中获得更多功能。

TiDB用例:HTAP实时分析

HTAP(混合事务和分析处理)是Gartner在2014年提出的一个术语,描述打破事务和分析数据工作之间隔阂的数据库架构。目标是给企业实时分析,这样就可以作出实时决策。其他行业分析公司有描述这个架构的专门术语:451 Research的HOAP(混合操作分析处理),Forrester的Translytical以及IDC的ATP(分析事务处理)。

正如我们讨论的,TiDB通过解耦计算层和存储层,并使用不同的无状态SQL引擎(TiDB和TiSpark)来做不同的分析任务,打破了OLTP和OLAP之间的隔阂。这两个引擎都连接到同一个持久数据存储(TiKV),让系统自然拥有实时分析和决策的能力。复杂的ETL过程被简单化,”t+1”延迟不复存在,TiDB中存储的数据可以更有创造力地进行使用。

服务于5百万用户的大型生鲜产品运送平台Yiguo.com在TiDB之上运行Apache Spark(阅读Yiguo.com案例)来加速复杂的查询。通过从SQL Server升级其基础设施,并通过部署TiDB到其现有的MySQL,Yiguo.com可以高性能地在中国最大的在线购物节双11运行复杂的连接运算,进行实时决策。

TiDB用例:统一数据存储

分布式、模块化、HTAP数据库TiDB被设计为可以水平地扩展计算和存储容量,灵活地适应不同的工作负载,同时还是“唯一可信来源”。通过在键值存储之上提供可扩展的SQL服务,TiDB旨在动态地降低基础设施栈中维护数据管理层的人力和技术成本。

对于世界上最大的食物配送平台之一Ele.me来说,想要统一数据存储是采用TiDB和TiKV的关键原因之一(阅读Ele.me的案例)。之前,Ele.me的数据分散在不同的数据库中,包括MongoDB、MySQL、Cassandra和Redis。最终,这个临时堆栈不再可用,因为操作和维护成本不断增加。现在Ele.me 2亿6千万用户的80%操作在单个TiKV部署下服务。这个TiKV集群跨越了4个数据中心,每个都有100多个节点,存储了十几个TB的数据,这些数据总是存在,一直可用。

多云TiDB即服务和TiDB Academy

自PingCAP开始搭建TiDB已经超过了3年,该数据库在各种情况下都进行了测试。现在,超过300家公司都在使用TiDB满足他们的OLTP/OLAP、数据库扩展性、实时分析和统一存储的需求。然而,TiDB的路线图上还有许多目标。

其中一个是全面管理的多云TiDB即服务,可以在各种云设置下使用,包括公有、私有和混合。PingCAP正在开发企业级、全托管、基于Kubernetes的TiDB,并将在今年年底发布第一个版本。如果你想要更早地使用,请在这里注册。

PingCAP开发的另一个项目是TiDB Academy,这是自己制定进度的实践课程,帮助数据库管理员、devops以及系统架构师理解TiDB的架构、设计选择、长处和短板。第一个课程“给MySQL DBA的分布式数据库TiDB”正在招生。你可以在这里注册。

如果你想快速了解TiDB,请参阅我们的TiDB快速入门指南

Kevin Xu (twitter: @kevinsxu)是PingCAP全球策略和运营的总经理,特别负责云产品管理和策略。

查看英文原文How TiDB combines OLTP and OLAP in a distributed database

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值