news 2026/6/10 17:20:22

深入解析分布式数据库TiDB核心架构:基于Raft一致性协议与HTAP混合负载实现金融级高可用与实时分析的工程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入解析分布式数据库TiDB核心架构:基于Raft一致性协议与HTAP混合负载实现金融级高可用与实时分析的工程实践

深入解析分布式数据库 TiDB 核心架构:基于 Raft 一致性协议与 HTAP 混合负载实现金融级高可用与实时分析的工程实践

在数字化转型的浪潮中,传统单体数据库正面临前所未有的挑战:海量数据的存储瓶颈、高并发场景下的性能天花板,以及业务对实时分析的迫切需求。TiDB 作为新一代分布式关系型数据库,凭借其云原生架构、Raft 一致性协议保障的金融级高可用,以及 HTAP(混合事务/分析处理)能力,成为了众多企业架构升级的首选。
本文将深入剖析 TiDB 的核心架构,通过 Mermaid 图解其内部工作原理,并探讨在实际工程中如何利用 TiDB 实现高可用与实时分析。

1. TiDB 宏观架构:计算存储分离的云原生设计

TiDB 的核心设计理念是“计算存储分离”与“分层解耦”。整个架构主要由三个核心组件构成:TiDB Server(计算层)、PD (Placement Driver)(管理层)和 TiKV (存储层)。此外,为了增强实时分析能力,引入了 TiFlash 组件。

1.1 架构全景图

渲染错误:Mermaid 渲染失败: Parse error on line 6: ...d subgraph "管理层" PD1[PD Leader]... ----------------------^ Expecting 'SEMI', 'NEWLINE', 'SPACE', 'EOF', 'GRAPH', 'DIR', 'subgraph', 'SQS', 'end', 'AMP', 'COLON', 'START_LINK', 'STYLE', 'LINKSTYLE', 'CLASSDEF', 'CLASS', 'CLICK', 'DOWN', 'UP', 'NUM', 'NODE_STRING', 'BRKT', 'MINUS', 'MULT', 'UNICODE_TEXT', got 'STR'

组件职能解析

  • TiDB Server:无状态的 SQL 层,负责解析 SQL、生成执行计划、事务协调。它本身不存储数据,可以无限水平扩展。
  • PD (Placement Driver):整个集群的“大脑”,管理元数据,调度数据在 TiKV 之间的均衡,同时也负责分配全局授时。
  • TiKV:分布式 Key-Value 存储引擎,基于 RocksDB 构建,负责持久化数据,使用 Raft 协议保证数据强一致性。
  • TiFlash:自动从 TiKV 复制数据的列式存储扩展,用于加速分析型查询(AP)。

2. 存储引擎 TiKV 与 Raft 一致性协议详解

TiDB 的高可用基石在于 TiKV,而 TiKV 的核心在于 Raft 一致性协议。数据在 TiKV 中被切割成若干个Region,每个 Region 默认存储 96MB 数据,是数据移动的基本单位。

2.1 Region 副本与 Raft Group

为了保证数据不丢失,每个 Region 都有 3 个副本(默认),分布在不同机器上,形成一个 Raft Group。

渲染错误:Mermaid 渲染失败: Parse error on line 21: ...33,stroke-width:4px ----------------------^ Expecting 'SEMI', 'NEWLINE', 'SPACE', 'EOF', 'GRAPH', 'DIR', 'subgraph', 'SQS', 'end', 'AMP', 'COLON', 'START_LINK', 'STYLE', 'LINKSTYLE', 'CLASSDEF', 'CLASS', 'CLICK', 'DOWN', 'UP', 'NUM', 'NODE_STRING', 'BRKT', 'MINUS', 'MULT', 'UNICODE_TEXT', got '1'

工作流程

  1. Leader 选举:当 Leader 所在节点宕机,Follower 会通过 Raft 协议自动选举出新的 Leader(通常在选举超时 10 秒内完成)。
  2. 日志复制:客户端的写请求只发给 Leader。Leader 将写操作作为日志条目复制到 Followers。一旦大多数节点确认收到日志,Leader 就提交事务,并应用状态机(写入 RocksDB)。
  3. 故障恢复:若某节点故障恢复后,会通过 Raft 的 Log Matching 属性自动从 Leader 同步缺失的数据。

2.2 Multi-Raft 模型

TiKV 使用了 Multi-Raft 模型,即一台物理机上同时运行着成千上万个 Raft 实例。

