当前位置: 首页 > news >正文

揭阳网站制作机构股票跟单网站开发

揭阳网站制作机构,股票跟单网站开发,东营网站设计多少钱,网站建设 素材一、引言 在分布式系统中#xff0c;一致性是至关重要的一个问题。Paxos算法是由莱斯利兰伯特#xff08;Leslie Lamport#xff09;在1990年提出的一种解决分布式系统中一致性问题的算法。 二、算法原理 Paxos算法的目标是让一个分布式系统中的多个节点就某个值达成一致。算…一、引言 在分布式系统中一致性是至关重要的一个问题。Paxos算法是由莱斯利·兰伯特Leslie Lamport在1990年提出的一种解决分布式系统中一致性问题的算法。 二、算法原理 Paxos算法的目标是让一个分布式系统中的多个节点就某个值达成一致。算法通过多个阶段的消息传递来确保一致性 准备阶段Prepare提议者Proposer选择一个提案编号n并向接受者Acceptor发送准备请求。 承诺阶段Promise接受者收到准备请求后如果提案编号n大于它之前承诺过的任何提案编号则承诺不再接受编号小于n的提案并将其之前接受的最高编号的提案作为响应发送给提议者。 接受阶段Accept提议者收到足够多的承诺后发送接受请求给接受者请求它们接受提案[n, v]其中v是提议者选择的值。 学习阶段Learn一旦接受者接受了某个提案它会通知学习者Learner该提案已被接受。 三、数据结构 Paxos算法主要涉及以下数据结构 提案Proposal由提案编号和提议的值组成。 承诺Promise包含接受者承诺不再接受编号小于n的提案以及它之前接受的最高编号的提案。 四、使用场景 Paxos算法适用于以下场景 分布式数据库中的日志复制。 分布式系统中的状态机复制。 分布式锁服务。 五、算法实现 以下是Paxos算法的伪代码实现 class Proposer:def propose(value):n generate提案编号()send_prepare(n) to all Acceptorswait for majority promisesv determine_value_to_propose(promises)send_accept(n, v) to all Acceptorswait for majority acceptsnotify Learners of accepted proposalclass Acceptor:def on_prepare(request):if request.n promised_number:promised_number request.nsend promise with accepted_proposal to Proposerdef on_accept(request):if request.n promised_number:promised_number request.naccepted_proposal requestsend accepted_proposal to Learnersclass Learner:def on_learn(accepted_proposal):if enough proposals are accepted:chosen_value accepted_proposal.valueapply chosen_value to state machine六、其他同类算法对比 Raft算法相比Paxos更易于理解和实现提供了更明确的领导选举机制。Zab算法Zookeeper中使用的算法结合了Paxos的一些元素并针对特定场景进行了优化。 七、多语言实现 以下是Paxos算法的简化版实现 Java import java.util.HashMap; import java.util.Map;class Acceptor {private int promisedProposalNumber -1;private int acceptedProposalNumber -1;private String acceptedValue null;public synchronized boolean prepare(int proposalNumber) {if (proposalNumber promisedProposalNumber) {promisedProposalNumber proposalNumber;return true;}return false;}public synchronized boolean accept(int proposalNumber, String value) {if (proposalNumber promisedProposalNumber) {acceptedProposalNumber proposalNumber;acceptedValue value;return true;}return false;}public synchronized int getAcceptedProposalNumber() {return acceptedProposalNumber;}public synchronized String getAcceptedValue() {return acceptedValue;} }class Proposer {private final MapInteger, Acceptor acceptors;private int proposalNumber 0;private String value;public Proposer(MapInteger, Acceptor acceptors, String value) {this.acceptors acceptors;this.value value;}public void propose() {proposalNumber;int successfulPrepares 0;for (Acceptor acceptor : acceptors.values()) {if (acceptor.prepare(proposalNumber)) {successfulPrepares;}}if (successfulPrepares acceptors.size() / 2) {int successfulAccepts 0;for (Acceptor acceptor : acceptors.values()) {if (acceptor.accept(proposalNumber, value)) {successfulAccepts;}}if (successfulAccepts acceptors.size() / 2) {System.out.println(Proposal accepted: value);} else {System.out.println(Proposal rejected);}} else {System.out.println(Prepare rejected);}} }public class PaxosExample {public static void main(String[] args) {MapInteger, Acceptor acceptors new HashMap();for (int i 0; i 5; i) {acceptors.put(i, new Acceptor());}Proposer proposer1 new Proposer(acceptors, Value 1);proposer1.propose();} } Python class Acceptor:def __init__(self):self.promised_proposal_number -1self.accepted_proposal_number -1self.accepted_value Nonedef prepare(self, proposal_number):if proposal_number self.promised_proposal_number:self.promised_proposal_number proposal_numberreturn Truereturn Falsedef accept(self, proposal_number, value):if proposal_number self.promised_proposal_number:self.accepted_proposal_number proposal_numberself.accepted_value valuereturn Truereturn Falsedef get_accepted_proposal(self):return self.accepted_proposal_number, self.accepted_valueclass Proposer:def __init__(self, acceptors, value):self.acceptors acceptorsself.proposal_number 0self.value valuedef propose(self):self.proposal_number 1successful_prepares 0for acceptor in self.acceptors:if acceptor.prepare(self.proposal_number):successful_prepares 1if successful_prepares len(self.acceptors) // 2:successful_accepts 0for acceptor in self.acceptors:if acceptor.accept(self.proposal_number, self.value):successful_accepts 1if successful_accepts len(self.acceptors) // 2:print(fProposal accepted: {self.value})else:print(Proposal rejected)else:print(Prepare rejected)if __name__ __main__:acceptors [Acceptor() for _ in range(5)]proposer Proposer(acceptors, Value 1)proposer.propose() C #include iostream #include vector #include memoryclass Acceptor { public:Acceptor() : promisedProposalNumber(-1), acceptedProposalNumber(-1) {}bool prepare(int proposalNumber) {if (proposalNumber promisedProposalNumber) {promisedProposalNumber proposalNumber;return true;}return false;}bool accept(int proposalNumber, const std::string value) {if (proposalNumber promisedProposalNumber) {acceptedProposalNumber proposalNumber;acceptedValue value;return true;}return false;}std::pairint, std::string getAcceptedProposal() {return {acceptedProposalNumber, acceptedValue};}private:int promisedProposalNumber;int acceptedProposalNumber;std::string acceptedValue; };class Proposer { public:Proposer(std::vectorstd::shared_ptrAcceptor acceptors, const std::string value): acceptors(acceptors), proposalNumber(0), value(value) {}void propose() {proposalNumber;int successfulPrepares 0;for (auto acceptor : acceptors) {if (acceptor-prepare(proposalNumber)) {successfulPrepares;}}if (successfulPrepares acceptors.size() / 2) {int successfulAccepts 0;for (auto acceptor : acceptors) {if (acceptor-accept(proposalNumber, value)) {successfulAccepts;}}if (successfulAccepts acceptors.size() / 2) {std::cout Proposal accepted: value std::endl;} else {std::cout Proposal rejected std::endl;}} else {std::cout Prepare rejected std::endl;}}private:std::vectorstd::shared_ptrAcceptor acceptors;int proposalNumber;std::string value; };int main() {std::vectorstd::shared_ptrAcceptor acceptors;for (int i 0; i 5; i) {acceptors.push_back(std::make_sharedAcceptor());}Proposer proposer(acceptors, Value 1);proposer.propose();return 0; } Go package mainimport (fmt )type Acceptor struct {promisedProposalNumber intacceptedProposalNumber intacceptedValue string }func NewAcceptor() *Acceptor {return Acceptor{promisedProposalNumber: -1,acceptedProposalNumber: -1,} }func (a *Acceptor) Prepare(proposalNumber int) bool {if proposalNumber a.promisedProposalNumber {a.promisedProposalNumber proposalNumberreturn true}return false }func (a *Acceptor) Accept(proposalNumber int, value string) bool {if proposalNumber a.promisedProposalNumber {a.acceptedProposalNumber proposalNumbera.acceptedValue valuereturn true}return false }type Proposer struct {acceptors []*AcceptorproposalNumber intvalue string }func NewProposer(acceptors []*Acceptor, value string) *Proposer {return Proposer{acceptors: acceptors,value: value,} }func (p *Proposer) Propose() {p.proposalNumbersuccessfulPrepares : 0for _, acceptor : range p.acceptors {if acceptor.Prepare(p.proposalNumber) {successfulPrepares}}if successfulPrepares len(p.acceptors)/2 {successfulAccepts : 0for _, acceptor : range p.acceptors {if acceptor.Accept(p.proposalNumber, p.value) {successfulAccepts}}if successfulAccepts len(p.acceptors)/2 {fmt.Println(Proposal accepted:, p.value)} else {fmt.Println(Proposal rejected)}} else {fmt.Println(Prepare rejected)} }func main() {acceptors : make([]*Acceptor, 5)for i : range acceptors {acceptors[i] NewAcceptor()}proposer : NewProposer(acceptors, Value 1)proposer.Propose() } 八、实际服务应用场景代码框架 以下是一个使用Paxos算法实现分布式锁服务的代码框架 // Java - Distributed Lock Service with Paxos public class DistributedLockService {private final Proposer proposer;private final Acceptor acceptor;private final Learner learner;public DistributedLockService() {this.proposer new Proposer();this.acceptor new Acceptor();this.learner new Learner();}public boolean lock(String resource) {// Use Paxos to agree on the lock ownerreturn proposer.propose(resource);}public boolean unlock(String resource) {// Use Paxos to agree on releasing the lockreturn proposer.propose(null);} }
http://www.w-s-a.com/news/640013/

