whypaxos

为什么是paxos

最近又看了次 paxos made simple,每次看完总觉得理解了它,但不久之后又将它忘得一干二净,因此决定这次好好梳理下。本文还参考了微信对于paxos 的实现的相关文章(见 phxpaxos)。

本文主要从paxos是如何执行的,已经如果不这么执行,会有什么样的问题来描述paxos,这个思路是我觉得比较好接受的方式。至于paxos的理论证明,在 The Part-Time Parliamentpaxos made simple 已经将的很清楚了,有兴趣可以去看论文。

paxos基本定义

概论:paxos要解决的问题是,在多台机器确定一个值。也就是说完整跑完paxos,可以保证在这个集群里,最终总有个时刻,所有存活的机器保留的这个值都相同(至于得到一个不变量,在工程上有什么用,这里就不加讨论了)。

paxos里面有几个角色:

  • proposer:提议者,接收客户端的请求,发起一个请求。
  • acceptor:接受者,决定是否接受proposer的提议。

对于一个提议,包含:

  • proposal number:提议号,全局唯一,且各自的机器需要保证自己的proposal number是递增的。实现可以是:时间戳加ip或者提前分好各自的提议段(第一台机子:1,101,201,第二台机子:2,102,202)。
  • proposal value:提议的值。

paxos的执行流程

第一阶段(prepare request)
  • proposer  选择一个 proposal number ,然后将它发送给大多数 acceptor (大多数:对于一个固定集合来说,大多数基本就是大于一半的数量。更精确的定义的是,两个大多数集总有一个共同元素)。这个请求被称为:prepare request 。
  • 对于 acceptor ,如果它收到一个 proposal number 为 n 的 prepare request,那么倘若这个 acceptor 没有回复过 proposal number 大于 n 的 prepare request ,则该 acceptor 需要回复这个 prepare request,并承诺不再 accept 任意 proposal number 小于 n 的 prepare request,如果在这之前该 acceptor accept 过任何 proposal,则还必须带上 accept 过的拥有最大 proposal number 的 proposal (含 proposal number 和 value)。
第二阶段(accept request)
  • 如果 proposer 收到大多数 acceptor 对于 proposal number 为 n 的 prepare request 的响应,那么该 proposer 就可以向 acceptor 发起 accept request,proposal number 为 n,值为 v (其中,如果 acceptor 响应中带有 proposal,则 v 为 proposal number 最大的那个 proposal 值,否则 v 可以为任意值)
  • acceptor 收到 accept request 后,如果这个proposal 不违背该 acceptor 做出的承诺(在 prepare request 阶段,不再接受 proposal number 小于 n 的承诺),则 acceptor 必须 accept 这个请求。

当大多数的 acceptor 都回应了这个 accept request,那么完整的 paxos 就已经跑完了,唯一的一个值已经被choose了。

为什么paxos要这么麻烦

不用两个阶段可以么

paxos 的强大之处在于即使有多个 proposer 并行地提出请求,也能保证集群最终只会 choose 到同一个值,而且只要集群的大多数机器不宕机,服务是可以继续下去的。

如果各个 proposer  直接提出 accept request ,那么很容易就出现这样的情况:有4台机器ABCD,A和B提出了propose,很可能就出现了AC两台机器同意了A的请求,BD两台机器同意B的请求,最终将无法得到一个结果。

话虽这么说,但 paxos 其实也会协商得不到一个值的情况:A向大多数机器发送了 prepare request,proposal number 为 1,并得到了大多数机器的响应;与此同时 B 也向大多数机器发送了 prepare request ,proposal number 假设为 2,那么这时 A 再发送 accept request 的时候,就会被这些机器拒绝(它们已经承诺不接受proposal number 小于2 的请求),所以A 重新发送 prepare request , proposal number 为101,之后 B 再来发送 accept request 的时候就被拒绝,所以 B 又发送proposal number 为102的 prepare request,如此往复,就永远得不到一个共同的值。

由于 paxos 存在着上述这种情况,所以如果有个 leader ,由这个 leader 来提出 propose ,就不会有上述的情况。那么这个 leader 是怎么确定的,在 paxos made simple 的论文里面并没有提到。不过可以看出,paxos 对这个 leader 并没有做出任何限制,也就是说,即使在某个时刻存在着两个 leader ,同样也不会影响到 paxos 来确定出最终的一个值。因此 leader 的选举就变得不是特别复杂,例如利用一些简单的策略:一旦收到其他机器的 accept request ,就在一段随机时间内,停止进行 paxos 的 prepare request。由于这是随机时间,所以最终总会有台机器脱颖而出,不断进行 prepare request,然后 accept request ,这使得其他机器又进行一段时间的停止 prepare request,所以该机器又能顺利通过 prepare request,再 accept request。这样,一个 leader 就自然而然地产生了。

那 paxos 来选举 master 又是怎么回事

master 的一个重要特点是:集群在任意时刻,最多只能有一个 master 。也就是说,宁可没有 master ,也不能出现多个 master 的情况。说起 master ,要稍微说下 paxos 选出一个值后有什么用,可以这么想,paxos 可以选出一个值,那么顺序运行多个 paxos 实例,就可以做到在集群中,各个机器都维护一个状态机,顺序执行 paxos 的结果可以作为这个状态机的输入,那么就能保证集群中所有的状态机都能得到一个最终一致性(这也就是基本的 multi-paxos 的模型)。而 master 的作用就体现出来了,如果有个 master 进行读写,那么从这个 master 总能读出最新的数据。

