如何设计一个高可用的数据存储系统(存滴滴的用户表和订单表)?
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程
https://www.captainai.net/troubleshooter
设计一个高可用的数据存储系统来处理滴滴这样体量的用户表和订单表,是一个典型的海量数据 + 极高并发 + 强一致性(部分场景)的挑战。
核心设计理念是:读写分离、分库分表、冷热分离、多级缓存、异地多活。
下面我会从数据模型、存储选型、高可用架构、关键策略几个方面来详细说明。
一、核心设计原则
-
读写分离:订单核心路径(创建、更新状态)与查询分析分离。
-
分而治之:用户表按
user_id分片,订单表按order_id分片,同时建立二级索引。 -
冷热分离:近期订单(热数据)用高性能 SSD,历史订单(冷数据)存廉价 HDD 或归档。
-
最终一致性:非核心场景(如订单评价、历史查询)允许短暂不一致,核心场景(支付、状态变更)需强一致。
二、数据模型设计
1. 用户表(User)
-
特点:数据量巨大(数亿),读写比约 1:1,单条记录小,更新频率较低(改密码、换手机)。
-
存储引擎:分库分表的 MySQL 或 TiDB。
-
分片键:
user_id。 -
核心字段:
user_id、phone(唯一)、nickname、password_hash、reg_time、last_login_time等。
2. 订单表(Order)
-
特点:数据量极大(每天数千万),写入 TPS 极高(乘客下单、司机接单、状态流转),读写比约 100:1(查订单远多于写)。
-
存储引擎:分库分表的 MySQL + NoSQL(如 ScyllaDB/TiDB)。
-
分片键:
order_id(通常用雪花算法生成,保证全局唯一)。 -
二级索引查询:用户查我的订单(
user_id)、司机查我的订单(driver_id)。 -
核心字段:
order_id、user_id、driver_id、start_lng/lat、end_lng/lat、status、create_time、pay_amount等。
三、存储系统分层架构
| 层级 | 技术选型 | 作用 |
|---|---|---|
| 接入层 | LVS + Nginx/HAProxy | 负载均衡、故障转移 |
| 缓存层 | Redis Cluster(哨兵/Cluster 模式) | 缓存用户 Session、订单状态、司机位置 |
| 数据层(热) | MySQL 分库分表(如 64 库 1024 表) | 在线核心交易(强一致) |
| 数据层(温) | TiDB / ScyllaDB | 用户订单列表查询、运营分析(扩展性强) |
| 数据层(冷) | HBase / ClickHouse / 对象存储(S3) | 历史订单归档、OLAP 分析 |
| 同步管道 | Canal / Flink / DataX | 实时同步 MySQL → Redis/TiDB/HBase |
| 调度与治理 | ZK / Etcd / Sentinel | 分片路由、故障检测、配置管理 |
四、高可用关键策略
1. 分库分表(应对海量数据)
-
用户表:
user_id做一致性哈希,分成 64 库 × 1024 张表。 -
订单表:
order_id分片,同时建立 冗余索引表 或 ES 索引 来支持user_id查询。-
方案:使用 双写(插入订单表同时插入用户订单索引表
user_order_idx,按user_id分片)。
-
-
中间件:ShardingSphere-JDBC / MyCAT / Vitess。
2. 主从复制 + 自动故障转移
-
MySQL:一主多从(如 1 主 2 从),半同步复制(保证主备数据不丢)。
-
故障切换:MHA / Orchestrator / 数据库内置高可用(Group Replication)。
-
读写分离:写走主库,读走从库(注意主从延迟容忍)。
3. 缓存高可用(扛 QPS)
-
用户信息:
user:{user_id}→ Redis,TTL 1 小时,防缓存击穿(布隆过滤器)。 -
订单状态:
order:{order_id}→ Redis,TTL 较短(如 10 分钟),写操作时先更新 DB,再删除缓存。 -
Redis 架构:Redis Cluster(自动分片 + failover)或 主从 + Sentinel。
-
防雪崩:多级缓存(本地 Caffeine + Redis),限流、熔断。
4. 数据最终一致性(跨库/跨缓存场景)
-
事务消息:订单创建 → 发送 RocketMQ 消息 → 消费者更新用户订单索引表。
-
本地消息表 + 定时对账:所有关键操作记录流水,夜间对账修复。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)