概念
1、什么是集群
集群:同一個業務,部署在多個服務器上(不同的服務器運行同樣的代碼,干同一件事)
集群是指將多台服務器集中在一起,每台服務器都實現相同的業務,做相同的事情。如果一台死機,另一台可以起作用。
但是每台服務器並不是缺一不可,存在的作用主要是緩解並發壓力和單點故障轉移問題。我們可以利用一些廉價的符合工業標准的硬件構造高擴展、高性能、低成本、高可用的系統。
2、什么是分布式
分布式:一個業務分拆多個子業務,部署在不同的服務器上(不同的服務器,運行不同的代碼,為了同一個目。而集群指的是將幾台服務器集中在一起,實現同一業務。
好處: 模塊之間獨立,各做各的事,便於擴展,復用性高 高吞吐量
簡單說,分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率。
例如:如果一個任務由 10 個子任務組成,每個子任務單獨執行需 1 小時,則在一台服務器上執行該任務需 10 小時。
- 采用分布式方案,提供 10 台服務器,每台服務器只負責處理一個子任務,不考慮子任務間的依賴關系,執行完這個任務只需一個小時。(這種工作模式的一個典型代表就是 Hadoop 的 Map/Reduce 分布式計算模型)
- 采用集群方案,同樣提供 10 台服務器,每台服務器都能獨立處理這個任務。假設有 10 個任務同時到達,10 個服務器將同時工作,1 小時后,10 個任務同時完成。這樣整體來看,還是 1 小時內完成一個任務。
注:分布式需要做好事務管理。
一個服務可能負責幾個功能,是一種面向 SOA 的架構。各分開部署的部分彼此通過各種通訊協議交互信息,並且每台服務器都缺一不可,如果某台服務器故障,則部分功能缺失,或導致整體無法運行。
所以:好的設計應該是分布式和集群相結合,先分布式再集群。具體實現就是業務拆分成很多子業務,然后針對每個子業務進行集群部署。這樣每個子業務如果出了問題,整個系統完全不會受影響。
3、什么是微服務
微服務的概念和分布式比較相似,微服務是一種架構風格。簡單來說微服務就是很小的服務,小到一個服務只對應一個單一的功能。每個微服務僅關注於完成一件任務並很好地完成該任務,這個服務可以單獨部署運行。 各個微服務之間是松耦合的,服務之間可以通過 RPC 來相互交互。每個微服務都是由獨立的小團隊開發、測試、部署,上線,負責它的整個生命周期。
在做架構設計時,當你估算過最大用戶量和並發量后,計算出單個應用服務器能否滿足需求。如果用戶量只有幾百人的小應用,單體應用就能搞定,即所有應用部署在一個應用服務器里。如果是很大用戶量,且某些功能會被頻繁訪問,或者某些功能計算量很大,建議將應用拆解為多個子系統,各自負責各自功能,這就是微服務架構。
微服務的設計是為了不因為某個模塊的升級和 BUG 影響現有的整個系統業務。微服務與分布式的細微差別是,微服務的應用不一定是分散在多個服務器上,它也可以是同一個服務器。
微服務相比分布式服務來說,它的粒度更小,服務之間耦合度更低。由於每個微服務都由獨立的小團隊負責,因此它敏捷性更高。分布式服務最后都會向微服務架構演化,這是一種趨勢。不過服務微服務化后帶來的挑戰也是顯而易見的,例如服務粒度小,數量大,后期運維難度會增大。
集群、分布式、微服務的異同及聯系
1.分布式與微服務的關系
分布式和微服務的架構很相似,只是部署的方式不一樣而已。
生產環境下的微服務肯定是分布式部署的,分布式部署的應用不一定是微服務架構的。比如集群部署,它是把相同應用復制到不同服務器上,但是邏輯功能上還是單體應用。
2.集群模式是不同服務器部署同一套服務對外訪問,實現服務的負載均衡。區別集群的方式是根據部署多台服務器業務是否相同,分布式中的每一個節點,都可以做集群。而集群並不一定就是分布式的。
舉例:就比如新浪網訪問的人多了,他可以做一個群集。前面放一個響應服務器,后面幾台服務器完成同一業務。如果有業務訪問的時候,響應服務器看哪台服務器的負載不是很重,就將任務調度給哪一台去完成。
而分布式,從窄意上理解也跟集群差不多。但是它的組織比較松散,不像集群有一個組織性,一台服務器垮了,其它的服務器可以頂上來。分布式的每一個節點都完成不同的業務,一個節點垮了那這個業務就不可訪問了。
注:集群模式需要做好 Session 共享,確保在不同服務器切換的過程中不會因為沒有獲取到 Session 而引起服務終止。
3.在開發中我們可以將分布式和集群分開嗎?
針對這個問題,我們可以根據分布式的介紹看出,其主要的功能是用來將我們的系統模塊化,將系統進行解耦的,方便我們以后的維護和開發的。但是其並不能解決我們的並發問題,也無法保證我們的系統在服務器宕機后的正常運轉。
而集群恰好彌補了分布式的缺陷,集群就是多個服務器處理相同的業務。這在一方面可以解決或者說改善我們系統的並發問題,一方面可以解決我們服務器如果出現一定數量的宕機后,系統仍然可以正常運轉。
好的設計應該是分布式和集群相結合,先分布式再集群。具體實現就是業務拆分成很多子業務,然后針對每個子業務進行集群部署。這樣每個子業務如果出了問題,整個系統完全不會受影響。