当前位置 : IT培训网 > PHP开发 > PHP培训 > PHP开发之浅析分布式NewSQL数据库TiDB

PHP开发之浅析分布式NewSQL数据库TiDB

时间:2017-12-22 16:36:22  来源:PHP培训网  作者:IT培训网  已有:名学员访问该课程
数据库在编程开发中是必需的技术,像MySQL、Oracle、PostgreSQL这样的关系数据库,它们的问题是很难扩展。尽管我们有分片技术,还有youtube/vitess和MySQL proxy等,但它们都不支持分布式事务以及cross-node join连接。因此,新一代数据库将会

数据库在编程开发中是必需的技术,像MySQL、Oracle、PostgreSQL这样的关系数据库,它们的问题是很难扩展。尽管我们有分片技术,还有youtube/vitess和MySQL proxy等,但它们都不支持分布式事务以及cross-node join连接。因此,新一代数据库将会是怎样的?我们一起来分析吧!

PHP开发之浅析分布式NewSQL数据库TiDB_www.itpxw.cnNewSQL是什么?

NewSQL是指这样一类新式的关系型数据库管理系统,它针对OLTP实现读-写工作负载,追求提供和NoSQL系统相同的扩展性能,且仍然保持传统数据库支持的ACID特性。

从上述定义来看,我们不难发现NewSQL的扩展性与NoSQL相当,并同时保留了ACID特性。而这恰恰是我们需要的。

如何建立一个NewSQL数据库?

如何建立一个这样的数据库,将其分为两个层级:

KV层:这一层属于底层存储系统,负责提供跨数据中心的同步以及强一致性事务。

SQL层:这一层使能够满足我们对传统SQL数据库可用性以及功能性的支持。

TiDB 是 PingCAP 公司基于 Google Spanner / F1 论文实现的开源分布式 NewSQL 数据库。

docker部署方案

特性

SQL支持 (TiDB 是 MySQL 兼容的)

水平线性弹性扩展

分布式事务

跨数据中心数据强一致性保证

故障自恢复的高可用

TiDB 整体架构

TiDB架构图TiDB

集群主要分为三个组件:

TiDB ServerTiDB Server

负责接收 SQL 请求,处理 SQL 相关的逻辑,

并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。

TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,

可以通过负载均衡组件(如LVS、HAProxy 或 F5)对外提供统一的接入地址。

PD Server

Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:

一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);

二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);

三是分配全局唯一且递增的事务 ID。

PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。

TiKV Server

TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。

存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range (从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region 。

TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。

副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。

数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。

核心特性水平扩展无限水平扩展是 TiDB 的一大特点,这里说的水平扩展包括两方面:计算能力和存储能力。

TiDB Server 负责处理 SQL 请求,随着业务的增长,可以简单的添加 TiDB Server 节点,提高整体的处理能力,提供更高的吞吐。

TiKV 负责存储数据,随着数据量的增长,可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。

PD 会在 TiKV 节点之间以 Region 为单位做调度,将部分数据迁移到新加的节点上。

所以在业务的早期,可以只部署少量的服务实例(推荐至少部署 3 个 TiKV, 3 个 PD,2 个 TiDB),随着业务量的增长,按照需求添加 TiKV 或者 TiDB 实例高可用高可用是 TiDB 的另一大特点,

TiDB/TiKV/PD 这三个组件都能容忍部分实例失效,不影响整个集群的可用性。

下面分别说明这三个组件的可用性、单个实例失效后的后果以及如何恢复TiDBTiDB 是无状态的,推荐至少部署两个实例,前端通过负载均衡组件对外提供服务。

当单个实例失效时,会影响正在这个实例上进行的 Session,从应用的角度看,会出现单次请求失败的情况,重新连接后即可继续获得服务。

单个实例失效后,可以重启这个实例或者部署一个新的实例PDPD 是一个集群,通过 Raft 协议保持数据的一致性,单个实例失效时,如果这个实例不是 Raft 的 leader,那么服务完全不受影响;

如果这个实例是 Raft 的 leader,会重新选出新的 Raft leader,自动恢复服务。

PD 在选举的过程中无法对外提供服务,这个时间大约是3秒钟。

推荐至少部署三个 PD 实例,单个实例失效后,重启这个实例或者添加新的实例TiKVTiKV 是一个集群,通过 Raft 协议保持数据的一致性(副本数量可配置,默认保存三副本),并通过 PD 做负载均衡调度。

单个节点失效时,会影响这个节点上存储的所有 Region。对于 Region 中的 Leader 结点,会中断服务,等待重新选举;对于 Region 中的 Follower 节点,不会影响服务。

当某个 TiKV 节点失效,并且在一段时间内(默认 10 分钟)无法恢复,PD 会将其上的数据迁移到其他的 TiKV 节点上。

分布式NewSQL数据库TiDB相关技术问题如上所述,PHP程序员在开发过程中可以游刃有余的一展才华,让更好的程序为之所用,开发出更健全的系统。

顶一下
(0)
0%
踩一下
(0)
0%

IT培训0元试听 每期开班座位有限.0元试听抢座开始! IT培训0元试听

  • 姓名 : *
  • 电话 : *
  • QQ : *
  • 留言 :
  • 验证码 : 看不清?点击更换请输入正确的验证码

在线咨询在线咨询

温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。

------分隔线----------------------------
------分隔线----------------------------

推荐内容