課件的引子
人們說哲學是門裝逼的科學,我也是一個很能裝的人,而且今天肯定能裝的清新脫俗。
一、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算法要解決的問題就是如何在可能發生幾起宕機或網絡異常的分布式系統中,快速且正確地在集群內部對某個數據的值達成一致,並且保證不論發生以上任何異常,都不會破壞整個系統的一致性。
這麽好的算法,我沒看懂。
課件的引子