相关文章:

  • 模板演示网站移动网站开发公司
  • 网站管理办法制度公司招聘信息
  • 宜昌市建设监理协会网站免备案免费域名
  • 河北省建设银行网站首页备案号怎么放到网站
  • 做电脑网站用什么软件有哪些wordpress版权修改
  • 加强部门网站建设工作wordpress文章页横幅
  • 中英网站怎么做wordpress本地音乐
  • 万网提供的网站建设服务的具体项目祥云平台网站建设
  • ftp网站怎么看后台的代码网站 制作软件
  • 网站开发软件教程网站tag 怎么实现
  • 中国建设监理协会化工监理协会网站彩票站自己做网站吗
  • 170个可带链接锚文本外链的网站论坛微信上如何创建小程序
  • 用js来做网站亳州建设局网站
  • 做网站的公司利润多少呢纺织厂网站模板
  • 网页设计构建的基本流程宜宾seo网站建设
  • 西安网站开发公司价格保定徐水网站建设
  • 学做川菜下什么网站软件著作权和专利的区别
  • 百度网站标题东莞外包公司有哪些
  • 织梦增加网站英文名称网页界面设计特点
  • 企业如何进行网站建设棋牌代理平台
  • 韩国做美食网站有哪些seo优化在线诊断
  • 网站建设规划模板做擦边网站
  • 做网站台式还是笔记本网上下载的免费网站模板怎么用
  • 高校网站群管理系统凡科建站是永久的吗
  • 深圳网站建设服务电话网站通栏设计素材
  • 网站里面的视频功能怎么做网站名注册
  • 网站游戏下载厦门php网站建设
  • 沈阳关键词网站排名一台服务器做两个网站吗
  • 哪个行业该做网站但是没有做dom手表官方网站
  • 网站建设费 大创wordpress中函数get