至于 master 怎么选,简单点说就是发起一个 paxos 的过程,各台机器的proposal value 就是自己的节点信息,也就是各个机器都认为自己是 master ,最终确定下来一个 value,也就确定了 master 。当然也没这么简单,如果 master 挂了又该怎么办?其实不需要主动去判断 master 是否挂了,只需要给 master 一个任期,任期结束后,master 主动去续约。只要 master 在任期结束前,提前去续约,就总是能续约成功的。 既然引入了任期的概念,也就是说,需要用多个 paxos 实例来确定,也即是 multi-paxos ,但有机器与 master 失联,没有学到 master 的续约的请求后,重新发起次 paxos,由于 paxos 实例落后于 master 的,自然不会得到大多数机器的接受,进而可以学到 master 是谁。

不同的 proposer 的 proposal number 一样可以么

不可以。paxos 对 proposal number 是有一定的要求的:proposal number 在所有机器中必须是唯一的,而且各自的机器必须是递增的。从 paxos 的过程也可以看出,在 prepare request 阶段,是只利用 proposal number 来进行提议的,不需要用到提议的值,承诺也是针对 proposal number ,如果存在不同机器的 proposal number 是一样的,而它们提议的值却不一定一样,这就违背了最终所有机器确定唯一的值的初衷了。

源码来自:https://pan.quark.cn/s/a3a3fbe70177 AppBrowser(Application属性查看器,不需要越狱! ! ! ) 不需要越狱,调用私有方法 --- 获取完整的已安装应用列表、打开和删除应用操作、应用运行时相关信息的查看。 支持iOS10.X 注意 目前AppBrowser不支持iOS11应用查看, 由于iOS11目前还处在Beta版, 系统API还没有稳定下来。 等到Private Header更新了iOS11版本,我也会进行更新。 功能 [x] 已安装的应用列表 [x] 应用的详情界面 (打开应用,删除应用,应用的相关信息展示) [x] 应用运行时信息展示(LSApplicationProxy) [ ] 定制喜欢的字段,展示在应用详情界面 介绍 所有已安装应用列表(应用icon+应用名) 为了提供思路,这里只用伪代码,具体的私有代码调用请查看: 获取应用实例: 获取应用名和应用的icon: 应用列表界面展示: 应用列表 应用运行时详情 打开应用: 卸载应用: 获取info.plist文件: 应用运行时详情界面展示: 应用运行时详情 右上角,从左往右第一个按钮用来打开应用;第二个按钮用来卸载这个应用 INFO按钮用来解析并显示出对应的LSApplicationProxy类 树形展示LSApplicationProxy类 通过算法,将LSApplicationProxy类,转换成了字典。 转换规则是:属性名为key,属性值为value,如果value是一个可解析的类(除了NSString,NSNumber...等等)或者是个数组或字典,则继续递归解析。 并且会找到superClass的属性并解析,superClass如...
基于遗传算法辅助异构改进的动态多群粒子群优化算法(GA-HIDMSPSO)的LSTM分类预测研究(Matlab代码实现)内容概要:本文研究了一种基于遗传算法辅助异构改进的动态多群粒子群优化算法(GA-HIDMSPSO),并将其应用于LSTM神经网络的分类预测中,通过Matlab代码实现。该方法结合遗传算法的全局搜索能力与改进的多群粒子群算法的局部优化特性,提升LSTM模型在分类任务中的性能表现,尤其适用于复杂非线性系统的预测问题。文中详细阐述了算法的设计思路、优化机制及在LSTM参数优化中的具体应用,并提供了可复现的Matlab代码,属于SCI级别研究成果的复现与拓展。; 适合人群:具备一定机器学习和优化算法基础,熟悉Matlab编程,从事智能算法、时间序列预测或分类模型研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①提升LSTM在分类任务中的准确性与收敛速度;②研究混合智能优化算法(如GA与PSO结合)在神经网络超参数优化中的应用;③实现高精度分类预测模型,适用于电力系统故障诊断、电池健康状态识别等领域; 阅读建议:建议读者结合Matlab代码逐步调试运行,理解GA-HIDMSPSO算法的实现细节,重点关注种群划分、异构策略设计及与LSTM的集成方式,同时可扩展至其他深度学习模型的参数优化任务中进行对比实验。
随着第五代移动通信技术在全球的广泛应用,业界普遍关注其潜在的新型服务模式,这些模式有望利用前沿技术帮助电信服务商突破当前业务增长的瓶颈。虽然通信与感知融合是第六代移动通信系统的远景目标之一,但本论述将阐明,该融合技术实际上可能在现有5G阶段便逐步展开,尤其可对接快速扩张的无人机产业,并形成如下判断:尽管近期国际局势中的局部冲突使无人机作战能力受到广泛瞩目,然而真正具备持续增长潜力的全球无人机产业链,将主要依托具有强劲市场需求支撑的商业化应用。多家权威研究机构已作出预估,无人机相关市场的总体规模未来将突破千亿美元级别。这一产业的迅猛发展预计将带动农业、能源、矿产、环境保护、智慧城市、旅游及三维地理信息测绘等多个行业的数字化进程,促进数字经济良性发展。大量应用场景依赖高清影像的实时传输,这意味着无人机产业的崛起,可能为电信运营商带来高附加值的物联网业务,并提升用户平均收入水平。 除影像回传外,无人机联网服务的另一个关键应用方向,是借助低空区域的蜂窝网络覆盖实现无人机互联,支撑其自主飞行的能力。相关研究显示,对运营商而言,此类应用的市场容量可能与各垂直行业中的视频回传业务规模相近。当前,我国在册无人机数量已超过百万架,随着行业进入爆发期,预计未来规模将攀升至千万级别。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
基于Django的Python音乐网站系统设计与实现项目源码,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计与实现项目源码基于Django的Python音乐网站系统设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值