# paxos cpp **Repository Path**: GaussianPrince/paxos-cpp ## Basic Information - **Project Name**: paxos cpp - **Description**: - paxos算法实现,注意不是muti-paxos,而是basic paxos - 纯C++实现 - 使用C++线程、互斥锁、条件变量 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-13 - **Last Updated**: 2023-08-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: paxos, Thread, Socket, Cpp ## README # paxos-cpp #### 介绍 - paxos算法实现,注意不是muti-paxos,而是basic paxos - 纯C++实现 - 使用C++线程、互斥锁、条件变量 #### 软件架构 - paxos算法有三种角色,acceptor,learner,proposer - paxos算法可以赋予同一个节点多个角色,比如节点1可以是acceptor、learner、proposer - paxos算法步骤如下 1. proposer向learner发送prepare报文,请求accept的promise 2. acceptor检查收到的prepare报文的序列号是否大于已经promise的序列号, 如果大于,则更新acceptor的最大序列号,并且向发送prepare报文的proposer回复promise否则,acceptor什么也不做,仅仅继续接收报文。 3. proposer收到来自acceptor的promise报文,比较上次从该acceptor收到的promise序列号,如果当前的promise序列号大于上一次的,则更新,若大于proposer最大序列号,则更新proposer的最大序列号(为了解决活锁问题)。 4. proposer收到超过半数的acceptor的promise报文,则认为本次投票完成,向超过半数的acceptor发送propose报文 5. acceptor收到propose报文后,检查是否与之前接收的prepare报文的序列号一致,如果一直,则向所有的learner发送accept报文, 6. learner发现某个序列号有超过一个半的acceptor同意,则结束本次同步。 #### 安装教程 1. make #### 使用说明 ![使用方法](paxos-cpp.gif)