第四章 预计学习时长:50 分钟

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:长事务拆分,每个步骤有对应的回滚操作
  • 消息队列:基于消息的最终一致性,适用于跨服务数据同步
  • 幂等设计:分布式系统中保证操作可重复执行的关键

本章小结

数据层架构的核心是在一致性、可用性和性能之间找到平衡。没有完美的方案,只有适合业务场景的选择。理解每种方案的适用边界和代价,是架构师的核心能力。