1. 程式人生 > >CAP碎碎念

CAP碎碎念

cluster 請求響應 watermark ear mar 部署 doc 性能 生成報表

整個2017年都在搞大數據平臺,完全遠離了機器學習,甚至都不記得寫過類似ETL的job。

從數據到平臺,從業務處理到基礎服務。

Metrics的收集,報警,生成報表。Data pipeline的準確性,性能。Job的提交,資源分配。分布式組件的部署,運維。

同時也參與了一個portal的開發,管理分布在全球各地的clusters。

大數據的服務:存儲,計算,傳輸,search等等基本都是分布式的,每種服務的組件都有很多,不管是商業的還是開源的,都是圍繞著C(Consistency)A(Availability)P(Partition-Consistency)理論CA,CP,AP各有所長。

具體的實現上,可以說是五花八門,不過本質思想也基本類似,比如為了實現C(Consistency), 爭取保證每個node上每步的操作都一致:要麽都做,要麽都不做。為了達到這個目的以及conver各種極端情況(比如,接收方在接收之後commit之前down了)有2階段提交,3階段提交,Paxos等算法的實現。

雖然各種服務的各種組件處理的業務和實現的方法不同,但大都包括分partition,選master, 副本備份,服務發現,請求響應等幾個功能。

partition是承載數據大體量的保證,從而實現分而治之。hdfs的block, hbase的region,elasticsearch的shard,kafka幹脆就叫partition,清晰明了。

分了partition就要加強管理,所以基本上分布式系統中都有master role,存儲meta data, 處理一些環境相關的問題。有了master role,那就得投票選出來誰是master。從而引出了選master的問題,比如腦裂。畢竟選master的過程也是會有極端情況的。為了防治選master的過程,又引出了定義什麽時候可選,誰有資格投選票,即A(Availability)。當然也有不選master的所謂的去中心化的組件,比如cassandra, 不過沒有中心之後,每個node都可以做同樣的事情,是不是也可以稱為個個都是中心?畢竟gossip協議讓每個node都拿到同樣的配置信息。

為了HA,必須做備份,因為又是分布式的,所以天然支持在多臺node上備多份。有了多個備份之後,就會涉及到主-備問題,所以又會分leader partition(prime shard)與replic partition,引出主被之間的數據同步問題即P(Partition-Consistency)。比如kafka的Highwatermark, 必須保證所有ISR節點都復制了的備份文件,才能被consumer消費到。ES的doc在沒有被replic shard復制的時候,卻依舊可以被search到。

CAP碎碎念