4.1 数据库选型与分库分表
数据库选型是架构设计中最关键的决策之一。关系型数据库(MySQL/PostgreSQL)、文档数据库(MongoDB)、键值存储(Redis)、列式数据库(ClickHouse)各有适用场景。选型的核心依据是数据访问模式和一致性要求。
当单表数据量超过千万级时,分库分表成为必然选择。但分库分表带来的分布式查询、跨库事务等问题需要谨慎处理。
- 垂直拆分:按业务维度将不同表拆分到不同数据库
- 水平拆分:按分片键将同一张表的数据分散到多个库/表
- 分片键选择:高基数、查询频繁的字段,避免热点
- 中间件方案:ShardingSphere、MyCat等分库分表中间件
4.2 缓存架构设计
缓存是提升系统性能的关键手段。从本地缓存到分布式缓存,从Cache Aside到Read/Write Through,不同的缓存策略适用于不同的业务场景。
- Cache Aside:先更新数据库,再删除缓存,简单可靠
- Read Through:缓存层代理数据库读取,对业务透明
- Write Behind:异步写回数据库,提升写入性能但有数据丢失风险
- 缓存穿透/击穿/雪崩:三大经典问题的解决方案
- 多级缓存:L1本地缓存 + L2分布式缓存,平衡性能与一致性
4.3 数据一致性方案
分布式系统中,数据一致性是最具挑战性的问题之一。强一致性(2PC/3PC)性能代价高昂,最终一致性(Saga/消息队列)是更常见的选择。
- 2PC/3PC:强一致性协议,适用于对一致性要求极高的场景
- TCC:Try-Confirm-Cancel,业务层面的分布式事务方案
- Saga:长事务拆分,每个步骤有对应的回滚操作
- 消息队列:基于消息的最终一致性,适用于跨服务数据同步
- 幂等设计:分布式系统中保证操作可重复执行的关键
本章小结
数据层架构的核心是在一致性、可用性和性能之间找到平衡。没有完美的方案,只有适合业务场景的选择。理解每种方案的适用边界和代价,是架构师的核心能力。