TiDB
由于目前的项目把mysql换成了tidb,所以特意来了解下tidb。其实也不能说换,由于tidb和mysql几乎完全兼容,所以我们的程序没有任何改动就完成了数据库从mysql到tidb的转换,tidb 是一个分布式 newsql (sql 、 nosql 和 newsql 的优缺点比较 )数据库。它支持水平弹性扩展、acid 事务、标准 sql、mysql 语法和 mysql 协议,具有数据强一致的高可用特性,是一个不仅适合 oltp 场景还适合 olap 场景的混合数据库。下面是对有关资料的整理还有一些扩展内容以链接的方式展示,有兴趣可以点击了解一下。
一 tidb简介
tidb 是 pingcap 公司受 google spanner / f1 论文启发而设计的开源分布式 htap (hybrid transactional and analytical processing) 数据库,结合了传统的 rdbms 和nosql 的最佳特性。tidb 兼容 mysql,支持无限的水平扩展,具备强一致性和高可用性。tidb 的目标是为 oltp(online transactional processing) 和 olap (online analytical processing) 场景提供一站式的解决方案。tidb 具备如下核心特点:
1 高度兼容 mysql
大多数情况下,无需修改代码即可从 mysql 轻松迁移至 tidb,分库分表后的 mysql 集群亦可通过 tidb 工具进行实时迁移。
2水平弹性扩展
通过简单地增加新节点即可实现 tidb 的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。
3分布式事务
tidb 100% 支持标准的 acid 事务。
4 真正金融级高可用
相比于传统主从 (m-s) 复制方案,基于 raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复 (auto-failover),无需人工介入。
5 一站式 htap 解决方案
tidb 作为典型的 oltp 行存数据库,同时兼具强大的 olap 性能,配合 tispark,可提供一站式 htap解决方案,一份存储同时处理oltp & olap(olap、oltp的介绍和比较 )无需传统繁琐的 etl 过程。
6云原生 sql 数据库
tidb 是为云而设计的数据库,同 kubernetes (十分钟带你理解kubernetes核心概念 )深度耦合,支持公有云、私有云和混合云,使部署、配置和维护变得十分简单。
tidb 的设计目标是 100% 的 oltp 场景和 80% 的 olap 场景,更复杂的 olap 分析可以通过 tispark 项目来完成。 tidb 对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分库分表等 sharding 方案。同时它也让开发运维人员不用关注数据库 scale 的细节问题,专注于业务开发,极大的提升研发的生产力.
二 tidb 整体架构
tidb 集群主要分为三个组件:
1tidb server
tidb server 负责接收 sql 请求,处理 sql 相关的逻辑,并通过 pd 找到存储计算所需数据的 tikv 地址,与 tikv 交互获取数据,最终返回结果。 tidb server是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如lvs、haproxy 或f5)对外提供统一的接入地址。
2pd server
placement driver (简称 pd) 是整个集群的管理模块,其主要工作有三个: 一是存储集群的元信息(某个 key 存储在哪个 tikv 节点);二是对 tikv 集群进行调度和负载均衡(如数据的迁移、raft group leader的迁移等);三是分配全局唯一且递增的事务 id。
pd 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。
3tikv server
tikv server 负责存储数据,从外部看 tikv 是一个分布式的提供事务的 key-value 存储引擎。存储数据的基本单位是 region,每个 region 负责存储一个 key range (从 startkey 到endkey 的左闭右开区间)的数据,每个 tikv 节点会负责多个 region 。tikv 使用 raft协议做复制,保持数据的一致性和容灾。副本以 region 为单位进行管理,不同节点上的多个 region 构成一个 raftgroup,互为副本。数据在多个 tikv 之间的负载均衡由 pd 调度,这里也是以 region 为单位进行调度。
三 核心特性
1 水平扩展
无限水平扩展是 tidb 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。tidb server 负责处理 sql 请求,随着业务的增长,可以简单的添加 tidb server 节点,提高整体的处理能力,提供更高的吞吐。tikv 负责存储数据,随着数据量的增长,可以部署更多的 tikv server 节点解决数据 scale 的问题。pd 会在 tikv 节点之间以 region 为单位做调度,将部分数据迁移到新加的节点上。所以在业务的早期,可以只部署少量的服务实例(推荐至少部署 3 个 tikv, 3 个 pd,2 个 tidb),随着业务量的增长,按照需求添加 tikv 或者 tidb 实例。
2 高可用
高可用是 tidb 的另一大特点,tidb/tikv/pd 这三个组件都能容忍部分实例失效,不影响整个集群的可用性。下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复。
tidb
tidb 是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务。当单个实例失效时,会影响正在这个实例上进行的 session,从应用的角度看,会出现单次请求失败的情况,重新连接后即可继续获得服务。单个实例失效后,可以重启这个实例或者部署一个新的实例。
pd
pd 是一个集群,通过 raft 协议保持数据的一致性,单个实例失效时,如果这个实例不是 raft 的 leader,那么服务完全不受影响;如果这个实例是 raft 的 leader,会重新选出新的 raft leader,自动恢复服务。pd 在选举的过程中无法对外提供服务,这个时间大约是3秒钟。推荐至少部署三个 pd 实例,单个实例失效后,重启这个实例或者添加新的实例。
tikv
tikv 是一个集群,通过 raft 协议(raft一致性哈算法以及raft 为什么是更易理解的分布式一致性算法 )保持数据的一致性(副本数量可配置,默认保存三副本),并通过 pd 做负载均衡调度。单个节点失效时,会影响这个节点上存储的所有 region。对于 region 中的 leader 结点,会中断服务,等待重新选举;对于 region 中的 follower 节点,不会影响服务。当某个 tikv 节点失效,并且在一段时间内(默认 30 分钟)无法恢复,pd 会将其上的数据迁移到其他的 tikv 节点上。
四 tidb技术内幕
1 保存数据 tidb 技术内幕 - 说存储
2 计算(很关键如何做sql运算) tidb 技术内幕 - 说计算
3 调度(tidb集群管理) tidb 技术内幕 - 谈调度
五 安装部署
tidb安装部署,可能比较麻烦,一步步照着做,如果公司有专门的运维,这个工作可以由运维来搞,但是大多数的中小公司是没有的,都是开发者兼职运维,所以作为一个开发者,还是了解下比较好。 安装部署
声明
以上只是对tidb资料的简单整理和对tidb的一个基本了解,更详细的资料可以转至tidb的官方文档,注意里面的常见问题和解答,很有用:pingcap tidb官方文档
上一篇: 微信小程序获取用户openid的实现
下一篇: [bzoj4771] 七彩树