什麼是集群
集群是指將多臺伺服器集中在一起,每臺伺服器都實現相同的業務,做相同的事情。但是每臺伺服器並不是缺一不可,存在的作用主要是緩解並發壓力和單點故障轉移問題。我們可以利用一些廉價的符合工業標準的硬體構造高擴展、高性能、低成本、高可用的系統。
集群主要具有以下特性:
在一些大的系統中,預測最終用戶的數量和行為是非常困難的,伸縮性是指系統適應不斷增長的用戶數的能力。提高這種並發會話能力的一種最直觀的方式就是增加資源(CPU,內存,硬碟等),集群是解決這個問題的另一種方式,它允許一組伺服器組在一起,像單個伺服器一樣分擔處理一個繁重的任務,我們只需要將新的伺服器加入集群中即可,對於客戶來看,服務無論從連續性還是性能上都幾乎沒有變化,好像系統在不知不覺中完成了升級。
單一伺服器的解決方案並不是一個健壯方式,因為容易出現單點失效。像銀行、帳單處理這樣一些關鍵的應用程式是不能容忍的,哪怕是幾分鐘的死機。它們需要這樣一些服務在任何時間都可以訪問並在可預期的合理時間周期內有響應。高可用性集群的出現就是為了使集群的整體服務儘可能可用,以便考慮計算硬體和軟體的易錯性。如果高可用性集群中的主節點發生了故障,那麼這段時間內將由次節點代替它。次節點通常是主節點的鏡像,所以當它代替主節點時,它可以完全接管其身份。因此系統環境對於用戶是一致的。
負載均衡集群為企業需求提供了更實用的系統。如名稱所暗示的,該系統使負載可以在計算機集群中儘可能平均地分攤處理。該負載可能是需要均衡的應用程式處理負載或網絡流量負載。這樣的系統非常適合於運行同一組應用程式的大量用戶。每個節點都可以處理一部分負載,並且可以在節點之間動態分配負載,以實現平衡。
通常,這種設計的集群是用來開發並行編程應用程式,以解決複雜的科學問題。並行計算(或稱平行計算)是相對於串行計算來說的,並行計算能力的目的是用來提高計算速度。它實際是一個計算機集群,其處理能力與真的超級計算機相等。
什麼是分布式
分布式服務是指將多臺伺服器集中在一起,服務是分散部署在不同的機器上的。每臺伺服器都實現總體中的不同業務,做不同的事情。一個服務可能負責幾個功能,是一種面向 SOA 的架構。各分開部署的部分彼此通過各種通訊協議交互信息,並且每臺伺服器都缺一不可,如果某臺伺服器故障,則部分功能缺失,或導致整體無法運行。
分布式存在的主要作用是大幅度的提高效率,緩解伺服器的訪問和存儲壓力。區別分布式的方式是一個業務分拆多個子業務,部署在不同的伺服器上。
例如:將一個大的系統劃分為多個業務模塊,業務模塊分別部署到不同的機器上,各個業務模塊之間通過接口進行數據交互。
什麼是微服務
微服務的概念和分布式比較相似,微服務是一種架構風格。簡單來說微服務就是很小的服務,小到一個服務只對應一個單一的功能。每個微服務僅關注於完成一件任務並很好地完成該任務,這個服務可以單獨部署運行。 各個微服務之間是鬆耦合的,服務之間可以通過 RPC 來相互交互。每個微服務都是由獨立的小團隊開發、測試、部署,上線,負責它的整個生命周期。
在做架構設計時,當你估算過最大用戶量和並發量後,計算出單個應用伺服器能否滿足需求。如果用戶量只有幾百人的小應用,單體應用就能搞定,即所有應用部署在一個應用伺服器裡。如果是很大用戶量,且某些功能會被頻繁訪問,或者某些功能計算量很大,建議將應用拆解為多個子系統,各自負責各自功能,這就是微服務架構。
微服務的設計是為了不因為某個模塊的升級和 BUG 影響現有的整個系統業務。微服務與分布式的細微差別是,微服務的應用不一定是分散在多個伺服器上,它也可以是同一個伺服器。
微服務相比分布式服務來說,它的粒度更小,服務之間耦合度更低。由於每個微服務都由獨立的小團隊負責,因此它敏捷性更高。分布式服務最後都會向微服務架構演化,這是一種趨勢。不過服務微服務化後帶來的挑戰也是顯而易見的,例如服務粒度小,數量大,後期運維難度會增大。
集群、分布式、微服務的異同及聯繫
1. 分布式是以縮短單個任務的執行時間來提升效率的,而集群則是通過提高單位時間內執行的任務數來提升效率。
例如:如果一個任務由 10 個子任務組成,每個子任務單獨執行需 1 小時,則在一臺伺服器上執行該任務需 10 小時。
註:分布式需要做好事務管理。
2. 集群模式是不同伺服器部署同一套服務對外訪問,實現服務的負載均衡。區別集群的方式是根據部署多臺伺服器業務是否相同,分布式中的每一個節點,都可以做集群。而集群並不一定就是分布式的。
舉例:就比如新浪網訪問的人多了,他可以做一個群集。前面放一個響應伺服器,後面幾臺伺服器完成同一業務。如果有業務訪問的時候,響應伺服器看哪臺伺服器的負載不是很重,就將任務調度給哪一臺去完成。
而分布式,從窄意上理解也跟集群差不多。但是它的組織比較鬆散,不像集群有一個組織性,一臺伺服器垮了,其它的伺服器可以頂上來。分布式的每一個節點都完成不同的業務,一個節點垮了那這個業務就不可訪問了。
註:集群模式需要做好 Session 共享,確保在不同伺服器切換的過程中不會因為沒有獲取到 Session 而引起服務終止。
3. 分布式與微服務的關係
分布式和微服務的架構很相似,只是部署的方式不一樣而已。
生產環境下的微服務肯定是分布式部署的,分布式部署的應用不一定是微服務架構的。比如集群部署,它是把相同應用複製到不同伺服器上,但是邏輯功能上還是單體應用。
4. 在開發中我們可以將分布式和集群分開嗎?
針對這個問題,我們可以根據分布式的介紹看出,其主要的功能是用來將我們的系統模塊化,將系統進行解耦的,方便我們以後的維護和開發的。但是其並不能解決我們的並發問題,也無法保證我們的系統在伺服器宕機後的正常運轉。
而集群恰好彌補了分布式的缺陷,集群就是多個伺服器處理相同的業務。這在一方面可以解決或者說改善我們系統的並發問題,一方面可以解決我們伺服器如果出現一定數量的宕機後,系統仍然可以正常運轉。
好的設計應該是分布式和集群相結合,先分布式再集群。具體實現就是業務拆分成很多子業務,然後針對每個子業務進行集群部署。這樣每個子業務如果出了問題,整個系統完全不會受影響。
因此,分布式和集群是一對好基友,誰也離不開誰。(作者:Mike)
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請儘快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯繫客服。電話:028-62778877-8261;郵箱:jenny@west.cn。本站原創內容未經允許不得轉載,或轉載時需註明出處::西部數碼資訊門戶 » 淺談集群、分布式、微服務的異同