分布式系统的提出的最重要目的是:
1.大家希望能拥有更多的cpu,内存,硬盘,并行程序
2.更高的容错率
3.物理限制
mapreduce——个人认为是一种计算模型,分为map和reduce两个步骤(更严谨地说分为Input, Split, Map, Shuffle, Reduce, Finalize六个步骤),map步骤主要是将数据分到不同的机器上,让这些机器执行事先定义好的map函数,从而输出k-v键值对,作为reduce的输入。reduce函数再对不同机器上执行得到的键值对汇总并得到我们想要的结果。
gfs——可直接看gfs论文原文或者中文版:https://wenku.baidu.com/view/a1493d9c3086bceb19e8b8f67c1cfad6195fe986.html
primary-backup republication——为了容错要进行主从备份,主从备份主要有两种方式:
1.状态转移(state transfer)——将各种数据、执行状态从主服务器复制到从服务器。
2.冗余状态机(Replicated state machine)——为了实现强一致,只需要保存主服务器到达目前状态所执行的操作,以及给出相同的输入数据,就可以进行主从同步。
主从备份做好后,一旦主服务器出事了,就可以进行主从切换,这样便具有了容错性。
Raft——上面提到的replicated state machine通过集群方式,为客户提供强一致、高可靠的数据服务;所谓强一致,从用户角度看是指永远可以读到最新的写成功的数据,而从服务内部来看指的是所有的state machine中的数据都保持一致;所谓高可靠,是指即使出现网络延迟、丢包、乱序、服务器宕机等情况下,依然可以保证数据的强一致。对于 replicated state machine 来说,会按序读取本地的日志,根据日志中记录的操作来更新状态,而日志的一致性是由一致性模块来保证的,而如何保证各个机器上日志的一致性?这就是raft要解决的核心问题。
关于raft论文的两份中文翻译:
https://www.cnblogs.com/linbingdong/p/6442673.html
https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md