分布式和集群區別?什麽是雲計算平臺?分布式的應用場景?
分布式和集群區別?
分布式
分布式:是指將一個業務拆分不同的子業務,分布在不同的機器上執行。
常用的分布式就是在負載均衡服務器後加一堆web服務器,然後在上面搞一個緩存服務器來保存臨時狀態,後面共享一個數據庫,
如圖所示:
這種環境下真正進行分布式的只是web server而已,並且web server之間沒有任何聯系,所以結構和實現都非常簡單。
集群
集群:是指多臺服務器集中在一起,實現同一業務,可以視為一臺計算機。
多臺服務器組成的一組計算機,作為一個整體存在,向用戶提供一組網絡資源,這些單個的服務器就是集群的節點。
兩個特點
可擴展性:集群中的服務節點,可以動態的添加機器,從而增加集群的處理能力。
高可用性:如果集群某個節點發生故障,這臺節點上面運行的服務,可以被其他服務節點接管,從而增強集群的高可用性。
集群分類
常用的集群分類
1.高可用集群(High Availability Cluster)
高可用集群,普通兩節點雙機熱備,多節點HA集群。
2.負載均衡集群(Load Balance Cluster)
常用的有 Nginx 把請求分發給後端的不同web服務器,還有就是數據庫集群,負載均衡就是,為了保證服務器的高可用,高並發。
3.科學計算集群(High Performance Computing Cluster)
簡稱HPC集群。這類集群致力於提供單個計算機所不能提供的強大的計算能力。
兩大能力
負載均衡:負載均衡能把任務比較均衡地分布到集群環境下的計算和網絡資源。
集群容錯:當我們的系統中用到集群環境,因為各種原因在集群調用失敗時,集群容錯起到關鍵性的作用。
例如 Dubbo 的集群容錯:
Failover Cluster
失敗自動切換,當出現失敗,重試其它服務器,通常用於讀操作,但重試會帶來更長延遲。
Failfast Cluster
快速失敗,只發起一次調用,失敗立即報錯,通常用於非冪等性的寫操作,比如新增記錄。
Failback Cluster
失敗自動恢復,後臺記錄失敗請求,定時重發,通常用於消息通知操作。
Forking Cluster
並行調用多個服務器,只要一個成功即返回,通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。
簡單總結
分布式,從狹義上理解,也與集群差不多,但是它的組織比較松散,不像集群,有一定組織性,一臺服務器宕了,其他的服務器可以頂上來。
分布式的每一個節點,都完成不同的業務,一個節點宕了,這個業務就不可訪問了。
1. 分布式是指將一個業務拆分不同的子業務,分布在不同的機器上執行。
2. 集群是指多臺服務器集中在一起,實現同一業務,可以視為一臺計算機。
分布式的每一個節點,都可以用來做集群。而集群不一定就是分布式了。
什麽是雲計算平臺?
一個雲計算平臺,就是通過一套軟件系統把分布式部署的資源集中調度使用。要應對大並發,要實現高可用,既需要分布式,也離不開集群。
比如負載均衡,如果只是一臺服務器,這臺宕機了就完蛋了。
分布式的難點,就是很多機器做存在依賴關系的不同活兒,這些活兒需要的資源、時間區別可能很大,某些機器還可能罷工,要怎麽樣才能協調好,做到效率最高,消耗最少,不出錯。
分布式的應用場景?
平時接觸到的分布式系統有很多種,比如分布式文件系統,分布式數據庫,分布式WebService,分布式計算等等,面向的情景不同,但分布式的思路是否是一樣的呢?
1.簡單的例子
假設我們有一臺服務器,它可以承擔1百萬/秒的請求,這個請求可以的是通過http訪問網頁,通過tcp下載文件,jdbc執行sql,RPC調用接口…,現在我們有一條數據的請求是2百萬/秒,很顯然服務器hold不住了,會各種拒絕訪問,甚至崩潰,宕機,怎麽辦呢。
一臺機器解決不了的問題,那就兩臺。所以我們加一臺機器,每臺承擔1百萬。如果請求繼續增加呢,兩臺解決不了的問題,那就三臺唄。
這種方式我們稱之為水平擴展。如何實現請求的平均分配便是負載均衡了。
另一個栗子,我們現在有兩個數據請求,數據1 90萬,數據2 80萬,上面那臺機器也hold不住,我們加一臺機器來負載均衡一下,每臺機器處理45萬數據1和40萬數據2,但是平分太麻煩,不如一臺處理數據1,一臺處理數據2,同樣能解決問題,這種方式我們稱之為垂直拆分。
水平擴展和垂直拆分是分布式架構的兩種思路,但並不是一個二選一的問題,更多的是兼並合用。下面介紹一個實際的場景。這也是許多互聯網的公司架構思路。
2.實際的例子
我此時所在的公司的計算機系統很龐大,自然是一個整的分布式系統,為了方便組織管理,公司將整個技術部按業務和平臺拆分為部門,訂單的,會員的,商家的等等,每個部門有自己的web服務器集群,數據庫服務器集群,通過同一個網站訪問的鏈接可能來自於不同的服務器和數據庫,對網站及底層對數據庫的訪問被分配到了不同的服務器集群,這個便是典型的按業務做的垂直拆分,每個部門的服務器在hold不住時,會有彈性的擴展,這便是水平擴展。
在數據庫層,有些表非常大,數據量在億級,如果只是純粹的水平的擴展並不一定最好,如果對表進行拆分,比如可以按用戶id進行水平拆表,通過對id取模的方式,將用戶劃分到多張表中,同時這些表也可以處在不同的服務器。按業務的垂直拆庫和按用戶水平拆表是分布式數據庫中通用的解決方案。
比如 Mycat 開源分布式數據庫中間件 http://www.mycat.io/
3.分布式一致性
分布式系統中,解決了負載均衡的問題後,另外一個問題就是數據的一致性了,這個就需要通過同步來保障。根據不同的場景和需求,同步的方式也是有選擇的。
在分布式文件系統中,比如商品頁面的圖片,如果進行了修改,同步要求並不高,就算有數秒甚至數分鐘的延遲都是可以接受的,因為一般不會產生損失性的影響,因此可以簡單的通過文件修改的時間戳,隔一定時間掃描同步一次,可以犧牲一致性來提高效率。
但銀行中的分布式數據庫就不一樣了,一丁點不同步就是無法接受的,甚至可以通過加鎖等犧牲性能的方式來保障完全的一致。
在一致性算法中paxos算法是公認的最好的算法,Chubby、ZooKeeper 中Paxos是它保證一致性的核心。這個算法比較難懂,我目前也沒弄懂,這裏就不深入了。
Contact
- 作者:鵬磊
- 出處:http://www.ymq.io/2018/01/23/Distributed-cluster/
- Email:[email protected]
- 版權歸作者所有,轉載請註明出處
- Wechat:關註公眾號,搜雲庫,專註於開發技術的研究與知識分享
分布式和集群區別?什麽是雲計算平臺?分布式的應用場景?