tidb存储基本原理

tidb是什么?

tidb是分布式关系型数据库;需要从两个方面来理解tidb:

  1. 分布式数据库;
  2. 关系型数据库。

什么是分布式系统?

集中式系统,计算和存储在同一个节点上;

分布式系统,计算和存储位于不同的节点上;分布式系统把需要进行大量计算的工程数据分割成若干个小块,有多台计算机分别进行计算和存储,然后将结果统一合并到数据结论的科学;本质上就是进行数据存储与计算的分治;

分布式系统较集中式系统,需要做哪些额外工作?

故障率会更高;计算、存储需要冗余;

需要考虑节点之间的协调;调度中心;

  1. 计算与存储分离;
  2. 计算与存储分治;
  3. 调度中心,节点之间协调。

分布式系统需要解决的问题

  1. 如何最大程度实现分治;
  2. 如何实现全局的一致性;需要统一的时钟;tso, timestamp oracle;
  3. 如何实现故障与部分失效的容错?水平扩容;数据强一致性和高可用;
  4. 如何应对不可靠的网络与网络分区;异地多活;

CAP原则

一致性,all nodes see the same data at the same time;

可用性,reads and writes always succeed; 服务在正常响应时间内的可用;

分区容错性,节点或者网络分区故障时,依然能够提供一致性或者可用性服务。

redis cluster满足AP原则;

tidb满足CA原则,强一致性和高可用。

关系型数据库需要关心哪些问题?

关系型数据库的关键在于一定要具备事务;Nosql数据库无法支持完备的事务;

事物

事务的前提是并发;

事物的本质是并发控制的单元,是用户定义的一个操作序列;这些操作要么都做,要么都不做,是一个不可分割的工作单位;

目的是为了保证数据库系统始终处于完整性和正确性的状态。

ACID特性

  • 原子性

事务包含的全部操作是一个不可分割的整体;要么都执行,要么都不执行;

  • 一致性

事务的前后,所有的数据都保持一个一致的状态;不能违反数据的一致性检测;

  • 隔离性

避免串行化,使用MVCC和锁,一定程度破坏一致性;tidb使用snapshot isolation隔离级别,不存在幻读问题,但引入写偏移问题;

  • 持久性

分布式数据库除了要进行本地数据存储,还要考虑网络备份。

tidb解决了什么问题?

Mycat

tidb最初是用来替换数据库扩容Mycat这种解决方案的。

tidb存储基本原理_第1张图片

Mycat解决的问题:

  1. 读写分离;
  2. 分库分表;mysql计算和存储没有分离,要进行横向扩展,只能分库分表;500万数据默认是3层B+数,大于500万分裂为4层,所以需要进行分表;分库,每个db对应单独的线程数量和存储指标;分库分表,能够提升整体性能

Mycat proxy做了哪些事情?

  1. 数据汇总;数据在多个数据库里面,proxy进行数据汇总;
  2. 分布式事务 xa;分布式事务通常使用二阶段提交,会有中心节点,中心节点会成为整个系统的瓶颈;Mycat会有一个事务的最大值,同时能处理的事务条数;tidb使用一种去中心化的事务模型;

Mycat解决方案非常复杂,对运维来说增加节点、删除节点,数据迁移和数据管理非常麻烦;对于程序来说业务拆分也非常麻烦。

tidb解决问题

  1. 大量数据下的高并发读写问题,尤其是写;线性水平扩展的方式,对写友好;使用rocksdb,lsm-tree,磁盘利用率高,顺序写;
  2. 强一致、高可用,保证数据不丢不错;副本强一致,在多个物理节点中存储;使用raft一致性算法实现;
  3. 兼容mysql 5.7的协议;对于我们的程序,只需要更换端口,连接tidb;支持分布式事务,去中心化分布式事务;
  4. HTAP, Hybrid Transactional and Analytical Processing; OLTP, 业务处理,数据量大了之后,传统的解决方案是分库分表,Macat这种解决方案;OLAP,业务分析,数据量大了之后,转向大数据处理elk,hadoop,hbase,mapreduce;tidb将OLTP和OLAP融合到一起,同一个数据库,既可以做OLTP,又可以做OLAP;OLTP通过分布式事务实现;OLAP,通过并行计算MPP,物化视图,列式存储Tiflash,partition bitmap实现;

tidb整体架构

  • 由多模块组成,各模块相互通信,组成完整的tidb系统;
  • 前端stateless、后端stateful(raft);

tidb存储基本原理_第2张图片

tidb存储基本原理_第3张图片

TiDB server

tidb存储基本原理_第4张图片

客户端连接tidb server;tidb server负责计算,不存储数据,是无状态的;可以启动多个tidb server,可以再前面加一层haproxy,进行负载均衡;statistics数据来源于tikv,tikv有并行计算MPP;

PD(Placement Driver) server

存储集群的元数据,对集群进行管理;存储每个tikv节点实时的数据分布情况(如节点的region范围)和集群的整体拓扑结构;提供tso, timestamp oracle,统一的事务id;

TiKV server

负责存储数据;基于region;有并行计算功能;

tidb存储基本原理_第5张图片

TiFlash

TiFlash是一类特殊的存储节点;列式存储,只存储某些列;用于OLAP,数据分析,对某一列数据进行分析;

你可能感兴趣的:(Linux,server,数据库,分布式数据库,服务器,linux,后端,tidb,分布式数据库)