分布式系統理解
2018/02/01 發布
分布式系統以其紛繁復雜的概念,涉及到諸多技術、理論與協議,形成一個龐大的知識體系,困擾著各位初學者。如何窺斑見豹,從這些繁雜的信息中整理出脈絡,是理解和學習分布式系統思想的關鍵。
在此按照理解復雜問題的抽象思考法則,剖析一下我對分布式系統的理解。
一、抽象剃刀思想
按照奧卡姆剃刀哲學,理解問題的方式,是需要用思維的剃刀,剖去所有與本質無關的信息,方能了解一件事物的本質。那麽,如何辨別哪些是無關事物脈絡信息呢?
關鍵在於看待事物的角度,從不同的角度,可以得到不一樣的信息。但是之於信息量十分龐大的體系,換角度看無非等於萬華鏡般,無法觸及根本思想。所以,我們需要的是抽象。
抽象,其實是站在更高維度的角度,看待問題。我們解決數學問題的基本思想,就是使用高維解法,解決低維運算量龐大的問題,抽象可以將事物立體化,在更高維度能把復雜的低維問題,信息量縮小一個維度,可以非常清晰地簡化和把握事物本質。
所謂抽象剃刀,便是先對復雜問題抽象到更高層次進行觀察理解,便可以更加接近事物的本質。
二、抽象理解分布式系統思想
分布式系統思想,涉及的非常多技術、理論,乍一看難以通過部分學習來理解全貌。但是我們抽象地理解,從全息地角度去思考分布式系統的意義。
分布式系統,本質上是為了解決擴展單個資源能力有限的困境,采用集群,擴展系統能力。
而集群,並不是簡單的拼接資源就可以。分布式思想重點就在於,如何組織集群。
組織集群的目標在於使集群各部分真正的成為一個整體。真正成為整體有三個要素:
1.互通有無(信息交互、註冊中心)
2.協調一致(分布式鎖、分布式事務)
3.統一調度(實現分布式鎖的註冊中心)
這三個方面,就包含了分布式思想要解決的所有方面。
其一,互通有無。即各集群之間的通訊問題,這就涉及到使用消息中間件MQ(消息隊列Message Queue)技術,消息中間件作為各部分的消息通道,保證了集群各部分信息交互,為形成整體以及之後的一致性提供保障。常見的消息隊列技術有ActiveMQ、RabbitMQ、kafka等。
或者dubbo框架一樣設置統一的rpc註冊中心,通過生產者註冊服務(register service),消費者訂閱服務(subscribe service),來進行微服務集群各部分間交流。
其二、協調一致。指的是解決集群各部分,同時使用共享資源(shared resource)發生的多線程並發問題。即保證集群之間使用共享資源的行為具有事務的基本特性(原子性、一致性、隔離性及持久性),實現方式就是分布式鎖和分布式事務
分布式鎖主要有:基於數據庫實現分布式鎖;基於緩存(redis,memcached,tair)實現分布式鎖;基於zookeeper實現分布式鎖。
分布式事務主要實現方式是TCC事務(trying、confirm、cancel),或者使用消息隊列技術避免分布式事務事務。
其三、統一調度。即使用集群的時候,如何調度集群各部分,進行任務分配。這就需要實現分布式鎖的註冊中心,進行服務的subscribe以及register,現在流行的分布式鎖實現有zookeeper。阿裏開源的分布式框架dubbo就是使用zookeeper實現的註冊中心。
這樣,就能大致理解各項技術,在分布式系統中所處地位。
分布式系統理解