paxos的一些资料
http://blog.chinaunix.net/u3/94300/showart_1962723.html
场景假定(不知道是否合理)
3台客户端,他们的command如下:
1. change file 'a' to be 'b'
2. change file 'a' to be 'c'
3. change file 'c' to be 'e'
5 台服务器,以防止服务器宕机
那么使用paxos算法,这五台服务器是如何执行上面的一系列请求的,从而最终达到一致?
我最不明白的几个问题:
1. 算法中有number and value, 假设有一个service是专门提供unique的序列号的,那么是服务器收到客户端请求的时候申
请序列号,还是客户端自己在发送请求的时候申请这个号码? value是不是就是客户端的命令?
2. 一致 是否意味 正确? 假设,client 1的请求发到了server1,client 2的请求发送到了server 3,那么文件
文件’a‘最后的名字可能不是’c‘,而是‘b’?也就是一致性得到了维护,但是却不正确了(按照时间顺序,a的名字应该是c),这个问题是否应该依赖
于具体实现的语义?
3. paxos made simple上面举了个例子,说命令序列1-135会得到执行,我就很纳闷,为什么不是收到请求然后取得一致就执行呢?难
道服务器定时执行请求?那岂不是每个请求都会过一段时间才能得到应答?
谢谢高手解释一下。
那么就可以理解成序列号是在服务器接收到请求后产生的,但是"个服务器有自己的一个unique的产生器"这句话好像不对,如果每个服务器都有自己的
> 1.序列号是服务器间通信时产生的(最可能的情况,一个服务器有自己的一个unique的产生器)。
unique 产生器,那么产生的unique数字就没有可比性了,所以,我想应该是服务器集群共享一个产生器。
http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
页面中有详细的介绍,他提供的源代码中,有一些地方还需要根据个人的需求进行更改。
代码还是比较简洁的。大家也可以参考一下。
关于这个算法,我的测试结果是: 当设平均每个服务器占有 200个点时,对于资源的分配基本符合权重比例。当进行删除或者添加操作时,
也是基本根据服务器的权重来重新分配资源。算法中一点小缺陷,是当进行添加或者删除操作时,小部分资源会在现有服务器间跳转,可以自己动手更改算法。
缺点是:实例代码中hash函数使用的是md5, hash如果大家对于效率要求比较高的话,可以参考使用fnv32或者crc32算法。fnv32算
法测试后发现
确实在小数据量(我们的资源是一个20字节长度的任务id号)的情况下比md5快很多。
至于paxos 我还在看看,看完再发表评论
On 6月12日, 下午3时51分, raymond <shiqu...@gmail.com> wrote:
> PAXOS 声称解决一致性问题,我也看了几篇文章,大概明白了该算法的一些步骤,但是关于具体的细节心里却没有一点底。
> 哪位能具体说说
>
> paxos的一些资料http://blog.chinaunix.net/u3/94300/showart_1962723.html