3.4 漫画分布式共识算法
🎭 人物介绍
- 小明:对分布式共识算法好奇的开发者
- 架构师老王:分布式系统专家,精通各种共识算法
📚 共识算法概述
小明:“老王,分布式系统中为什么需要共识算法?”
架构师老王:“想象一下,你有多个服务器需要就某个决定达成一致,比如选出一个领导者,或者确认一个事务是否提交。在网络不可靠、节点可能故障的环境下,如何保证所有正常节点能达成一致呢?这就是共识问题!”
共识算法的核心问题
分布式系统挑战|+-----------------+-----------------+| | |网络分区 节点故障 拜占庭故障(Network (Crash (ByzantinePartition) Failure) Failure)| | |消息延迟/丢失 节点宕机 恶意节点
🎯 Paxos算法详解
小明:“听说Paxos是最经典的共识算法?”
架构师老王:“没错!Paxos是Lamport在1990年提出的,虽然理解起来比较复杂,但它是很多其他算法的基础。”
Paxos基本概念
/*** Paxos角色定义*/
public class PaxosRoles {// 提议者 - 提出提案public static class Proposer {private int proposalId;private String value;public void prepare(Set<Acceptor> acceptors) {// Phase 1: Prepare阶段proposalId = generateUniqueId();for (Acceptor acceptor : acceptors) {PrepareResponse response = acceptor.receivePrepare(proposalId);// 处理响应...}}public void accept(Set<Acceptor> acceptors, String proposalValue) {// Phase 2: Accept阶段for (Acceptor acceptor : acceptors) {acceptor.receiveAccept(proposalId, proposalValue);}}}// 接受者 - 接受提案public static class Acceptor {private int maxProposalId = -1;private int acceptedProposalId = -1;private String acceptedValue = null;public PrepareResponse receivePrepare(int proposalId) {if (proposalId > maxProposalId) {maxProposalId = proposalId;return new PrepareResponse(true, acceptedProposalId, acceptedValue);}return new PrepareResponse(false, -1, null);}public AcceptResponse