TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具备数据强一致的高可用特性,是一个不只适合 OLTP 场景还适合 OLAP 场景的混合数据库。mysql
TiDB怎么来的?sql
著名的开源分布式缓存服务 Codis 的做者,PingCAP联合创始人& CTO ,资深 infrastructure 工程师的黄东旭,擅长分布式存储系统的设计与实现,开源狂热分子的技术大神级别人物。即便在互联网如此繁荣的今天,在数据库这片边界模糊且不肯定地带,他还在努力寻找肯定性的实践方向。数据库
直到 2012 年末,他看到 Google 发布的两篇论文,如同棱镜般,折射出他本身心里微烁的光彩。这两篇论文描述了 Google 内部使用的一个海量关系型数据库 F1/Spanner ,解决了关系型数据库、弹性扩展以及全球分布的问题,并在生产中大规模使用。“若是这个能实现,对数据存储领域来讲将是颠覆性的”,黄东旭为完美方案的出现而兴奋, PingCAP 的 TiDB 在此基础上诞生了。缓存
TiDB在总体架构基本是参考 Google Spanner 和 F1 的设计,上分两层为TiDB和TiKV。 TiDB 对应的是 Google F1, 是一层无状态的 SQL Layer ,兼容绝大多数 MySQL 语法,对外暴露 MySQL 网络协议,负责解析用户的 SQL 语句,生成分布式的 Query Plan,翻译成底层 Key Value 操做发送给 TiKV , TiKV 是真正的存储数据的地方,对应的是 Google Spanner ,是一个分布式 Key Value 数据库,支持弹性水平扩展,自动的灾难恢复和故障转移(高可用),以及 ACID 跨行事务。值得一提的是 TiKV 并不像 HBase 或者 BigTable 那样依赖底层的分布式文件系统,在性能和灵活性上能更好,这个对于在线业务来讲是很是重要。服务器
TiKV Server:负责数据存储,是一个提供事务的分布式 Key-Value 存储引擎;
PD Server:负责管理调度,如数据和 TiKV 位置的路由信息维护、TiKV 数据均衡等;
TiDB Server:负责 SQL 逻辑,经过 PD 寻址到实际数据的 TiKV 位置,进行 SQL 操做。
网络
1. 水平扩展:包括计算能力和存储能力。TiDB Server 负责处理 SQL 请求,随着业务的增加,能够简单的添加 TiDB Server 节点,提升总体的处理能力,提供更高的吞吐。TiKV 负责存储数据,随着数据量的增加,能够部署更多的 TiKV Server 节点解决数据 Scale 的问题。PD 会在 TiKV 节点之间以 Region 为单位作调度,将部分数据迁移到新加的节点上。
2. 高可用:TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性架构
1. 因 TiDB 和 PD 对磁盘 IO 要求不高,因此只须要普通磁盘便可。
2. TiKV 对磁盘 IO 要求较高。TiKV 硬盘大小建议不超过 500G,以防止硬盘损害时,数据恢复耗时过长。整个 TiDB 架构是面向将来、面向海量数据高并发场景,底层存储技术(如数据定位 seek)都是针对当前主流的 SSD 进行设计和优化的,不会对传统的 SATA/SAS 机械硬盘再进行优化。(参考凤凰网的部署方案)
3. 部署工具使用了 TiDB-Ansible。TiDB-Ansible 是 PingCap 基于 Ansible playbook 功能编写了一个集群部署工具叫 TiDB-Ansible。使用该工具能够快速部署一个完整的 TiDB 集群(包括 PD、TiDB、TiKV 和集群监控模块)
并发
Pincap 团队给 TiDB 提供了一整套监控的方案,他们使用开源时序数据库 Prometheus 做为监控和性能指标信息存储方案,使用 Grafana 做为可视化组件进行展现。(参考今日头条的方案) 监控的原理:分布式
1. 在 client 端程序中定制须要的 Metric高并发
2. Push GateWay 来接收 Client Push 上来的数据,统一供 Prometheus 主服务器抓取。
3. AlertManager 用来实现报警机制,使用 Grafana 来进行展现
目前今日头条,摩拜单车、凤凰网、游族网络等公司采用了TIDB数据库。
这些企业采用TIDB的主要缘由包括:
1. 兼容mysql
2. 分布式存储,扩展能力强。
3. 支持OLTP
4. 能够直接利用TiSpark作实时分析。
5. 稳定的高可用性
6. 无阻塞在线DDL
1. 拥有数亿以上记录的数据,但愿在保持海量数据存储能力的前提下保留良好的OLTP性能和QPS性能
2. 但愿数据库拥有实时计算的能力
整理自:
https://cloud.tencent.com/developer/news/206280
https://blog.csdn.net/songjianyue12345/article/details/79763022