当前位置: 首页 > article >正文

亿级分布式系统架构演进实战(八)- 垂直拆分(领域划分及垂直分库设计)

亿级分布式系统架构演进实战(一)- 总体概要
亿级分布式系统架构演进实战(二)- 横向扩展(服务无状态化)
亿级分布式系统架构演进实战(三)- 横向扩展(数据库读写分离)
亿级分布式系统架构演进实战(四)- 横向扩展(负载均衡与弹性伸缩)
亿级分布式系统架构演进实战(五)- 横向扩展(缓存策略设计)
亿级分布式系统架构演进实战(六)- 横向扩展(监控与日志体系)
亿级分布式系统架构演进实战(七)- 横向扩展(安全防护设计)

一、业务领域划分设计

1.1 战略设计:基于领域驱动设计(DDD)

核心方法论
界限上下文(Bounded Context):将系统拆分为多个高内聚的业务单元,每个单元内数据模型自洽。
上下文映射(Context Mapping):定义跨上下文交互模式(如防腐层、共享内核)。

营销中台案例

  1. 订单与库存服务拆分
    订单上下文:处理交易流程(订单创建、支付)
    库存上下文:管理商品库存(扣减、预留)
    交互方式:通过领域事件(如OrderPlacedEvent)驱动库存扣减,而非直接数据库操作。
1.2 战术设计:业务领域拆分维度
维度拆分标准与行业实践
业务价值流按端到端业务流程划分(如电商的“搜索-下单-支付-履约”)
数据变更频率高频写模块(如库存)与低频写模块(如商品描述)物理隔离
性能隔离需求高吞吐模块(如支付)独立资源池
合规与安全敏感数据(如支付信息)独立部署并加密

拆分验证标准
业务闭环性:单个领域内可完成核心业务流程(如订单创建到发货)
数据封闭性:领域内数据自包含,跨领域交互仅通过事件/API


二、数据所有权与服务映射(行业标准方案)

2.1 数据所有权原则

核心规则一个界限上下文 = 一个数据库,禁止跨库直接访问。

2.2 数据所有权治理技术

方案对比

治理模式技术实现代表案例
强所有权数据库权限隔离(不同服务使用不同DB账号)阿里核心交易系统(订单/支付独立账号)
弱所有权通过数据契约定义字段读写权限字节跳动AB实验平台(通过Protobuf Schema约束)

数据契约示例

// 用户服务数据契约(ProtoBuf定义)
message UserDataContract {
  // 允许他方读取的字段
  string user_id = 1;
  string name = 2;
  
  // 禁止外部访问的字段
  string password_hash = 3 [(access_control) = "INTERNAL"];
}

自动化治理工具链

  1. Schema Registry:统一管理数据契约(如Confluent Schema Registry)
  2. 数据血缘追踪:通过Apache Atlas监控跨领域数据流动
  3. 权限拦截:数据库代理(如ProxySQL)自动阻断非法SQL

三、数据库垂直分库设计(贴合业务拆分)

3.1 分库策略与行业对标
服务类型分库方案代表案例
核心交易服务单元化分库(按用户ID哈希分Set)支付宝三地五中心架构(256个逻辑库)
高频查询服务读写分离(1主 + 只读副本)+ 缓存加速美团商品详情页(Redis + MySQL只读副本)
实时分析服务HTAP数据库(如TiDB) + 列存储引擎拼多多实时大屏(TiDB + TiFlash)

TiDB在跨库分析的实践

-- TiDB实现跨库联邦查询(无需ETL)
SELECT o.order_id, u.name 
FROM mysql.order_db.orders o 
JOIN mysql.user_db.users u ON o.user_id = u.user_id
WHERE o.create_time > '2023-01-01';

适用场景
优势:简化复杂查询,避免数据冗余
限制:跨网络查询延迟较高,适合低频运营分析


四、数据迁移方案(零侵入式设计)

4.1 全行业验证方案

流程设计

CDC工具
实时消费
校验服务
自动修复
旧库
消息队列
新库
差异报警
数据修复脚本

技术选型

  1. 变更捕获:Debezium(Kafka Connect)
  2. 数据校验Uber开源的DBCompare工具
  3. 自动修复:自愈脚本(Python + SQL模板)

灰度切换策略

  1. 影子库验证:将10%生产流量导入新库,对比结果一致性
  2. 地域切流:从低风险区域(如欧洲)开始逐步切换
  3. 业务降级预案:准备秒级回滚脚本(Redis回档 + 流量切换)

五、跨库查询治理(混合方案)

5.1 多模式解决方案
场景解决方案技术选型
简单点查冗余关键字段 + 异步刷新Canal + Redis PubSub
复杂分析TiDB联邦查询 + 列存储引擎TiFlash加速列式分析
实时聚合流处理引擎(Flink) + 数据湖Flink SQL + Apache Iceberg

TiDB优化案例

-- 创建TiDB MPP(大规模并行处理)任务
SET tidb_allow_mpp=1;
SELECT /*+ read_from_storage(tiflash[user_db.users]) */ 
    u.region, COUNT(o.order_id)
FROM orders o 
JOIN users u ON o.user_id = u.user_id
GROUP BY u.region;

性能对比

查询类型传统JOIN(MySQL)TiDB MPP
跨库亿级数据聚合> 30分钟< 10秒

六、生产级实施流程

6.1 阶段化推进
阶段核心产出验证标准
业务建模领域划分图 + 上下文映射表通过技术委员会评审,无重大遗漏
分库实施分库路由配置 + 自动化扩缩容策略压测TPS达设计值120%,P99延迟达标
数据迁移全量/增量迁移报告 + 一致性校验结果数据差异率 < 0.0001%,修复自动化率100%
流量切换灰度发布报告 + 监控看板各批次故障率 < 0.01%,回滚成功率100%
6.2 监控体系

黄金指标

  1. 数据库层:连接池使用率(<70%)、慢SQL率(<1%)
  2. 服务层:跨服务调用错误率(<0.1%)、熔断触发次数
  3. 业务层:核心功能SLA(如支付成功率>99.95%)


http://www.kler.cn/a/601142.html

相关文章:

  • springboot使用netty做TCP客户端
  • Java Collection API增强功能系列之六 改进的 ConcurrentHashMap:归约、搜索、计数与 Set 视图详解
  • [图形学]在半球面上按照微表面模型采样
  • 个人博客系统系统~测试报告
  • 【机器学习】什么是随机森林?
  • PCL 点云多平面探测
  • Vue项目的 Sass 全局基础样式格式化方案,包含常见元素的样式重置
  • zynq7020 最小ps环境速通
  • 数据库三级填空+应用题(1)
  • S32K144外设实验(七):FTM输出多路互补带死区PWM
  • 简洁、实用、无插件和更安全为特点的WordPress主题
  • PDF与Markdown的量子纠缠:一场由VLM导演的文档界奇幻秀
  • Android设计模式之工厂方法模式
  • 西门子 CPU 1513-1 PN TCP Server 接收字符串前多了一个问号
  • Chrome(Google) 浏览器安装Vue2、Vue3 Devtools插件方法
  • 前端解决方案:实现网页截图并导出PDF功能
  • STC32单片机驱动UC1705X点阵屏调试VLCD没升压显示拖影
  • [7-01-03].SpringBoot3集成MinIo
  • Pytorch使用手册—计算机视觉领域的量化迁移学习教程(专题六十三)
  • 【大模型】数字人 EchoMimicV2 的环境配置和使用