PhxPaxos是腾讯公司微信后台团队自主研发的一套基于Paxos协议的多机状态拷贝类库。它以库函数的方式嵌入到开发者的代码当中, 使得一些单机状态服务可以扩展到多机器,从而获得强一致性的多副本以及自动容灾的特性。 这个类库在微信服务里面经过一系列的工程验证,并且我们对它进行过大量的恶劣环境下的测试,使其在一致性的保证上更为健壮。
基于Lamport的 Paxos Made Simple 进行工程化,不进行任何算法变种。
使用基于消息传递机制的纯异步工程架构。
每次写盘使用fsync严格保证正确性。
一次Propose(写入数据)的Latency为一次RTT,均摊单机写盘次数为1次。
使用点对点流式协议进行快速学习。
支持Checkpoint以及对PaxosLog的自动清理。
支持跨机器的Checkpoint自动拉取。
一个PhxPaxos实例可以同时挂载多个状态机。
可使用镜像状态机模式进行Checkpoint的自动生成。
内置Master选举功能。
线上数据的实时增量checksum校验。
网络、存储、监控、日志模块插件化,可由开发者自定义。
局限
一个PhxPaxos实例任一时刻只允许运行在单一进程(容许多线程)。
这个类库没有内建对client-server的支持,开发者必须将类库的代码嵌入到自己的服务器代码里面,以实现这个功能。
PhxPaxos只容许运行在64位的Linux平台。
前言 此文是编译过程的一个详细记录,如果想跳过各种坑,看精简的步骤,参见:phxpaxos编译 完整流程(精简版) Paxos是分布式一致性算法中最基础和最著名的算法,没有之一。从Lamport正式公开发表Paxos论文算起,整整20周年。每个人在理解了一个算法后,往往都要思考一个问题,这个算法如何实现、能用在哪里。为了知道这两个问题,我在github上搜寻Paxos的项目,最高星(1900星)的
以下流程从一个新的虚拟机开始 安装环境:CentOS-7-x86_64-Minimal 网络配置:安装net-tools,能用ifconfig命令和ssh连接即可。 以下步骤具体的操作原因,详见:《phxpaxos编译 完整流程》 1. 安装依赖 yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
phxpasox项目分析 添加调试功能 为了能够单步调试,需要修改tools目录下的create_makefile.py文件 修改添加 -g makefile.write(“CPPFLAGS+=$(%s) -g\n\n” % extra_cpp_flag_name) 然后 build.sh make clean make make install // 还需要重新编译plugin 然后编译运行
了解分布式系统的童鞋肯定听过Paxos算法的大名。Paxos算法以晦涩难懂著称,其工程实现更难。目前,号称在工程上实现了Paxos算法的应该只有Google、阿里和腾讯。然而,只有腾讯的微信团队真正将代码开源出来,他们将Paxos算法的实现封装成了一个Paxos库,大家可以基于该库实现自己想要的功能,比如用于master选举,或者甚至利用它来实现一个分布式KV数据库等。 之前就对Paxos很感兴趣
1. 开启BatchPropose后,状态机使用ExecuteForCheckpoint生成快照要注意: ExecuteForCheckpoint中的InstanceID不能立即持久化。 例如: 当instance id = 3中包含多个值的时候,如果执行第一个值就更新的checkpoint version(GetCheckpointInstanceID的返回值),那么当进程重启之后(例如
微信paxos类库PhxPaxos实现原理与解析 微信最近开源了其paxos类库PhxPaxos,具体参考资料: 1. phxpaxos github的地址:点击打开链接 2. 微信自研生产级paxos类库PhxPaxos实现原理介绍 : 点击打开链接 ============ 下面是我看源码时写的几篇博文 ====
PhxPaxos是腾讯公司微信后台团队自主研发的一套基于Paxos协议的多机状态拷贝类库。它以库函数的方式嵌入到开发者的代码当中, 使得一些单机状态服务可以扩展到多机器,从而获得强一致性的多副本以及自动容灾的特性。 该库的源代码请参考: https://github.com/Tencent/phxpaxos 本文不会对PhxPaxos库的具体实现进行详细的讲解,只是简单地介绍了该库中的master
0.原文地址 1.Paxos算法简介 Paxos算法是一个分布式一致算法,也就是在异步,荡机,失联的复杂网络环境下仍然能够保证读写的一致性。在实现上本质上也是一种两阶段提交的机制,在算法里有接受者,提议者和学习者三种角色。提议者提出读写请求,接收者对请求进行许可性判断,学习者直接学习(更新)值。Paxos算法相对于经典的两阶段提交,generalize了leader这个角色,使用接受者进行了替代。
从PhxPaxos中再看Paxos协议 本文就是通过Phxpaxos中所附带的简单例子,摸索了解Phxpaxos中对Paxos算法的实现,算是验证一下前面对Paxos算法的学习吧。当然之前也说过,Phxpaxos同Lamport老爷爷的原版Multi-Paxos相比已经修改了很多,毕竟老爷爷的文章比较的偏理论化,所以理论上不修改的Multi-Paxos是不可能满足线上分布式系统的可用性和可靠性
phxpaxos learn模块解析 TO DO
微信paxos类库PhxPaxos实现原理与解析 微信最近开源了其paxos类库PhxPaxos,具体参考资料: 1. phxpaxos github的地址:点击打开链接 2. 微信自研生产级paxos类库PhxPaxos实现原理介绍 : 点击打开链接 ============ 下面是我看源码时写的几篇博文 ====
看过了phxpaxos的实现,发现选主逻辑中非主也能够调用Propose。 因此即使开启了选主功能,也可能会出现两个人同时Propose的场景。 而Propose时,InstanceID只是作为输出而非输入。因此也无法保证CAS操作的一致性。 目前想到的一种解决方案: 修改Propose的内部实现,开启选主功能后,在确定实例的InstanceID时判断一下自己是不是主。非主时直接返回失败。(选主的
官网:Tencent/phxpaxos: The Paxos library implemented in C++ that has been used in the WeChat production environment. 操作如下: git clone --recursive https://github.com/tencent-wechat/phxpaxos.git cd phxpaxo
本文向大家介绍java 深拷贝与浅拷贝机制详解,包括了java 深拷贝与浅拷贝机制详解的使用技巧和注意事项,需要的朋友参考一下 java 深拷贝与浅拷贝机制详解 概要: 在Java中,拷贝分为深拷贝和浅拷贝两种。java在公共超类Object中实现了一种叫做clone的方法,这种方法clone出来的新对象为浅拷贝,而通过自己定义的clone方法为深拷贝。 (一)Object中clone方法 如果
本文向大家介绍浅谈Python浅拷贝、深拷贝及引用机制,包括了浅谈Python浅拷贝、深拷贝及引用机制的使用技巧和注意事项,需要的朋友参考一下 这礼拜碰到一些问题,然后意识到基础知识一段时间没巩固的话,还是有遗忘的部分,还是需要温习,这里做份笔记,记录一下 前续 先简单描述下碰到的题目,要求是写出2个print的结果 可以看到,a指向了一个列表list对象,在Python中,这样的赋值语句,其实内
主要内容:到底是浅拷贝还是深拷贝对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: b 和 obj2 都是以拷贝的方式初始化的,具体来说,就是将 a 和 obj1 所在内存中的数据按照二进制位(Bit)复制到 b 和 obj2 所在的内存, 这种默认的拷贝行为就是 浅拷贝 ,这和调用 memcpy() 函数的效果非常类似。 对于简单的类,默认的拷贝构造函数一般就够用了,我们也没有必要再显式地定义一
浅拷贝 对于对象或数组类型,当我们将a赋值给b,然后更改b中的属性,a也会随着变化。 也就是说,a和b指向了同一块堆内存,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝。 深拷贝 那么相应的,如果给b放到新的内存中,将a的各个属性都复制到新内存里,就是深拷贝。 也就是说,当b中的属性有变化的时候,a内的属性不会发生变化。 参考链接: 深拷贝与浅拷贝的实现(一) javaScript中浅拷
一、引言 对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部数据。Java中有三种类型的对象拷贝:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)、延迟拷贝(Lazy Copy)。 二、浅拷贝 1、什么是浅拷贝 浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。 注解 类似的工具有rsync;scp消耗资源少,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。rsync比scp会快一点,但当小
我们有一个PDF链接,可以通过chrome内置的PDF查看器在浏览器中打开。我们正在尝试验证此PDF中的文本,无需使用PDFBox或将文件下载到本地系统。 我们的尝试使用将“CTRL A”和“CTRL C”(大写和小写版本)发送到浏览器。(这会导致一个大的蓝色框选择,而不是我们在尝试手动复制粘贴时看到的行选择)。我们认为两个命令之间有足够的2秒延迟,但文本内容不会显示在系统剪贴板中(通过粘贴到记事
本文向大家介绍javascript深拷贝和浅拷贝详解,包括了javascript深拷贝和浅拷贝详解的使用技巧和注意事项,需要的朋友参考一下 一、数组的深浅拷贝 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生。 这是为什么呢? 因为如果只是简单的赋值,它只