首页 > 代码库 > libpaxos分析心得
libpaxos分析心得
前一段时间在《大型分布式存储与实践》中作者提http://到一个观点:弄清楚PAXOS协议会大大增强你对分布式系统理解的信心。后来陆陆续续看过网络上的一些PAXOS的介绍,包括PAXOS的历史、PAXOS的第一版论文(The Part-Time Parlinment)、第二版论文( Paxos Made Simple)以及chubby的论文。都没太搞懂里面的细节,后来结合wiki上对paxos算法的描述,算是基本上弄懂了其原委。个人感觉wiki上面的描述是最清晰易懂的,也是最好的入门文档。后来在一篇文章中有人提到libpaxos这个库,用C实现的,为了进一步弄懂算法的每一个细节,于是开始对libpaxos做细致的阅读并对代码做了详细的注释。注释的代码我已经放到git hub上,要下载点这里。
虽然libpaxos对PAXOS算法做了基础的实现,但这个库本身不能直接用于生产环境,这个库的proposer和learner并没有对议案做固化保存,一旦某个物理机异常,就会丢失相关的议案信息,acceptor实现采用了Berkeley DB来固化接受的提案,算是比较稳定的。这个库在内存分配和效率上做的一般,如果大规模的消息,很容易产生内存碎片。库采用的是libevent单线程reactor模型,无法利用充分利用多CPU的优势,并发上会是个问题。另外,libpaxos并没有实现PAXOS的leader模式。
从上可以看出,libpaxos的主要价值是可以用来做研究,可以让程序员对PAXOS的细节了解更加清楚,也可以根据其算法模型实现一个可以用于生产环境的paxos库,但这必须要做几个工作:
1.各个单元的状态信息固化,防止宕机发生信息丢失
2.增加leader模型
3.改为多线程实现并合并learner、proposer、acceptor为一个进程。
4..对库做充分细致的测试
libpaxos分析心得