ArchSummit深圳站7折本周截止,点击立减2640元>> 了解详情
写点什么

分布式数据库 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:314455
用户头像

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

关注

评论

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

男人要慢,SQL要快:记一次慢SQL优化

艾小仙

Java程序员必备框架—Spring全家桶的前世今生详细梳理

北游学Java

Java spring

Using side features: feature preprocessing

毛显新

自然语言处理 深度学习 tensorflow 推荐系统 keras

瞥一瞥AI,撩一撩算法

博文视点Broadview

AI论文解读丨融合视觉、语义、关系多模态信息的文档版面分析架构VSR

华为云开发者社区

语义 视觉 多模态信息 文档版式 VSR

WorkPlus高端制造业数字化解决方案—首发集团

WorkPlus Lite

开源 企业 即时通讯 移动开发

Java集合源码总结分析

详解Camtasia的PPT录制功能

淋雨

视频剪辑 Camtasia 录屏软件

手把手体验远程开发,确实爽

程序员鱼皮

Java Python 软件 大前端 后端

3D地图与3D柱状图联合使用

森友小锘

大前端 地图 可视化 数字孪生

Erda 1.1 版本发布|3 大亮点特性最新解读

尔达Erda

开源 云原生 k8s PaaS SaaS

SpringBoot自动配置原理解析

杜少雄

spring Boot Starter

INFRA-JOY微服务治理验证工程实践分享

徐敏

微服务 自动化测试 全链路压测 性能压测

以两种异步模型应用案例,深度解析Future接口

华为云开发者社区

Java 模型 异步 FutureTask Future接口

兰宝环保 | 新体系“行动计划”中化工制药行业VOCs废气治理要点

叶落便知秋

大数据实战训练营Hbase作业

Clarke

WorkPlus高端制造业数字化解决方案—科达洁能

WorkPlus Lite

开源 企业 解决方案 即时通讯

本夕生活小程序定制开发

ALVIS

TensorFlow Recommenders: Quickstart

毛显新

深度学习 tensorflow 推荐系统 keras

泰国Ascend Money用开源软件加快应用交付

WorkPlus Lite

阅读

小白必看,通俗易懂的LockSupport

程序猿阿星

Java并发 线程协作 LockSupport 线程间通信

大厂面试真题——Netty/IO篇,你能答上来几道?

Java架构师迁哥

1.6W字!梳理50道经典计算机网络面试题(收藏版)

互联网架构师小马

来吧!一文写清前端面试难点及考点

前端依依

面试 大前端 经验总结

数据对AI的重要性:采访首席数据官Rick McFarland - LexisNexis Legal & Professional

WorkPlus Lite

阅读

IDEA http client无法解析enviroment file

crazylle

IDEA http client Alibaba Cloud Toolkit

剖根问底:Java 不能实现真正泛型的原因是什么?

沉默王二

java

中易通科技禾禾实验室产品培育田

叶落便知秋

CloudQuery v1.4.1 发布 | 开放「组织架构」模块 API

CloudQuery社区

数据库 数据安全 OpenAPI 数据库管控

女巫面具系统模式开发

ALVIS

区块链去中心化钱包开发|开发去中心化钱包

Geek_23f0c3

钱包系统开发 去中心化交易所系统开发 去中心化钱包 去中心化交易所

头号云话题:进击的开源操作系统

头号云话题:进击的开源操作系统

分布式数据库TiDB是如何结合OLTP和OLAP的?_数据库_Kevin Xu_InfoQ精选文章