java單體架構,SOA架構,微服務架構,分佈式架構,集羣架構

單體架構

什麼是單體架構

一個歸檔包(例如war格式或者Jar格式)包含了應用所有功能的應用程序,我們通常稱之爲單體應用。架構單體應用的方法論,我們稱之爲單體應用架構,這是一種比較傳統的架構風格。。

單體架構示例圖

QQ截圖20180517151958.png

單體架構的缺陷

1.複雜性高
整個項目包含的模塊非常多,模塊的邊界模糊,依賴關係不清晰,代碼質量參差不齊,整個項目非常複雜。每次修改代碼都心驚膽戰,甚至添加一個簡單的功能,或者修改一個BUG都會造成隱含的缺陷。

2.技術債務逐漸上升
隨着時間推移、需求變更和人員更迭,會逐漸形成應用程序的技術債務,並且越積越多。已使用的系統設計或代碼難以修改,因爲應用程序的其他模塊可能會以意料之外的方式使用它。

3.部署速度逐漸變慢
隨着代碼的增加,構建和部署的時間也會增加。而在單體應用中,每次功能的變更或缺陷的修復都會導致我們需要重新部署整個應用。全量部署的方式耗時長、影響範圍大、風險高,這使得單體應用項目上線部署的頻率較低,從而又導致兩次發佈之間會有大量功能變更和缺陷修復,出錯概率較高。

4.擴展能力受限,無法按需伸縮
單體應用只能作爲一個整體進行擴展,無法結合業務模塊的特點進行伸縮。

5.阻礙技術創新
單體應用往往使用統一的技術平臺或方案解決所有問題,團隊的每個成員都必須使用相同的開發語言和架構,想要引入新的框架或技術平臺非常困難。

由於單體架構的缺陷日益明顯,所以越來越多的公司採用微服務架構範式解決上面提到的單體架構中的問題。

不同於構建單一、龐大的應用,微服務架構將應用拆分爲一套小且互相關聯的服務。

SOA架構

SOA是Service-Oriented Architecture的英文縮寫,就是面向服務的架構。這裏的服務可以理解爲service層業務服務。
單一應用架構
當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
垂直應用架構
當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
分佈式服務架構
當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作爲獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
流動計算架構
當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基於訪問壓力實時管理集羣容量,提高集羣利用率。
此時,用於提高機器利用率的SOA服務治理方案是關鍵。
Dubbo就是SOA服務治理方案的核心框架。
總結:dubbo不僅可以對服務進行治理,而且還可以對服務進行調用。

微服務架構

什麼是微服務架構

簡而言之,微服務架構風格的開發方法,是以開發一組小型服務的方式來開發一個獨立的應用系統的。其中每個小型服務都運行在自己的進程中,並經常採用HTTP資源API輕量的機制來相互通信。

這些服務圍繞業務功能進行構建,並能通過全自動的部署機制來進行獨立部署。這些微服務可以使用不同的語言來編寫,並且可以使用不同的數據存儲技術。對這些微服務我們僅做最低限度的集中管理。

微服務架構示例圖

QQ截圖20180517201613.png

微服務架構的特性

每個微服務可獨立運行在自己的進程裏
一系列獨立運行的微服務共同構建起整個系統
每個服務爲獨立的業務開發,一個微服務只關注某個特定的功能,如訂單管理、用戶管理等
微服務之間通過一些輕量的通信機制進行通信,如REST API接口進行調用
可以使用不同的語言與存儲技術
全自動的部署機制

微服務架構的優勢

1.易於開發和維護
一個微服務只關注一個特定的業務功能,所以它的業務清晰、代碼量較少。開發和維護單個微服務相對比較簡單,整個應用是由若干個微服務構建而成,所以整個應用也會維持在可控狀態;

2.單個微服務啓動較快
單個微服務代碼量較少,所以啓動會比較快;

3.局部修改容易部署
單體應用只要有修改,就要重新部署整個應用,微服務解決了這樣的問題。一般來說,對某個微服務進行修改,只需要重新部署這個服務即可;

4.技術棧不受限
在微服務中,我們可以結合項目業務及團隊的特點,合理地選擇技術棧

5.按需伸縮

微服務架構的挑戰

1.運維要求較高
更多的服務意味着更多的運維投入。在單體架構中只需要保證一個應用的正常運行;而在微服務中,需要保證幾十甚至幾百個服務的正常運行與協作,帶來了巨大的挑戰;

2.分佈式固有的複雜性
使用微服務構建的是分佈式系統。對於一個分佈式系統,系統容錯、網絡延遲、分佈式事務等都帶來了巨大的挑戰;

3.接口調整成本高
微服務之間通過接口進行通信。如果修改某個微服務的API,可能所有使用了該接口的微服務都需要做調整;

4.重複勞動
很多服務可能都會使用到相同的功能。而這個功能並沒有達到分解爲一個微服務的程度,這個時候,可能各個服務都會開發這一功能,導致代碼重複。

微服務設計原則

單一職責原則
服務自治原則
輕量級通信原則
接口明確原則

微服務和SOA的區別

微服務架構強調的第一個重點就是業務系統需要徹底的組件化和服務化
微服務不再強調傳統SOA架構裏面比較重的ESB企業服務總線,同時SOA的思想進入到單個業務系統內部實現真正的組件化。

分佈式-微服務-集羣的區別

分佈式

QQ截圖20180517203448.png

service A、B、C、D 分別是業務組件,通過API Geteway進行業務訪問。

將一個大的系統劃分爲多個業務模塊,業務模塊分別部署到不同的機器上,各個業務模塊之間通過接口進行數據交互。

區別分佈式的方式是根據不同機器不同業務。

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

集羣模式

QQ截圖20180517203458.png

集羣模式是不同服務器部署同一套服務對外訪問,實現服務的負載均衡。

區別集羣的方式是根據部署多臺服務器業務是否相同。

注:集羣模式需要做好session共享,確保在不同服務器切換的過程中不會因爲沒有獲取到session而中止退出服務。

一般配置Nginx*的負載容器實現:靜態資源緩存、Session共享可以附帶實現,Nginx支持5000個併發量。

分佈式是否屬於微服務?

答案是肯定的。微服務的意思也就是將模塊拆分成一個獨立的服務單元通過接口來實現數據的交互。

微服務架構

微服務的設計是爲了不因爲某個模塊的升級和BUG影響現有的系統業務。

微服務與分佈式的細微差別是,微服務的應用不一定是分散在多個服務器上,他也可以是同一個服務器。

QQ截圖20180517203925.png

分佈式和微服的架構很相似,只是部署的方式不一樣而已。



作者:意識流丶
鏈接:https://www.jianshu.com/p/92ca0bfbd52f
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章