人们说哲学是门装逼的科学,我也是一个很能装的人,而且今天肯定能装的清新脱俗。
一、Unix哲学
Unix的人生哲学:短小即是美。我梦想能活在Unix的世界中,就像许多女生想回到唐朝一样。
Kafka、Storm、Spark、Hadoop、Redis等这些程序都专注自己的事,没有把上上下下的活都自己干。每个程序都专注于自己擅长的事,并且都擅长与其他成员合作。所以他们都那么小、那么瘦、还那么美。
二、传说
程序员的江湖中流传着这样一个传说:编程中的多数问题,都可以通过增加一层间接性来解决; 这也就是程序的劳动分工,软件的功能越复杂,程序的功能划分就会越清晰。
例:操作系统、虚拟机、代理 CISC AISC Reduced Instruction Set Computer
程序员的江湖中还流传着这样另一个传说:软件运行中的性能问题,多数情况下可以通过减少一层间接性来解决。
例:C++ 相对 Java, IOS相对Android
所有的分布式都是在单机计算基础上增加一层或多层间接性。
三、分布式
分布式:花最少的钱,干最多的活,出问题了还不担责任。
比如我是一个老实巴交的北方农民,没钱买三头强壮的牛的去拉犁耕田。但我一千鸡,怎样用这一千鸡,把三头牛的能干活给做了。这样做还有一个额外的好处:一千鸡死个十个八个,活还照干,牛要是病例一、二头,肯定歇菜。
如何让一千鸡协同去拉犁,这光是耐性的考验,更是管理、协调能力的考验,这正是分布式技术要做的事情。
分布式是一个群体作战的技术,以量取胜,很适合咱们的国情。
四、数据一致性
本地程序有两种状态:成功、失败。
分布式的三态:成功、失败、超时;
因此分布式最核发的问题之一:数据一致性。常用数据同步算法有三种:2段提交、3段提交和Paxos。
4.1 2PC
Two-phase commit。问题:阻塞、数据不一致问题、单点问题。
阶段一:提交事务请求(投票阶段)
阶段二:执行事务提交(执行阶段)
4.2 3PC
问题:解决2PC的阻塞,但还是可能造成数据不一致。
Three-Phase Commit,三阶段提交,分为CanCommit、PreCommit、do Commit三个阶段。
4.3 Paxos
优点:解决单点问题
基于消息传递且具有高度容错性的一致性算法。Paxos算法要解决的问题就是如何在可能发生几起宕机或网络异常的分布式系统中,快速且正确地在集群内部对某个数据的值达成一致,并且保证不论发生以上任何异常,都不会破坏整个系统的一致性。
这么好的算法,我没看懂。