文章目录
-
- [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 分布式数据库。关键收获:
- 发展历程: 从淘宝项目到 TPC-C 世界第一,10 年磨一剑
- 架构设计: 三层架构(接入层、计算层、存储层)、LSM-Tree 存储引擎
- 核心技术: Paxos 协议工程化、多租户隔离、分布式事务
- 高可用: 三地五中心、城市级容灾、RPO=0、RTO<30 秒
- 实战案例: 支付宝交易系统、网商银行核心系统
技术优势:
- ✅ 高性能(TPC-C 世界第一)
- ✅ 高可用(99.99999%)
- ✅ 高扩展(线性扩展到千节点)
- ✅ 低成本(仅为 Oracle 的 50%)
- ✅ 自主可控(100% 自研)
适用场景:
- ✅ 金融核心系统(银行、证券、保险)
- ✅ 互联网高并发(电商、社交、游戏)
- ✅ 政务大数据(一网通办、数据共享)
- ✅ 电信计费系统(实时出账、海量数据)
适用边界与限制:
- 本文聚焦 OceanBase 架构解析,不涉及与 TiDB、openGauss 等产品的横向对比
- 性能数据基于官方公开资料和典型场景测试,实际性能取决于硬件配置和业务负载
- 文中案例已做脱敏处理,部署配置需根据实际环境调整
趋势判断:
- 📈 技术成熟:经过双 11 验证
- 🔥 生态完善:工具链、服务商齐备
- 🌏 市场认可:1000+ 企业客户
- 💰 成本下降:TCO 节省 50%+
OceanBase,中国数据库的世界冠军!
👍 如果本文对你有帮助,欢迎点赞、收藏、转发!
💬 有任何问题或建议,请在评论区留言交流~
🔔 关注我,获取《信创时代:国产数据库从选型到实战完全指南》系列文章!
📝 行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激!!!
专栏导航:
- 上一篇:国产数据库分类
- 下一篇:TiDB 架构解析(待更新)