一句话总结
分布式系统面试考察理论基础,核心考点:CAP理论(CP vs AP选择)+ BASE(最终一致性)、分布式事务(2PC/TCC/Saga/可靠消息)、一致性算法(Paxos/Raft/ZAB)、消息队列(RabbitMQ/Kafka/RocketMQ 对比+消息可靠性)。
CAP与BASE理论
CAP理论:分布式系统无法同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance),最多满足两个。
由于网络分区不可避免,实际选择是CP或AP:
CP系统:ZooKeeper、Etcd——保证一致性,可能牺牲可用性。
AP系统:Eureka、Cassandra——保证可用性,可能返回旧数据。
BASE理论:Basically Available(基本可用)、Soft State(软状态)、Eventually Consistent(最终一致性)。是CAP中AP的延伸。
分布式事务
2PC(两阶段提交):协调者先询问所有参与者,全部同意后提交。问题:同步阻塞、单点故障、数据不一致风险。
TCC(Try-Confirm-Cancel):业务层面的两阶段提交。Try预留资源,Confirm确认执行,Cancel取消回滚。代码侵入性强。
Saga模式:长事务拆分为多个本地事务,每个事务有补偿操作。适合业务流程长的场景。
可靠消息最终一致性:利用消息队列确保最终一致性。本地消息表或事务消息。
一致性算法
Paxos:分布式一致性算法的基石,Basic Paxos难以工程实现。
Raft:易于理解的共识算法。核心:Leader选举 + 日志复制。三种角色:Leader、Follower、Candidate。
选举过程:Follower超时后变为Candidate,获得多数票后成为Leader。Leader心跳维持权威。
ZAB协议:ZooKeeper使用,类似Raft,支持崩溃恢复和消息广播。
消息队列
消息队列的作用:异步处理、流量削峰、应用解耦。
常见MQ对比:
RabbitMQ:Erlang实现,功能丰富,适合中小规模。
Kafka:Scala/Java实现,高吞吐,适合大数据和日志场景。
RocketMQ:Java实现,事务消息支持好,适合电商场景。
常见问题:消息丢失(发送确认+持久化+消费确认)、消息重复(幂等处理)、消息顺序(分区有序)、消息积压(增加消费者+临时扩容)。