渲染错误:Mermaid 渲染失败: Parse error on line 8: ...3[Node 3: 3 Regions]/Follower Node3 -----------------------^ Expecting 'SEMI', 'NEWLINE', 'SPACE', 'EOF', 'SHAPE_DATA', 'STYLE_SEPARATOR', 'START_LINK', 'LINK', 'LINK_ID', got 'NODE_STRING'

这种设计带来了极大的弹性:数据以 Region 为单位在节点间调度。如果某节点负载过高,PD 会将该节点上的部分 Region Leader 迁移到空闲节点,实现负载均衡。

3. 分布式事务与 SQL 层实现

TiDB 兼容 MySQL 协议,但底层是分布式 KV 存储。TiDB Server 负责将关系型模型映射到 Key-Value 模型,并实现分布式事务。

3.1 Key-Value 映射与数据分布

TiKV 的 Key 是有序的。TiDB 使用特殊的编码方式将表数据映射为 KV 对。

渲染错误:Mermaid 渲染失败: Parse error on line 6: ...y1[t... Row2 -->|授时机制 Row3 -->|编 ----------------------^ Expecting 'SQE', 'TAGEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PIPE'

3.2 两阶段提交 (2PC)

TiDB 使用 Google Percolator 模型实现分布式事务,保证 ACID 中的原子性和隔离性。

TiKVTiKV_Leader2TiKV_Leader1PDTiDBClientTiKVTiKV_Leader2TiKV_Leader1PDTiDBClient客户端执行 DML (预写)BEGIN获取全局时间戳 TSstart_tsPrewrite (Key1, Value1, start_ts)Prewrite (Key2, Value2, start_ts)Success (加锁)Success (加锁)COMMIT获取提交时间戳commit_tsCommit (primary key, commit_ts)Commit (secondary keys, commit_ts)Transaction Success

关键点

  • 全局时间戳 (TSO):由 PD 分配单调递增的时间戳,用于确定事务的全局顺序。
  • Prewrite 阶段:数据被写入但未对其他事务可见,并在 Key 上加锁。
  • Commit 阶段:首先提交 Primary Key(成功即代表事务成功),异步提交 Secondary Keys,减少网络往返开销。

4. HTAP 混合负载:TiDB 的“双引擎”驱动

TiDB 最具创新性的特性之一是 HTAP (Hybrid Transactional/Analytical Processing),即在同一个系统中同时支持事务型 (OLTP) 和分析型 (OLAP) 负载。

4.1 TiFlash:实时同步的列存引擎

TiKV 是行存引擎,适合点查和事务处理;TiFlash 是列存引擎,适合大规模扫描和聚合计算。TiFlash 通过 Raft Learner 协议,以强一致性的方式从 TiKV 同步数据。

AP 查询加速

读行存

读列存

写入请求

TiKV 行存
事务处理

Raft Log

TiKV Follower
行存副本

TiFlash Learner
列存副本

复杂分析 SQL

智能路由

TiFlash 列存节点

核心优势

  • 实时性:数据写入 TiKV 后毫秒级同步至 TiFlash,分析查询几乎无延迟(RPO 接近 0)。
  • 一致性:通过 Follower/Learner 机制,TiFlash 读取的数据快照与 TiKV 完全一致,避免了传统 ETL 同步导致的数据不一致问题。
  • 透明性:用户无需修改 SQL,TiDB 优化器会自动判断(基于成本估算)是走 TiKV 还是 TiFlash,或者利用 MPP (Massively Parallel Processing) 模式并行计算。

4.2 MPP (大规模并行处理)

TiFlash 引入了 MPP 架构,允许将大查询拆分发到多个 TiFlash 节点上并行执行,中间结果在节点间交换(Exchange),最后汇总。

TiFlash MPP 集群

TiDB 计算层

下发 MPP 任务

下发 MPP 任务

Exchange 数据

Exchange 数据

最终结果

TiDB Server

Node 1: Scan + Filter

Node 2: Scan + Filter

Node 3: Aggregation

这使得 TiDB 在处理亿级数据关联查询时,性能可媲美甚至超越传统数仓。

5. 工程实践:金融级高可用与容灾

在金融场景下,数据一致性(RPO=0)和服务可用性(RPO < 30s)是硬指标。

5.1 三机房五副本 / 同城多活架构

利用 Raft 协议的特性,TiDB 可以灵活配置副本的拓扑分布。

机房 B (实时灾备)

机房 A (核心写入)

配置策略

Vote: Leader

Vote: Follower

Vote: Follower

PD Placement Rule

Region Raft Group

实战策略

  1. Raft 成员规则:通过 PD 的 Placement Rules,强制 Leader 固定在性能最强的机房,并保证任意两个机房加起来的票数超过大多数(例如 3 副本分布:2-1-0 或 2-1-1)。
  2. 故障自动切换:当机房 A 发生断电或火灾,Raft Group 自动在剩余机房选举新 Leader,业务几乎无感知(取决于应用层重试机制)。
  3. binlog 同步:对于需要跨地域容灾(如北京到上海)的场景,可使用 TiCDC 或 Drainer 实现增量数据同步,构建主备集群。

5.2 运维与弹性伸缩

TiDB 的云原生特性极大地简化了运维。

  • 扩缩容
    • 存储扩容:新增 TiKV 节点,PD 自动检测到新节点,开始将其他节点上的 Region 搬运至新节点,达到负载均衡。
    • 计算扩容:新增 TiDB 或 TiFlash 节点,无需数据搬迁,立即承担计算压力。
OldNodesNewNodePDAdminOldNodesNewNodePDAdmin扩容指令 (Add Node)初始化新节点上报心跳 (容量大, 负载低)计算调度计划迁移 Region Leader/Follower数据迁移报告 Region Ready扩容完成

6. 总结

TiDB 通过融合 Google Spanner 和 Google F1 的设计思想,在开源界实现了一套成熟的企业级分布式数据库解决方案。

  1. 架构层面:计算存储分离架构保证了极致的弹性与扩展性。
  2. 一致性层面:基于 Multi-Raft 的强一致性协议,在保证高性能的同时实现了金融级的数据安全。
  3. 混合负载层面:TiKV + TiFlash 的 HTAP 架构打破了事务与分析的壁垒,让实时决策成为可能。
  4. 工程实践层面:通过智能的 PD 调度和灵活的副本规则,TiDB 能够适应从三机房到跨地域的各种复杂容灾需求。
    对于正面临传统数据库瓶颈,且需要在保证事务强一致的前提下实现实时数据分析的企业来说,TiDB 提供了一条平滑且高效的演进路径。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:39:05

学生数据统计不再头疼,学工一体化平台助力辅导员高效减负

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

作者头像 李华
网站建设 2026/6/10 11:43:07

<span class=“js_title_inner“>全栈“进化”公开课邀您参加|文心Moment大会走进大模型高效微调与极致推理全栈工程实践</span>

大模型效果越来越强&#xff0c;为什么真正上线却越来越难&#xff1f;从训练到推理、从算力到部署&#xff0c;工程能力正在成为决定成败的关键。从“模型可用”到“工程好用”&#xff0c;大模型正在经历一场真正的全栈进化。 1月22日下午13&#xff1a;00&#xff0c;全栈“…

作者头像 李华
网站建设 2026/6/10 11:39:03

Python入门篇【异常】

Python【异常】 文章目录Python【异常】一、Bug定义二、捕获异常2.1.基本捕获异常2.2.指定捕获异常提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、Bug定义 早期计算机采用大量继电器工作&#xff0c;马克二型计算机就是这样的。1945年9月9日&#…

作者头像 李华
网站建设 2026/6/10 11:43:18

Thread.sleep()与Object.wait()的区别解析

文章目录Thread.sleep() 与 Object.wait() 的区别解析一、引言&#xff1a;线程的基本操作二、Thread.sleep() 的详解1. 基本概念2. 示例代码3. 核心特点三、Object.wait() 的详解1. 基本概念2. 示例代码3. 核心特点四、Thread.sleep() 和 Object.wait() 的区别1. 调用方式2. 锁…

作者头像 李华
网站建设 2026/6/10 11:41:54

2025年热门的AI Agent方向及国内外代表产品

2025年作为Agent发展元年&#xff0c;Manus敲响了AI 应用大发展的号角&#xff0c;各种Agent应用层出不穷。这些智能体基本框架是怎样的&#xff0c;哪些更有前景&#xff1f; 最近在海外看到一张「2025 年 AI Agent 技术趋势全景图」&#xff0c;觉得非常精彩&#xff0c;分享…

作者头像 李华
网站建设 2026/6/10 11:42:11

一文读懂 MCP、RAG、Agent

前言 最近&#xff0c;AI 圈被三个词刷屏了 ——MCP、RAG、Agent&#xff01;几乎每天都有新的相关工具冒出来&#xff0c;各大技术论坛、行业群聊得热火朝天。但不少朋友一看到这些术语就犯迷糊&#xff1a;它们到底是啥&#xff1f;能干啥&#xff1f;和我们普通人又有啥关系…

作者头像 李华