聊聊叢集、分散式和微服務之間的聯絡和異同點

ITPUB社群 發表於 2022-12-01
微服務

對於叢集、分散式和微服務,大家在工作中可能經常會聽到,但是如果問你它們之間存在什麼樣的區別和聯絡,可能你一下子又感覺說不清楚,今天就這個話題,趁著週末時間,跟大家來一起聊聊。

弄明白是什麼

要做三者之間的對比,首先要弄明白它們分別是什麼?

叢集

叢集是指將多臺伺服器集中在一起,每臺伺服器都實現相同的業務,做相同的事情。

但是每臺伺服器並不是缺一不可,存在的作用主要是緩解併發壓力和單點故障轉移問題。我們可以利用一些廉價的符合工業標準的硬體構造高擴充套件、高效能、低成本、高可用的系統。

叢集主要具有以下特性:

  • 伸縮性(Scalability):一組伺服器組在一起,像單個伺服器一樣分擔處理一個繁重的任務,我們只需要將新的伺服器加入叢集中即可;

  • 高可用性(High availability):叢集的出現就是為了使叢集的整體服務儘可能可用,以便考慮計算硬體和軟體的易錯性,避免單點失效發生;

  • 負載均衡(Load balancing):均衡的應用程式處理負載或網路流量負載,使負載可以在計算機叢集中儘可能平均地分攤處理。

  • 高效能 (High Performance):平行計算(或稱平行計算)是相對於序列計算來說的,平行計算能力的目的是用來提高計算速度。

聊聊叢集、分散式和微服務之間的聯絡和異同點

分散式

分散式服務是指將多臺伺服器集中在一起,服務是分散部署在不同的機器上的。

每臺伺服器都實現總體中的不同業務,做不同的事情。一個服務可能負責幾個功能,是一種面向 SOA 的架構。各分開部署的部分彼此透過各種通訊協議互動資訊,並且每臺伺服器都缺一不可,如果某臺伺服器故障,則部分功能缺失,或導致整體無法執行。

分散式存在的主要作用是大幅度的提高效率,緩解伺服器的訪問和儲存壓力。區別分散式的方式是一個業務分拆多個子業務,部署在不同的伺服器上。

例如將一個大的系統劃分為多個業務模組,業務模組分別部署到不同的機器上,各個業務模組之間透過介面進行資料互動。

聊聊叢集、分散式和微服務之間的聯絡和異同點

微服務

微服務就是很小的服務,小到一個服務只對應一個單一的功能。

每個微服務僅關注於完成一件任務並很好地完成該任務,這個服務可以單獨部署執行。各個微服務之間是松耦合的,服務之間可以透過 RPC 來相互互動。每個微服務都是由獨立的小團隊開發、測試、部署,上線,負責它的整個生命週期。

在做架構設計時,當你估算過最大使用者量和併發量後,計算出單個應用伺服器能否滿足需求。如果使用者量只有幾百人的小應用,單體應用就能搞定,即所有應用部署在一個應用伺服器裡。如果是很大使用者量,且某些功能會被頻繁訪問,或者某些功能計算量很大,建議將應用拆解為多個子系統,各自負責各自功能,這就是微服務架構。

聊聊叢集、分散式和微服務之間的聯絡和異同點

弄清楚異同點

弄明白是什麼之後,就可以嘗試找找它們之間的異同點了。

叢集與分散式

區別1:部署多臺伺服器的業務是否相同。

叢集模式:不同伺服器部署同一套服務對外訪問,實現服務的負載均衡;

分散式:其中每一個節點,都可以做叢集,而叢集並不一定就是分散式的。


比如站點訪問的人多了,可以做一個群集。前面放一個響應伺服器,後面幾臺伺服器完成同一業務。如果有業務訪問的時候,響應伺服器看哪臺伺服器的負載不是很重,就將任務排程給哪一臺去完成。

而分散式,從窄意上理解也跟叢集差不多。但是它的組織比較鬆散,不像叢集有一個組織性,一臺伺服器垮了,其它的伺服器可以頂上來。分散式的每一個節點都完成不同的業務,一個節點垮了那這個業務就不可訪問了。

注:叢集模式需要做好 Session 共享,確保在不同伺服器切換的過程中不會因為沒有獲取到 Session 而引起服務終止。


區別2:提升效率的方式不同

分散式:以縮短單個任務的執行時間來提升效率的;

叢集:透過提高單位時間內執行的任務數來提升效率。


例如:如果一個任務由 10 個子任務組成,每個子任務單獨執行需 1 小時,則在一臺伺服器上執行該任務需 10 小時。

  • 採用分散式方案,提供 10 臺伺服器,每臺伺服器只負責處理一個子任務,不考慮子任務間的依賴關係,執行完這個任務只需一個小時。

  • 採用叢集方案,同樣提供 10 臺伺服器,每臺伺服器都能獨立處理這個任務。假設有 10 個任務同時到達,10 個伺服器將同時工作,經過10 小時後,10 個任務執行完成。這樣整體來看,還是 1 小時內完成一個任務。

注:分散式需要做好事務管理。

分散式與微服務

區別點:架構很相似,只是部署的方式不一樣而已。

微服務是一種架構風格,一個大型複雜軟體應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關注於完成一件任務並很好地完成該任務。在所有情況下,每個任務代表著一個小的業務能力。微服務的應用不一定是分散在多個伺服器上,它也可以是同一個伺服器。


微服務相比分散式服務來說,它的粒度更小,服務之間耦合度更低。由於每個微服務都由獨立的小團隊負責,因此它敏捷性更高。分散式服務最後都會向微服務架構演化,這是一種趨勢。不過服務微服務化後帶來的挑戰也是顯而易見的,例如服務粒度小,數量大,後期運維難度會增大。

分散式是否屬於微服務?

答案是肯定的。

微服務將模組拆分成一個獨立的服務單元透過介面來實現資料的互動。生產環境下的微服務肯定是分散式部署的,分散式部署的應用不一定是微服務架構的。

總結

1、叢集

複製部署,能力一致,目的是實現:伸縮性、高可用、負載均衡和高效能;

2、微服務

分散能力,將大型複雜的軟體拆分為多個微服務組成(不一定分散在多個伺服器,可以是同一個伺服器);

3、分散式

分散部署,是一種面向 SOA 的架構,服務分散部署在不同的機器上,實現不同業務,做不同的事情。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2926169/,如需轉載,請註明出處,否則將追究法律責任。