写点什么

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

  • 2018 年 11 月 13 日
  • 本文字数:3473 字

    阅读完需:约 11 分钟

分布式数据库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。



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 实时分析和统一数据存储。



示例 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


2018 年 11 月 13 日 22:314297
用户头像

发布了 217 篇内容, 共 55.5 次阅读, 收获喜欢 71 次。

关注

评论

发布
暂无评论
发现更多内容

第四章作业(二)

墨狂之逸才

架构师训练营 4 期 第9周

引花眠

架构师训练营 4 期

第五周作业-第四章作业(二)

Geek_72d5ab

最值得阅读的数据仓库书籍推荐

白程序员的自习室

大数据 数据仓库 推荐书籍 数仓 构建模型

(28DW-S8-Day9) 区块链如何对坏节点容错:拜占庭将军问题

mtfelix

28天写作 拜占庭容错 拜占庭将军

区块链架构下的智慧城市发展加速

CECBC

信息安全

产品经理训练营 - 作业五

胡小湖

易语言使用与研究

慕容

易语言

mybatis的通用插入更新方案

altantisor

Java mybatis

dubbo 源码 v2.7 分析:SPI机制

程序员架构进阶

Java spi 七日更 28天写作 2月春节不断更

Java 中 Vector 和 SynchronizedList 的区别

看山

Java 线程安全 vector SynchronizedList

SQL Server 多表数据增量获取和发布 1

happlyfox

学习 28天写作 2月春节不断更

诊所数字化:诊所私域直播

boshi

直播带货 数字化医疗 七日更 28天写作

SwiftUI数据流之State&Binding

kingnight_pig

ios swift SwiftUI

数字经济发展的时代特色

CECBC

数字经济

业务中台建设 - 4种部署模式

孝鹏

部署图 隔离性 中台架构

“他者”德意志(三):“翻险峰”的德国电动汽车产业

脑极体

SwiftUI数据流之StateObject& ObservedObject探讨

kingnight_pig

ios swift SwiftUI

【LeetCode】单调数列Java题解

HQ数字卡

算法 LeetCode 28天写作 2月春节不断更

Linux入门篇 —— 一文带你彻底搞懂Linux 文件权限管理

若尘

Linux 权限 linux 文件权限控制

论文阅读:通过动态预测/完备在稀疏知识图谱上进行多跳推理

Alocasia

自然语言处理 深度学习 nlp 强化学习

一文搞懂Cookie、Storage、IndexedDB

执鸢者

大前端 Cookie indexedDB storage

Deno VS Node(含Deno真实业务场景实践体验)

秋呈

软件工程 开发 deno Node

我眼中的IT售前工作

小谢同学

云计算 职场 解决方案 售前

架构设计篇之微服务实战笔记(九)

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作

谈学习

Ryan Zheng

学习方法

2.2 Go语言从入门到精通:Go语言变量

xcbeyond

变量声明 28天写作 Go 语言

模型评估指标-1-基础篇-FPR/TPR/F1/ROC/AUC

一直学习一直爽

机器学习 模型评估 分类模型 一直学习一直爽

c++基本语法详解

张鹤羽粑粑

28天写作 3月日更

用例2

z

作业 - 第四章 业务流程与产品文档 (二)

hao hao

撑起瞬时千亿交易额的云数据库是怎么炼成的?

撑起瞬时千亿交易额的云数据库是怎么炼成的?

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