博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分布式数据库TiDB是如何结合OLTP和OLAP的?
阅读量:6606 次
发布时间:2019-06-24

本文共 3712 字,大约阅读时间需要 12 分钟。

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):提供的元数据集群,管理并调度TiKV。

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

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

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

\"image\"

TiDB平台架构

TiDB架构

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

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

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

灵活的技术资产扩展性是业务成功与否的最终关键。这就是你会成为下一个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在200个城市拥有9百万单车,服务于2亿名用户,因此不难想象团队使用MySQL时候会遇到的扩展瓶颈。Mobike通过在MySQL之外部署TiDB,以及PingCAP的企业级工具套件,包括可以自动将MySQL主机和TiDB集群同步的,解决了弹性扩展需求。

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

TiDB用例:HTAP实时分析

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

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

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

TiDB用例:统一数据存储

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

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

多云TiDB即服务和TiDB Academy

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

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

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

如果你想快速了解TiDB,请参阅我们的。

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

查看英文原文

转载地址:http://fdbso.baihongyu.com/

你可能感兴趣的文章
对事件的基本理解
查看>>
111111 排序算法
查看>>
四周第二次课(11月7日) 5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vim一般模式下复制、剪切和粘贴...
查看>>
rpm包介绍、 rpm工具用法 、yum工具用法、 yum搭建本地仓库
查看>>
PyCharm的Column Selection Mode提供了列选择功能。
查看>>
MySQL的索引策略(1)
查看>>
select下拉框,选择其中一个,然后进行查询,完成之后,页面上的select框不回显当前查询时选中的值...
查看>>
python3基础——函数(2)
查看>>
TOKEN设计
查看>>
yum更换国内源、yum下载rpm包 、源码包安装
查看>>
常用Oracle旳SQL函数
查看>>
BCH或将在日本迎来新的上涨点
查看>>
从HelloWorld看Knative Serving代码实现
查看>>
linux`操作文本的三大利器
查看>>
【CentOS 7笔记39】,监控系统状态1#
查看>>
LAMP架构PHP模块支持与虚拟主机配置
查看>>
一块GPU就能训练语义分割网络,百度PaddlePaddle是如何优化的?
查看>>
详解netty原理分析
查看>>
ubuntu sublime text中文输入法和乱码问题
查看>>
病人spark处理-元组和case class 对数据进行结构化
查看>>