码迷,mamicode.com
首页 > 其他好文 > 详细

paxos的另类解释

时间:2015-11-19 12:54:21      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

文章和知识就是用来传播的,我写的文章您可以随便转,随便改,也不用加署名什么的。

什么是paxos协议?嗯,这个最好去百度一下。

为什么其他的文章把paxos协议解释的那么复杂,让人看不懂?嗯,没事,慢慢看,多看看,多琢磨琢磨就懂了。

如果你觉得对paxos有了一点点的了解,但又有点云里雾里的感觉怎么办,嗯,那么就往下看吧,估计会对你有点帮助

 

需要用到的数学知识:

鞋盒原理,也有人说鸽子原理,其实都是一回事,举个例子:有5个鸽子和10个盒子,每个盒子只能放一个鸽子,那么每次至少打开几个盒子,才能看到鸽子?

别用什么概率去解释,这个跟概率的关系不大,估计你也猜出来了,答案是6个,运气最差,能看到1个鸽子,运气最好,能看到6个鸽子。就是这么简单

 

也许你在看其他文章的时候被那些概念给搞晕了,那么没事,我下面会举个例子:

 

比如说有个分布式的KV系统(key-value),为了保证某个节点出故障的时候,这个系统还能运行,所以咱们就要想办法去解决这个问题:

有人说了,所有的节点数据都一致,先访问A,如果A出问题了就方问B,然后以此类推。是的,这是对的,但还不够。

如果A之前出了问题,少更新了一个数据,然后又马上好了,这个时候再来访问A,那么读出来的就是脏数据,是不准确的。

有人说了,我用集群,用镜像,都能解决这个问题,是的,没错,但咱不是为了提高自己的水平多学点东西么,所以,先不讨论集群和镜像,还有负载均衡。

这个时候需要用到某种算法来解决,比如paxos。

 

一个KV系统,就是insert, update, get, delete,至于其他的特性咱们先不讨论,这里只是为了引出paxos。

!!!每次操作,无论什么操作,都要有个操作编号,这个编号怎么实现,那就看自己的代码了!!!

insert:比如说有11个节点,根据鞋盒原理,只要插入6个节点就行了

update:也只是操作6个节点,如果本身节点有value,那么就更新,没有,就插入(你肯定会有疑问,别急,往下看)

get:这个是个有问题的地方,比如insert了一个数据data1到节点 0-5,然后又update了data1到任意6个节点,这个时候再来get的时候,会发生

       一种情况,那就是相同的key,有不同的value,那么这个时候就要看这个数据的编号了,谁的编号最新,就用谁的。

delete: 别delete了,直接过期就行了,设置个标志,代表这个数据是已经delete了,用守护进程去删掉就行了

 

好了,就是这些了,不欢迎评论,就算你评论了我也不一定会看,除非是你指出了我的错误。

下列问题是极度不欢迎的:

1. 条件查询怎么办?(我是在举例子来简单的引出paxos算法)

2. 你写的是个屁啊,我看不懂(没办法,我已经用最简单的办法来解释了)

3. 你这个KV系统太粗糙了,和redis,mongodb之类的差远了(我是在举例子来简单的引出paxos算法)

 

极度欢迎的:

1. 分布式算法的交流

2. 指出我的错误

3. 如果你是搞erlang和golang的,但是没看懂,来吧,给我发邮件,我一定给你解释清楚

paxos的另类解释

标签:

原文地址:http://www.cnblogs.com/alexander0729/p/4977098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!