1. 程式人生 > >叢集,分散式,微服務,SOA的理論知識

叢集,分散式,微服務,SOA的理論知識

什麼是叢集

以下內容來源維基百科:

計算機叢集簡稱叢集是一種計算機系統,它通過一組鬆散整合的計算機軟體和/或硬體連線起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一臺計算機。集群系統中的單個計算機通常稱為節點,通常通過區域網連線,但也有其它的可能連線方式。叢集計算機通常用來改進單個計算機的計算速度和/或可靠性。一般情況下叢集計算機比單個計算機,比如工作站或超級計算機效能價格比要高得多

叢集技術特點:

  • 通過多臺計算機完成同一個工作,達到更高的效率。

  • 兩機或多機內容、工作過程等完全一樣。如果一臺宕機,另一臺可以起作用。

叢集模式在程式猿界有各種裝逼解釋,有的讓你根本無法理解,其實就是一個很簡單的玩意兒,且聽我一一道來。

單機處理到達瓶頸的時候,你就把單機複製幾份,這樣就構成了一個“叢集”。叢集中每臺伺服器就叫做這個叢集的一個“節點”,所有節點構成了一個叢集。每個節點都提供相同的服務,那麼這樣系統的處理能力就相當於提升了好幾倍(有幾個節點就相當於提升了這麼多倍)。

但問題是使用者的請求究竟由哪個節點來處理呢?最好能夠讓此時此刻負載較小的節點來處理,這樣使得每個節點的壓力都比較平均。要實現這個功能,就需要在所有節點之前增加一個“排程者”的角色,使用者的所有請求都先交給它,然後它根據當前所有節點的負載情況,決定將這個請求交給哪個節點處理。這個“排程者”有個牛逼了名字——負載均衡伺服器。

叢集結構的好處就是系統擴充套件非常容易。如果隨著你們系統業務的發展,當前的系統又支撐不住了,那麼給這個叢集再增加節點就行了。但是,當你的業務發展到一定程度的時候,你會發現一個問題——無論怎麼增加節點,貌似整個叢集效能的提升效果並不明顯了。這時候,你就需要使用微服務結構了。

在維基百科上說得也挺明白的了,我來舉個例子吧。

  • 小周在公司寫Java程式,但公司業務在發展,一個Java開發者可能忙不過來,小周有的時候也得請個假呀。於是請了3y過去一起做Java開發。平時小周和3y就寫Java程式,但3y可能有事要回學校一趟。沒事,公司還有小周做Java開發呢,公司開發還能繼續運作。

    • 3y跟小周都是做Java開發

    • 3y來了,小周的工作可以分擔一些。

    • 3y請假了,還有小周在呢。

我寫了一個910便利網釋出到伺服器去了,現在越來越多的人訪問了,訪問有點慢,怎麼辦???很簡單,(只有充錢才能變強),加配置吧(加cpu,加記憶體)。升級完配置之後,訪問人數越來越多,於是發現又不禁用啦,在這臺機器上加配置已經解決不了了,怎麼辦???很簡單,(只有充錢才能變強),我再買一臺伺服器,將910便利網也釋出到新買的這臺伺服器上去

特點:

  • 這兩臺伺服器都是執行同一個系統--->910便利網

好處:

  • 本來只有一臺機器處理訪問,現在有兩臺機器處理訪問了,分擔了壓力

  • 如果其中一臺忘記繳費了,暫時用不了了。沒關係,還有另一臺可以用呢。

叢集同一個業務,部署在多個伺服器上(不同的伺服器運行同樣的程式碼,幹同一件事)

什麼是分散式

以下內容來源維基百科:

分散式系統是一組計算機,通過網路相互連線傳遞訊息與通訊後並協調它們的行為而形成的系統。元件之間彼此進行互動以實現一個共同的目標

我也來舉個例子來說明一下吧:

  • 現在公司有小周和3y一起做Java開發,做Java開發一般jQuery,AJAX都能寫一點,所以這些活都由我們來幹。可是呢,3y對前端不是很熟,有的時候除錯半天都調不出來。老闆認為3y是真的菜!於是讓小周專門來處理前端的事情。這樣3y就高興了,可以專心寫自己的Java,前端就專門交由小周負責了。於是,小周和3y就變成了協作開發

    • 3y對前端不熟(能寫出來),但在除錯的時候可能會花費很多時間

    • 小周來專門做前端的事,3y可以專心寫自己的Java程式了。

    • 都是為了專案正常執行以及迭代。

我的910便利網已經部署到兩臺伺服器去了,但是越來越多的人去訪問。現在也逐漸承受不住啦。那現在怎麼辦啊??那繼續充錢變強??作為一個理智的我,肯定得想想是哪裡有問題。現在910便利網的模組有好幾個,全都丟在同一個Tomcat裡邊。

其實有些模組的訪問是很低的(比如後臺管理),那我可不可以這樣做:將每個模組抽取獨立出來,訪問量大的模組用好的伺服器裝著,沒啥人訪問的模組用差的伺服器裝著。這樣的好處是:一、資源合理利用了(沒人訪問的模組用效能差的伺服器,訪問量大的模組單獨提升效能就好了)。二、耦合度降低了:每個模組獨立出來,各幹各的事(專業的人做專業的事),便於擴充套件

特點:

  • 將910便利網的功能拆分,模組之間獨立,在使用的時候再將這些獨立的模組組合起來就是一個系統了。

好處:

  • 模組之間獨立,各做各的事,便於擴充套件,複用性高

  • 高吞吐量。某個任務需要一個機器執行10個小時,將該任務用10臺機器的分散式跑(將這個任務拆分成10個小任務),可能2個小時就跑完了

分散式一個業務分拆多個子業務,部署在不同的伺服器上(不同的伺服器,執行不同的程式碼,為了同一個目的)

 

叢集/分散式

叢集和分散式並不衝突,可以有分散式叢集

現在3y的公司規模變大了,有5個小夥子寫Java,4個小夥子寫前端,2個小夥子做測試,1個小夥子做DBA。

  • Java,前端,測試,DBA的關係看作是分散式的

  • 5個Java看作是叢集的(前端,測試同理)…

SOA:業務系統分解為多個元件,讓每個元件都獨立提供離散,自治,可複用的服務能力,通過服務的組合和編排來實現上層的業務流程 
作用:簡化維護,降低整體風險,伸縮靈活