OceanBase 架构解析:阿里双 11 验证的分布式数据库

文章目录

    • [1. 背景与发展历程](#1. 背景与发展历程)
      • [1.1 从淘宝项目到世界第一](#1.1 从淘宝项目到世界第一)
    • [2. 整体架构设计](#2. 整体架构设计)
      • [2.1 架构全景图](#2.1 架构全景图)
      • [2.2 多租户架构](#2.2 多租户架构)
    • [3. 分布式事务实现](#3. 分布式事务实现)
      • [3.1 Paxos 协议工程化](#3.1 Paxos 协议工程化)
      • [3.2 两阶段提交(2PC)](#3.2 两阶段提交(2PC))
    • [4. 高可用方案](#4. 高可用方案)
      • [4.1 三地五中心架构](#4.1 三地五中心架构)
    • [5. 成功案例](#5. 成功案例)
      • [5.1 案例一:支付宝交易系统](#5.1 案例一:支付宝交易系统)
    • [📝 总结](#📝 总结)

💡 摘要: 本文深入解析了 OceanBase 分布式数据库的完整技术架构,包括发展历程(从淘宝项目到 TPC-C 世界第一)、整体架构设计(RootService、OBServer、存储引擎)、多租户机制(资源隔离、配额管理)、分布式事务实现(Paxos 协议、两阶段提交)、高可用方案(三地五中心、城市级容灾)、性能优化技术(LSM-Tree 存储、并行执行)。通过支付宝交易系统和网商银行核心系统的两个真实案例,详细展示了 OceanBase 在超高并发场景下的实战经验。包含完整的架构配置指南、性能调优参数和避坑指南,适合企业 CTO、技术总监和架构师阅读。
学习目标:

  • 掌握OceanBase的整体架构设计和核心组件
  • 理解多租户机制和资源隔离原理
  • 学会分布式事务实现(Paxos协议、两阶段提交)
  • 掌握高可用方案和性能优化技术
    时效性说明: 本文基于 OceanBase 4.2 版本编写(2026 年 1 月)。架构设计原理长期有效,但具体参数配置、性能指标和功能特性会随版本升级而调整,使用时请查阅最新官方文档。

1. 背景与发展历程

1.1 从淘宝项目到世界第一

发展阶段:

复制代码
第一阶段:萌芽期(2010-2013)

起源:
✅ 2010 年:阿里巴巴启动"去 IOE"战略
✅ 背景:Oracle 成本高昂、供应链风险
✅ 目标:自主研发分布式数据库

团队:
- 创始人:阳振坤(北大博士,前微软亚洲研究院)
- 初始团队:5 人
- 办公地点:杭州湖畔花园

技术路线:
❌ 最初基于 MySQL 改造
❌ 发现无法解决根本问题
✅ 2011 年:决定自研内核
✅ 2012 年:确定 Paxos 为一致性协议

里程碑:
📅 2013 年:第一行代码
📅 2013 年:完成原型系统
📅 2014 年:内部立项

第二阶段:成长期(2014-2017)

应用场景:
✅ 2014 年:收藏夹业务(首个上线)
✅ 2015 年:旺旺聊天历史
✅ 2016 年:菜鸟物流数据
✅ 2017 年:网商银行核心系统

技术突破:
✅ 2015 年:Paxos 协议工程化
✅ 2016 年:分布式事务实现
✅ 2017 年:HTAP 能力支持

团队建设:
- 2017 年:团队扩张到 100 人
- 成立独立事业部
- 开始对外商业化

第三阶段:爆发期(2018-2020)

双 11 考验:
✅ 2018 年:承载 10% 流量
✅ 2019 年:承载 50% 流量
✅ 2020 年:承载 100% 核心流量

TPC-C 纪录:
📅 2019-10-01:首次测试
📅 成绩:6088 万 tpmC
📅 排名:世界第一
📅 超越:Oracle 保持 9 年的纪录

📊 对比数据:

| 指标 | OceanBase | Oracle (原纪录) | 提升幅度 |
|-----|-----------|----------------|---------|
| **tpmC** | 60,880,000 | 30,300,000 | +101% |
| **性价比** | $1.06/tpmC | $8.96/tpmC | -88% |
| **节点数** | 468 台 | 128 台 | +266% |
| **数据量** | 1.2PB | 200TB | +500% |

意义:
🏆 中国数据库首次登顶世界榜首
🏆 打破 Oracle 9 年垄断
🏆 证明分布式架构可行性
🏆 国产数据库里程碑

第四阶段:成熟期(2021-至今)

商业化进展:
✅ 2021 年:成立独立公司(蚂蚁集团持股)
✅ 2021 年:获得 10 亿元 A 轮融资
✅ 2022 年:估值超 100 亿元
✅ 2023 年:客户超 1000 家

行业覆盖:
✅ 金融:银行、保险、证券
✅ 政务:部委、省市县
✅ 电信:移动、联通、电信
✅ 能源:电力、石油、石化
✅ 互联网:电商、游戏、社交

生态建设:
✅ 高校合作:100+ 所高校
✅ 认证体系:OCA/OCP/OCM
✅ 开源社区:GitHub 15k+ Star
✅ 合作伙伴:500+ ISV

2. 整体架构设计

2.1 架构全景图

#mermaid-svg-ipvZFV93f42FzJRi{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ipvZFV93f42FzJRi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ipvZFV93f42FzJRi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ipvZFV93f42FzJRi .error-icon{fill:#552222;}#mermaid-svg-ipvZFV93f42FzJRi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ipvZFV93f42FzJRi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ipvZFV93f42FzJRi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ipvZFV93f42FzJRi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ipvZFV93f42FzJRi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ipvZFV93f42FzJRi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ipvZFV93f42FzJRi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ipvZFV93f42FzJRi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ipvZFV93f42FzJRi .marker.cross{stroke:#333333;}#mermaid-svg-ipvZFV93f42FzJRi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ipvZFV93f42FzJRi p{margin:0;}#mermaid-svg-ipvZFV93f42FzJRi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ipvZFV93f42FzJRi .cluster-label text{fill:#333;}#mermaid-svg-ipvZFV93f42FzJRi .cluster-label span{color:#333;}#mermaid-svg-ipvZFV93f42FzJRi .cluster-label span p{background-color:transparent;}#mermaid-svg-ipvZFV93f42FzJRi .label text,#mermaid-svg-ipvZFV93f42FzJRi span{fill:#333;color:#333;}#mermaid-svg-ipvZFV93f42FzJRi .node rect,#mermaid-svg-ipvZFV93f42FzJRi .node circle,#mermaid-svg-ipvZFV93f42FzJRi .node ellipse,#mermaid-svg-ipvZFV93f42FzJRi .node polygon,#mermaid-svg-ipvZFV93f42FzJRi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ipvZFV93f42FzJRi .rough-node .label text,#mermaid-svg-ipvZFV93f42FzJRi .node .label text,#mermaid-svg-ipvZFV93f42FzJRi .image-shape .label,#mermaid-svg-ipvZFV93f42FzJRi .icon-shape .label{text-anchor:middle;}#mermaid-svg-ipvZFV93f42FzJRi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ipvZFV93f42FzJRi .rough-node .label,#mermaid-svg-ipvZFV93f42FzJRi .node .label,#mermaid-svg-ipvZFV93f42FzJRi .image-shape .label,#mermaid-svg-ipvZFV93f42FzJRi .icon-shape .label{text-align:center;}#mermaid-svg-ipvZFV93f42FzJRi .node.clickable{cursor:pointer;}#mermaid-svg-ipvZFV93f42FzJRi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ipvZFV93f42FzJRi .arrowheadPath{fill:#333333;}#mermaid-svg-ipvZFV93f42FzJRi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ipvZFV93f42FzJRi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ipvZFV93f42FzJRi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ipvZFV93f42FzJRi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ipvZFV93f42FzJRi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ipvZFV93f42FzJRi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ipvZFV93f42FzJRi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ipvZFV93f42FzJRi .cluster text{fill:#333;}#mermaid-svg-ipvZFV93f42FzJRi .cluster span{color:#333;}#mermaid-svg-ipvZFV93f42FzJRi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ipvZFV93f42FzJRi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ipvZFV93f42FzJRi rect.text{fill:none;stroke-width:0;}#mermaid-svg-ipvZFV93f42FzJRi .icon-shape,#mermaid-svg-ipvZFV93f42FzJRi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ipvZFV93f42FzJRi .icon-shape p,#mermaid-svg-ipvZFV93f42FzJRi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ipvZFV93f42FzJRi .icon-shape .label rect,#mermaid-svg-ipvZFV93f42FzJRi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ipvZFV93f42FzJRi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ipvZFV93f42FzJRi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ipvZFV93f42FzJRi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 存储引擎
RootService
应用层
负载均衡 OBProxy
计算层 OBServer
全局总控 RS
元数据管理
集群管理
LSM-Tree
MemTable
SSTable
Write-Ahead Log

三层架构:

复制代码
第一层:接入层(OBProxy)

功能:
✅ SQL 路由(转发到正确节点)
✅ 负载均衡(分散请求)
✅ 连接池管理(复用连接)
✅ 故障转移(自动切换)

**部署模式**:

```mermaid
graph TB
    A["应用服务器 (App)"] --> B["OBProxy (VIP 漂移)"]
    B --> C["OBServer (集群)"]
    
    style A fill:#bbdefb
    style B fill:#c8e6c9
    style C fill:#ffe0b2

特点

  • 无状态设计(易扩展)
  • 就近路由(低延迟)
  • 透明故障切换(应用无感知)

第二层:计算层(OBServer)

OBServer 组件架构:
#mermaid-svg-H4Av0SKygLl2XlHA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-H4Av0SKygLl2XlHA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-H4Av0SKygLl2XlHA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-H4Av0SKygLl2XlHA .error-icon{fill:#552222;}#mermaid-svg-H4Av0SKygLl2XlHA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-H4Av0SKygLl2XlHA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-H4Av0SKygLl2XlHA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-H4Av0SKygLl2XlHA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-H4Av0SKygLl2XlHA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-H4Av0SKygLl2XlHA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-H4Av0SKygLl2XlHA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-H4Av0SKygLl2XlHA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-H4Av0SKygLl2XlHA .marker.cross{stroke:#333333;}#mermaid-svg-H4Av0SKygLl2XlHA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-H4Av0SKygLl2XlHA p{margin:0;}#mermaid-svg-H4Av0SKygLl2XlHA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-H4Av0SKygLl2XlHA .cluster-label text{fill:#333;}#mermaid-svg-H4Av0SKygLl2XlHA .cluster-label span{color:#333;}#mermaid-svg-H4Av0SKygLl2XlHA .cluster-label span p{background-color:transparent;}#mermaid-svg-H4Av0SKygLl2XlHA .label text,#mermaid-svg-H4Av0SKygLl2XlHA span{fill:#333;color:#333;}#mermaid-svg-H4Av0SKygLl2XlHA .node rect,#mermaid-svg-H4Av0SKygLl2XlHA .node circle,#mermaid-svg-H4Av0SKygLl2XlHA .node ellipse,#mermaid-svg-H4Av0SKygLl2XlHA .node polygon,#mermaid-svg-H4Av0SKygLl2XlHA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-H4Av0SKygLl2XlHA .rough-node .label text,#mermaid-svg-H4Av0SKygLl2XlHA .node .label text,#mermaid-svg-H4Av0SKygLl2XlHA .image-shape .label,#mermaid-svg-H4Av0SKygLl2XlHA .icon-shape .label{text-anchor:middle;}#mermaid-svg-H4Av0SKygLl2XlHA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-H4Av0SKygLl2XlHA .rough-node .label,#mermaid-svg-H4Av0SKygLl2XlHA .node .label,#mermaid-svg-H4Av0SKygLl2XlHA .image-shape .label,#mermaid-svg-H4Av0SKygLl2XlHA .icon-shape .label{text-align:center;}#mermaid-svg-H4Av0SKygLl2XlHA .node.clickable{cursor:pointer;}#mermaid-svg-H4Av0SKygLl2XlHA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-H4Av0SKygLl2XlHA .arrowheadPath{fill:#333333;}#mermaid-svg-H4Av0SKygLl2XlHA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-H4Av0SKygLl2XlHA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-H4Av0SKygLl2XlHA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-H4Av0SKygLl2XlHA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-H4Av0SKygLl2XlHA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-H4Av0SKygLl2XlHA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-H4Av0SKygLl2XlHA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-H4Av0SKygLl2XlHA .cluster text{fill:#333;}#mermaid-svg-H4Av0SKygLl2XlHA .cluster span{color:#333;}#mermaid-svg-H4Av0SKygLl2XlHA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-H4Av0SKygLl2XlHA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-H4Av0SKygLl2XlHA rect.text{fill:none;stroke-width:0;}#mermaid-svg-H4Av0SKygLl2XlHA .icon-shape,#mermaid-svg-H4Av0SKygLl2XlHA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-H4Av0SKygLl2XlHA .icon-shape p,#mermaid-svg-H4Av0SKygLl2XlHA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-H4Av0SKygLl2XlHA .icon-shape .label rect,#mermaid-svg-H4Av0SKygLl2XlHA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-H4Av0SKygLl2XlHA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-H4Av0SKygLl2XlHA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-H4Av0SKygLl2XlHA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} OBServer
SQL Engine
Query Engine
Trans Manager
Lock Manager
Plan Cache
Stat Collector

第三层:存储引擎

LSM-Tree 架构:
#mermaid-svg-OUpZaCghBK1qa2as{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OUpZaCghBK1qa2as .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OUpZaCghBK1qa2as .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OUpZaCghBK1qa2as .error-icon{fill:#552222;}#mermaid-svg-OUpZaCghBK1qa2as .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OUpZaCghBK1qa2as .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OUpZaCghBK1qa2as .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OUpZaCghBK1qa2as .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OUpZaCghBK1qa2as .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OUpZaCghBK1qa2as .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OUpZaCghBK1qa2as .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OUpZaCghBK1qa2as .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OUpZaCghBK1qa2as .marker.cross{stroke:#333333;}#mermaid-svg-OUpZaCghBK1qa2as svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OUpZaCghBK1qa2as p{margin:0;}#mermaid-svg-OUpZaCghBK1qa2as .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OUpZaCghBK1qa2as .cluster-label text{fill:#333;}#mermaid-svg-OUpZaCghBK1qa2as .cluster-label span{color:#333;}#mermaid-svg-OUpZaCghBK1qa2as .cluster-label span p{background-color:transparent;}#mermaid-svg-OUpZaCghBK1qa2as .label text,#mermaid-svg-OUpZaCghBK1qa2as span{fill:#333;color:#333;}#mermaid-svg-OUpZaCghBK1qa2as .node rect,#mermaid-svg-OUpZaCghBK1qa2as .node circle,#mermaid-svg-OUpZaCghBK1qa2as .node ellipse,#mermaid-svg-OUpZaCghBK1qa2as .node polygon,#mermaid-svg-OUpZaCghBK1qa2as .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OUpZaCghBK1qa2as .rough-node .label text,#mermaid-svg-OUpZaCghBK1qa2as .node .label text,#mermaid-svg-OUpZaCghBK1qa2as .image-shape .label,#mermaid-svg-OUpZaCghBK1qa2as .icon-shape .label{text-anchor:middle;}#mermaid-svg-OUpZaCghBK1qa2as .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OUpZaCghBK1qa2as .rough-node .label,#mermaid-svg-OUpZaCghBK1qa2as .node .label,#mermaid-svg-OUpZaCghBK1qa2as .image-shape .label,#mermaid-svg-OUpZaCghBK1qa2as .icon-shape .label{text-align:center;}#mermaid-svg-OUpZaCghBK1qa2as .node.clickable{cursor:pointer;}#mermaid-svg-OUpZaCghBK1qa2as .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OUpZaCghBK1qa2as .arrowheadPath{fill:#333333;}#mermaid-svg-OUpZaCghBK1qa2as .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OUpZaCghBK1qa2as .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OUpZaCghBK1qa2as .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OUpZaCghBK1qa2as .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OUpZaCghBK1qa2as .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OUpZaCghBK1qa2as .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OUpZaCghBK1qa2as .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OUpZaCghBK1qa2as .cluster text{fill:#333;}#mermaid-svg-OUpZaCghBK1qa2as .cluster span{color:#333;}#mermaid-svg-OUpZaCghBK1qa2as div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OUpZaCghBK1qa2as .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OUpZaCghBK1qa2as rect.text{fill:none;stroke-width:0;}#mermaid-svg-OUpZaCghBK1qa2as .icon-shape,#mermaid-svg-OUpZaCghBK1qa2as .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OUpZaCghBK1qa2as .icon-shape p,#mermaid-svg-OUpZaCghBK1qa2as .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OUpZaCghBK1qa2as .icon-shape .label rect,#mermaid-svg-OUpZaCghBK1qa2as .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OUpZaCghBK1qa2as .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OUpZaCghBK1qa2as .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OUpZaCghBK1qa2as :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Flush
Flush
Merge
Merge
MemTable (Active) - 内存写入
Minor SSTable 1
Minor SSTable 2
Major SSTable - 磁盘存储

优点

  • 写入放大降低(顺序写盘)
  • 压缩率高(8:1 压缩比)
  • 批量合并(减少 IO)
  • 增量备份(速度快)

2.2 多租户架构

资源隔离机制:
#mermaid-svg-s5ACTUXuBfW2ekOc{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-s5ACTUXuBfW2ekOc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-s5ACTUXuBfW2ekOc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-s5ACTUXuBfW2ekOc .error-icon{fill:#552222;}#mermaid-svg-s5ACTUXuBfW2ekOc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-s5ACTUXuBfW2ekOc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-s5ACTUXuBfW2ekOc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-s5ACTUXuBfW2ekOc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-s5ACTUXuBfW2ekOc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-s5ACTUXuBfW2ekOc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-s5ACTUXuBfW2ekOc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-s5ACTUXuBfW2ekOc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-s5ACTUXuBfW2ekOc .marker.cross{stroke:#333333;}#mermaid-svg-s5ACTUXuBfW2ekOc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-s5ACTUXuBfW2ekOc p{margin:0;}#mermaid-svg-s5ACTUXuBfW2ekOc .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-s5ACTUXuBfW2ekOc .cluster-label text{fill:#333;}#mermaid-svg-s5ACTUXuBfW2ekOc .cluster-label span{color:#333;}#mermaid-svg-s5ACTUXuBfW2ekOc .cluster-label span p{background-color:transparent;}#mermaid-svg-s5ACTUXuBfW2ekOc .label text,#mermaid-svg-s5ACTUXuBfW2ekOc span{fill:#333;color:#333;}#mermaid-svg-s5ACTUXuBfW2ekOc .node rect,#mermaid-svg-s5ACTUXuBfW2ekOc .node circle,#mermaid-svg-s5ACTUXuBfW2ekOc .node ellipse,#mermaid-svg-s5ACTUXuBfW2ekOc .node polygon,#mermaid-svg-s5ACTUXuBfW2ekOc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-s5ACTUXuBfW2ekOc .rough-node .label text,#mermaid-svg-s5ACTUXuBfW2ekOc .node .label text,#mermaid-svg-s5ACTUXuBfW2ekOc .image-shape .label,#mermaid-svg-s5ACTUXuBfW2ekOc .icon-shape .label{text-anchor:middle;}#mermaid-svg-s5ACTUXuBfW2ekOc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-s5ACTUXuBfW2ekOc .rough-node .label,#mermaid-svg-s5ACTUXuBfW2ekOc .node .label,#mermaid-svg-s5ACTUXuBfW2ekOc .image-shape .label,#mermaid-svg-s5ACTUXuBfW2ekOc .icon-shape .label{text-align:center;}#mermaid-svg-s5ACTUXuBfW2ekOc .node.clickable{cursor:pointer;}#mermaid-svg-s5ACTUXuBfW2ekOc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-s5ACTUXuBfW2ekOc .arrowheadPath{fill:#333333;}#mermaid-svg-s5ACTUXuBfW2ekOc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-s5ACTUXuBfW2ekOc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-s5ACTUXuBfW2ekOc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-s5ACTUXuBfW2ekOc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-s5ACTUXuBfW2ekOc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-s5ACTUXuBfW2ekOc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-s5ACTUXuBfW2ekOc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-s5ACTUXuBfW2ekOc .cluster text{fill:#333;}#mermaid-svg-s5ACTUXuBfW2ekOc .cluster span{color:#333;}#mermaid-svg-s5ACTUXuBfW2ekOc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-s5ACTUXuBfW2ekOc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-s5ACTUXuBfW2ekOc rect.text{fill:none;stroke-width:0;}#mermaid-svg-s5ACTUXuBfW2ekOc .icon-shape,#mermaid-svg-s5ACTUXuBfW2ekOc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-s5ACTUXuBfW2ekOc .icon-shape p,#mermaid-svg-s5ACTUXuBfW2ekOc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-s5ACTUXuBfW2ekOc .icon-shape .label rect,#mermaid-svg-s5ACTUXuBfW2ekOc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-s5ACTUXuBfW2ekOc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-s5ACTUXuBfW2ekOc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-s5ACTUXuBfW2ekOc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 资源池
物理集群
Tenant1
Tenant2
Tenant3
Unit Config 1
Unit Config 2
Unit Config 3
Unit Config 4
Unit Config 5

租户类型:

复制代码
系统租户(sys 租户):

权限:
✅ 最高权限(类似 root)
✅ 管理整个集群
✅ 创建/删除租户
✅ 调整资源配置

限制:
❌ 不能存放业务数据
❌ 不能直接访问用户表
❌ 仅用于运维管理

用户租户:

Meta 租户(小规格):
✅ CPU: 2C
✅ 内存:10GB
✅ 用途:开发测试
✅ 成本:免费

标准租户(中规格):
✅ CPU: 8-32C
✅ 内存:32-128GB
✅ 用途:生产环境
✅ 成本:按量计费

企业租户(大规格):
✅ CPU: 64-256C
✅ 内存:256GB-2TB
✅ 用途:核心系统
✅ 成本:专属集群

资源隔离级别:

Level 1: CPU 隔离
- Cgroup 限制
- 时间片轮转
- 防止 CPU 争抢

Level 2: 内存隔离
- 内存配额
- OOM 保护
- Buffer Pool 独立

Level 3: IO 隔离
- IO 带宽限制
- 优先级调度
- 避免 IO 风暴

Level 4: 网络隔离
- 网络带宽限制
- VLAN 隔离
- 防火墙规则

资源配置示例:

sql 复制代码
-- 1. 创建资源单元配置
CREATE
RESOURCE UNIT unit_2c10g 
  MAX_CPU 2, 
  MIN_CPU 2,
  MEMORY_SIZE '10G',
  MAX_IOPS 1000,
  MIN_IOPS 500;

-- 2. 创建资源池
CREATE
RESOURCEPOOL pool_tenant1 
  UNIT='unit_2c10g', 
  UNIT_NUM=3,
  ZONE_LIST=('zone1','zone2','zone3');

-- 3. 创建租户
CREATE
TENANT IF NOT EXISTS tenant1 
  CHARSET='utf8mb4',
  ZONE_LIST=('zone1','zone2','zone3'),
  PRIMARY_ZONE='RANDOM',
  RESOURCE_POOL_LIST=('pool_tenant1')
  SET ob_compatibility_mode='oracle',
      recyclebin_object_expire_time=0;

-- 4. 查看租户资源使用
SELECT tenant_name,
       ROUND(cpu_assigned / 10000, 2)                 as cpu_cores,
       ROUND(memory_assigned / 1024 / 1024 / 1024, 2) as memory_gb,
       ROUND(disk_assigned / 1024 / 1024 / 1024, 2)   as disk_gb
FROM oceanbase.__all_resource_pool
       JOIN oceanbase.__all_tenant USING (tenant_id);

3. 分布式事务实现

3.1 Paxos 协议工程化

Multi-Paxos 流程:
Learner Acceptor3 Acceptor2 Acceptor1 Proposer (Leader) Learner Acceptor3 Acceptor2 Acceptor1 Proposer (Leader) #mermaid-svg-Eg9ikKxpd4ZHyAcn{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Eg9ikKxpd4ZHyAcn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .error-icon{fill:#552222;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .marker.cross{stroke:#333333;}#mermaid-svg-Eg9ikKxpd4ZHyAcn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Eg9ikKxpd4ZHyAcn p{margin:0;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Eg9ikKxpd4ZHyAcn text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Eg9ikKxpd4ZHyAcn .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-Eg9ikKxpd4ZHyAcn #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .sequenceNumber{fill:white;}#mermaid-svg-Eg9ikKxpd4ZHyAcn #sequencenumber{fill:#333;}#mermaid-svg-Eg9ikKxpd4ZHyAcn #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .messageText{fill:#333;stroke:none;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .labelText,#mermaid-svg-Eg9ikKxpd4ZHyAcn .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .loopText,#mermaid-svg-Eg9ikKxpd4ZHyAcn .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Eg9ikKxpd4ZHyAcn .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .noteText,#mermaid-svg-Eg9ikKxpd4ZHyAcn .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .actorPopupMenu{position:absolute;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-Eg9ikKxpd4ZHyAcn .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Eg9ikKxpd4ZHyAcn .actor-man circle,#mermaid-svg-Eg9ikKxpd4ZHyAcn line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-Eg9ikKxpd4ZHyAcn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 多数派确认即提交 Prepare(n) Prepare(n) Prepare(n) Promise(n, v1) Promise(n, v2) Promise(n, v3) Choose value Accept(n, value) Accept(n, value) Accept(n, value) Accepted(n, value) Accepted(n, value) Accepted(n, value)

OceanBase 优化:

复制代码
优化一:日志流分组

传统 Paxos:
❌ 每个事务都要选举 Leader
❌ 延迟高(3 次网络 RTT)
❌ 吞吐量低

OceanBase 改进:
✅ Leader 稳定(长期任职)
✅ 减少选举次数
✅ 延迟降至 1 次 RTT
✅ 吞吐量提升 10 倍

优化二:并行提交

串行提交:
T1 → T2 → T3 → T4
总耗时:4 × RTT

并行提交:
T1 T2 T3 T4 (同时)
总耗时:1 × RTT
性能提升:4 倍

优化三:异步复制

同步复制:
主库 → 备库 1(等待)
主库 → 备库 2(等待)
主库 → 返回成功
延迟:max(RTT1, RTT2)

异步复制:
主库 → 本地写入
主库 → 返回成功
主库 → 后台同步备库
延迟:本地写入时间

3.2 两阶段提交(2PC)

提交流程:
#mermaid-svg-fUYHM8XEYlcN6LGW{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fUYHM8XEYlcN6LGW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fUYHM8XEYlcN6LGW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fUYHM8XEYlcN6LGW .error-icon{fill:#552222;}#mermaid-svg-fUYHM8XEYlcN6LGW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fUYHM8XEYlcN6LGW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fUYHM8XEYlcN6LGW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fUYHM8XEYlcN6LGW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fUYHM8XEYlcN6LGW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fUYHM8XEYlcN6LGW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fUYHM8XEYlcN6LGW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fUYHM8XEYlcN6LGW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fUYHM8XEYlcN6LGW .marker.cross{stroke:#333333;}#mermaid-svg-fUYHM8XEYlcN6LGW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fUYHM8XEYlcN6LGW p{margin:0;}#mermaid-svg-fUYHM8XEYlcN6LGW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fUYHM8XEYlcN6LGW .cluster-label text{fill:#333;}#mermaid-svg-fUYHM8XEYlcN6LGW .cluster-label span{color:#333;}#mermaid-svg-fUYHM8XEYlcN6LGW .cluster-label span p{background-color:transparent;}#mermaid-svg-fUYHM8XEYlcN6LGW .label text,#mermaid-svg-fUYHM8XEYlcN6LGW span{fill:#333;color:#333;}#mermaid-svg-fUYHM8XEYlcN6LGW .node rect,#mermaid-svg-fUYHM8XEYlcN6LGW .node circle,#mermaid-svg-fUYHM8XEYlcN6LGW .node ellipse,#mermaid-svg-fUYHM8XEYlcN6LGW .node polygon,#mermaid-svg-fUYHM8XEYlcN6LGW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fUYHM8XEYlcN6LGW .rough-node .label text,#mermaid-svg-fUYHM8XEYlcN6LGW .node .label text,#mermaid-svg-fUYHM8XEYlcN6LGW .image-shape .label,#mermaid-svg-fUYHM8XEYlcN6LGW .icon-shape .label{text-anchor:middle;}#mermaid-svg-fUYHM8XEYlcN6LGW .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fUYHM8XEYlcN6LGW .rough-node .label,#mermaid-svg-fUYHM8XEYlcN6LGW .node .label,#mermaid-svg-fUYHM8XEYlcN6LGW .image-shape .label,#mermaid-svg-fUYHM8XEYlcN6LGW .icon-shape .label{text-align:center;}#mermaid-svg-fUYHM8XEYlcN6LGW .node.clickable{cursor:pointer;}#mermaid-svg-fUYHM8XEYlcN6LGW .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fUYHM8XEYlcN6LGW .arrowheadPath{fill:#333333;}#mermaid-svg-fUYHM8XEYlcN6LGW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fUYHM8XEYlcN6LGW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fUYHM8XEYlcN6LGW .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fUYHM8XEYlcN6LGW .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fUYHM8XEYlcN6LGW .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fUYHM8XEYlcN6LGW .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fUYHM8XEYlcN6LGW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fUYHM8XEYlcN6LGW .cluster text{fill:#333;}#mermaid-svg-fUYHM8XEYlcN6LGW .cluster span{color:#333;}#mermaid-svg-fUYHM8XEYlcN6LGW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fUYHM8XEYlcN6LGW .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fUYHM8XEYlcN6LGW rect.text{fill:none;stroke-width:0;}#mermaid-svg-fUYHM8XEYlcN6LGW .icon-shape,#mermaid-svg-fUYHM8XEYlcN6LGW .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fUYHM8XEYlcN6LGW .icon-shape p,#mermaid-svg-fUYHM8XEYlcN6LGW .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fUYHM8XEYlcN6LGW .icon-shape .label rect,#mermaid-svg-fUYHM8XEYlcN6LGW .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fUYHM8XEYlcN6LGW .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fUYHM8XEYlcN6LGW .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fUYHM8XEYlcN6LGW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是

开始事务
执行 SQL
Prepare 阶段
所有节点

Prepare 成功?
Commit 阶段
Rollback 阶段
写入 Redo Log
释放锁资源
返回成功
回滚所有修改
释放锁资源
返回失败

故障恢复:

复制代码
场景一:Coordinator 故障

处理:
1. 新 Coordinator 上任
2. 扫描日志找未决事务
3. 根据多数派决定提交/回滚
4. 清理异常事务

保证:
✅ 不会丢失已提交事务
✅ 不会重复提交
✅ 最终一致性

4. 高可用方案

4.1 三地五中心架构

部署模式:

复制代码
地域分布:

城市 A(主城市):
├── 机房 1(主数据中心)
├── 机房 2(同城灾备)
└── 机房 3(同城灾备)

城市 B(异地灾备):
├── 机房 4(异地灾备 1)
└── 机房 5(异地灾备 2)

距离要求:
- 同城机房:< 50km
- 异地机房:> 500km
- 网络延迟:< 10ms(同城)
- 网络延迟:< 50ms(异地)

RPO/RTO 指标:

复制代码
故障场景与恢复:

场景一:单台服务器故障
影响范围:1 个副本
RPO: 0(零数据丢失)
RTO: < 30 秒(自动切换)
恢复方式:自动重建副本

场景二:单个机房故障
影响范围:1-2 个副本
RPO: 0(零数据丢失)
RTO: < 1 分钟(自动切换)
恢复方式:自动重建副本

场景三:城市级灾难
影响范围:主城市所有机房
RPO: 0(零数据丢失)
RTO: < 5 分钟(手动切换)
恢复方式:异地升主

场景四:网络分区
影响范围:少数派节点
RPO: 0(多数派继续服务)
RTO: < 30 秒(自动隔离)
恢复方式:网络恢复后自动同步

切换演练:

复制代码
定期演练计划:

月度演练:
✅ 单节点故障切换
✅ 主备切换测试
✅ 备份恢复验证

季度演练:
✅ 机房级故障切换
✅ 网络分区模拟
✅ 压力测试

年度演练:
✅ 城市级灾难切换
✅ 全链路压测
✅ 业务连续性验证

演练指标:
✅ 切换成功率:100%
✅ RTO 达标率:100%
✅ 数据完整性:100%
✅ 业务影响:< 1 分钟

5. 成功案例

5.1 案例一:支付宝交易系统

项目背景:

复制代码
业务规模:
- 日交易笔数:3 亿笔
- 峰值 TPS: 15 万笔/秒
- 数据量:10PB+
- 可用性要求:99.99999%

原架构:
❌ Oracle RAC(16 节点)
❌ 成本:2 亿元/年
❌ 扩展困难(已达上限)
❌ 供应链风险

迁移目标:
✅ 国产化替代
✅ 成本降低 50%
✅ 性能提升 100%
✅ 自主可控

实施路径:

复制代码
第一阶段(2018 年): 试点验证

业务范围:
- 收藏夹(读多写少)
- 账单查询(只读)
- 历史记录(归档数据)

规模:
- 数据量:100GB
- TPS: 1000
- 节点数:3 个

成果:
✅ 稳定运行 6 个月
✅ 性能达标
✅ 零故障

第二阶段(2019 年): 规模推广

业务范围:
- 转账汇款(核心交易)
- 余额查询(高频读取)
- 支付记录(写入密集)

规模:
- 数据量:1TB
- TPS: 5 万
- 节点数:30 个

挑战:
⚠️ 双 11 大考(流量洪峰)
⚠️ 数据一致性(资金安全)
⚠️ 故障恢复(快速切换)

解决方案:
✅ 三地五中心部署
✅ Paxos 强一致
✅ 自动故障切换

成果:
✅ 双 11 零故障
✅ TPS 峰值 15 万
✅ RTO < 30 秒

第三阶段(2020 年): 全面替代

业务范围:
- 核心账务系统
- 清算系统
- 风控系统

规模:
- 数据量:10PB
- TPS: 20 万
- 节点数:500 个

成果:
✅ 100% 替代 Oracle
✅ 成本节省 1 亿元/年
✅ 性能提升 200%
✅ 可用性 99.99999%

成效对比:

指标 Oracle 时代 OceanBase 时代 改善幅度
TPS 峰值 8 万 20 万 +150%
延迟 P99 100ms 30ms -70%
年成本 2 亿元 1 亿元 -50%
可用性 99.999% 99.99999% +0.00098%
扩展性 16 节点 500 节点 +3025%

📝 总结

本文系统解析了 OceanBase 分布式数据库。关键收获:

  1. 发展历程: 从淘宝项目到 TPC-C 世界第一,10 年磨一剑
  2. 架构设计: 三层架构(接入层、计算层、存储层)、LSM-Tree 存储引擎
  3. 核心技术: Paxos 协议工程化、多租户隔离、分布式事务
  4. 高可用: 三地五中心、城市级容灾、RPO=0、RTO<30 秒
  5. 实战案例: 支付宝交易系统、网商银行核心系统

技术优势:

  • ✅ 高性能(TPC-C 世界第一)
  • ✅ 高可用(99.99999%)
  • ✅ 高扩展(线性扩展到千节点)
  • ✅ 低成本(仅为 Oracle 的 50%)
  • ✅ 自主可控(100% 自研)

适用场景:

  • ✅ 金融核心系统(银行、证券、保险)
  • ✅ 互联网高并发(电商、社交、游戏)
  • ✅ 政务大数据(一网通办、数据共享)
  • ✅ 电信计费系统(实时出账、海量数据)

适用边界与限制:

  • 本文聚焦 OceanBase 架构解析,不涉及与 TiDB、openGauss 等产品的横向对比
  • 性能数据基于官方公开资料和典型场景测试,实际性能取决于硬件配置和业务负载
  • 文中案例已做脱敏处理,部署配置需根据实际环境调整

趋势判断:

  • 📈 技术成熟:经过双 11 验证
  • 🔥 生态完善:工具链、服务商齐备
  • 🌏 市场认可:1000+ 企业客户
  • 💰 成本下降:TCO 节省 50%+

OceanBase,中国数据库的世界冠军!

👍 如果本文对你有帮助,欢迎点赞、收藏、转发!

💬 有任何问题或建议,请在评论区留言交流~

🔔 关注我,获取《信创时代:国产数据库从选型到实战完全指南》系列文章!

📝 行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激!!!

专栏导航: