單體架構(gòu)
什么是單體架構(gòu)
一個歸檔包(例如war格式或者Jar格式)包含了應(yīng)用所有功能的應(yīng)用程序检碗,我們通常稱之為單體應(yīng)用。架構(gòu)單體應(yīng)用的方法論疤估,我們稱之為單體應(yīng)用架構(gòu)思灌,這是一種比較傳統(tǒng)的架構(gòu)風(fēng)格。舌仍。
單體架構(gòu)示例圖
QQ截圖20180517151958.png
單體架構(gòu)的缺陷
1.復(fù)雜性高
整個項目包含的模塊非常多妒貌,模塊的邊界模糊,依賴關(guān)系不清晰铸豁,代碼質(zhì)量參差不齊,整個項目非常復(fù)雜灌曙。每次修改代碼都心驚膽戰(zhàn),甚至添加一個簡單的功能节芥,或者修改一個BUG都會造成隱含的缺陷在刺。
2.技術(shù)債務(wù)逐漸上升
隨著時間推移、需求變更和人員更迭头镊,會逐漸形成應(yīng)用程序的技術(shù)債務(wù)蚣驼,并且越積越多。已使用的系統(tǒng)設(shè)計或代碼難以修改相艇,因為應(yīng)用程序的其他模塊可能會以意料之外的方式使用它颖杏。
3.部署速度逐漸變慢
隨著代碼的增加,構(gòu)建和部署的時間也會增加坛芽。而在單體應(yīng)用中留储,每次功能的變更或缺陷的修復(fù)都會導(dǎo)致我們需要重新部署整個應(yīng)用。全量部署的方式耗時長咙轩、影響范圍大获讳、風(fēng)險高,這使得單體應(yīng)用項目上線部署的頻率較低活喊,從而又導(dǎo)致兩次發(fā)布之間會有大量功能變更和缺陷修復(fù)丐膝,出錯概率較高。
4.擴展能力受限,無法按需伸縮
單體應(yīng)用只能作為一個整體進行擴展尤误,無法結(jié)合業(yè)務(wù)模塊的特點進行伸縮侠畔。
5.阻礙技術(shù)創(chuàng)新
單體應(yīng)用往往使用統(tǒng)一的技術(shù)平臺或方案解決所有問題,團隊的每個成員都必須使用相同的開發(fā)語言和架構(gòu)损晤,想要引入新的框架或技術(shù)平臺非常困難软棺。
由于單體架構(gòu)的缺陷日益明顯,所以越來越多的公司采用微服務(wù)架構(gòu)范式解決上面提到的單體架構(gòu)中的問題尤勋。
不同于構(gòu)建單一喘落、龐大的應(yīng)用,微服務(wù)架構(gòu)將應(yīng)用拆分為一套小且互相關(guān)聯(lián)的服務(wù)最冰。
SOA架構(gòu)
SOA是Service-Oriented Architecture的英文縮寫瘦棋,就是面向服務(wù)的架構(gòu)。這里的服務(wù)可以理解為service層業(yè)務(wù)服務(wù)暖哨。
單一應(yīng)用架構(gòu)
當網(wǎng)站流量很小時赌朋,只需一個應(yīng)用,將所有功能都部署在一起篇裁,以減少部署節(jié)點和成本沛慢。
垂直應(yīng)用架構(gòu)
當訪問量逐漸增大,單一應(yīng)用增加機器帶來的加速度越來越小达布,將應(yīng)用拆成互不相干的幾個應(yīng)用团甲,以提升效率。
分布式服務(wù)架構(gòu)
當垂直應(yīng)用越來越多黍聂,應(yīng)用之間交互不可避免躺苦,將核心業(yè)務(wù)抽取出來,作為獨立的服務(wù)产还,逐漸形成穩(wěn)定的服務(wù)中心匹厘,使前端應(yīng)用能更快速的響應(yīng)多變的市場需求。
流動計算架構(gòu)
當服務(wù)越來越多雕沉,容量的評估集乔,小服務(wù)資源的浪費等問題逐漸顯現(xiàn),此時需增加一個調(diào)度中心基于訪問壓力實時管理集群容量坡椒,提高集群利用率。
此時尤溜,用于提高機器利用率的SOA服務(wù)治理方案是關(guān)鍵倔叼。
Dubbo就是SOA服務(wù)治理方案的核心框架。
總結(jié):dubbo不僅可以對服務(wù)進行治理宫莱,而且還可以對服務(wù)進行調(diào)用丈攒。
微服務(wù)架構(gòu)
什么是微服務(wù)架構(gòu)
簡而言之,微服務(wù)架構(gòu)風(fēng)格的開發(fā)方法,是以開發(fā)一組小型服務(wù)的方式來開發(fā)一個獨立的應(yīng)用系統(tǒng)的巡验。其中每個小型服務(wù)都運行在自己的進程中际插,并經(jīng)常采用HTTP資源API輕量的機制來相互通信。
這些服務(wù)圍繞業(yè)務(wù)功能進行構(gòu)建显设,并能通過全自動的部署機制來進行獨立部署框弛。這些微服務(wù)可以使用不同的語言來編寫,并且可以使用不同的數(shù)據(jù)存儲技術(shù)捕捂。對這些微服務(wù)我們僅做最低限度的集中管理瑟枫。
微服務(wù)架構(gòu)示例圖
QQ截圖20180517201613.png
微服務(wù)架構(gòu)的特性
每個微服務(wù)可獨立運行在自己的進程里
一系列獨立運行的微服務(wù)共同構(gòu)建起整個系統(tǒng)
每個服務(wù)為獨立的業(yè)務(wù)開發(fā),一個微服務(wù)只關(guān)注某個特定的功能指攒,如訂單管理慷妙、用戶管理等
微服務(wù)之間通過一些輕量的通信機制進行通信,如REST API接口進行調(diào)用
可以使用不同的語言與存儲技術(shù)
全自動的部署機制
微服務(wù)架構(gòu)的優(yōu)勢
1.易于開發(fā)和維護
一個微服務(wù)只關(guān)注一個特定的業(yè)務(wù)功能允悦,所以它的業(yè)務(wù)清晰膝擂、代碼量較少。開發(fā)和維護單個微服務(wù)相對比較簡單隙弛,整個應(yīng)用是由若干個微服務(wù)構(gòu)建而成架馋,所以整個應(yīng)用也會維持在可控狀態(tài);
2.單個微服務(wù)啟動較快
單個微服務(wù)代碼量較少驶鹉,所以啟動會比較快绩蜻;
3.局部修改容易部署
單體應(yīng)用只要有修改,就要重新部署整個應(yīng)用室埋,微服務(wù)解決了這樣的問題办绝。一般來說,對某個微服務(wù)進行修改姚淆,只需要重新部署這個服務(wù)即可孕蝉;
4.技術(shù)棧不受限
在微服務(wù)中,我們可以結(jié)合項目業(yè)務(wù)及團隊的特點腌逢,合理地選擇技術(shù)棧
5.按需伸縮
微服務(wù)架構(gòu)的挑戰(zhàn)
1.運維要求較高
更多的服務(wù)意味著更多的運維投入降淮。在單體架構(gòu)中只需要保證一個應(yīng)用的正常運行;而在微服務(wù)中搏讶,需要保證幾十甚至幾百個服務(wù)的正常運行與協(xié)作佳鳖,帶來了巨大的挑戰(zhàn);
2.分布式固有的復(fù)雜性
使用微服務(wù)構(gòu)建的是分布式系統(tǒng)媒惕。對于一個分布式系統(tǒng)系吩,系統(tǒng)容錯、網(wǎng)絡(luò)延遲妒蔚、分布式事務(wù)等都帶來了巨大的挑戰(zhàn)穿挨;
3.接口調(diào)整成本高
微服務(wù)之間通過接口進行通信月弛。如果修改某個微服務(wù)的API,可能所有使用了該接口的微服務(wù)都需要做調(diào)整科盛;
4.重復(fù)勞動
很多服務(wù)可能都會使用到相同的功能帽衙。而這個功能并沒有達到分解為一個微服務(wù)的程度,這個時候贞绵,可能各個服務(wù)都會開發(fā)這一功能厉萝,導(dǎo)致代碼重復(fù)。
微服務(wù)設(shè)計原則
單一職責原則
服務(wù)自治原則
輕量級通信原則
接口明確原則
微服務(wù)和SOA的區(qū)別
微服務(wù)架構(gòu)強調(diào)的第一個重點就是業(yè)務(wù)系統(tǒng)需要徹底的組件化和服務(wù)化
微服務(wù)不再強調(diào)傳統(tǒng)SOA架構(gòu)里面比較重的ESB企業(yè)服務(wù)總線但壮,同時SOA的思想進入到單個業(yè)務(wù)系統(tǒng)內(nèi)部實現(xiàn)真正的組件化冀泻。
分布式-微服務(wù)-集群的區(qū)別
分布式
QQ截圖20180517203448.png
service A、B蜡饵、C弹渔、D 分別是業(yè)務(wù)組件,通過API Geteway進行業(yè)務(wù)訪問溯祸。
將一個大的系統(tǒng)劃分為多個業(yè)務(wù)模塊肢专,業(yè)務(wù)模塊分別部署到不同的機器上,各個業(yè)務(wù)模塊之間通過接口進行數(shù)據(jù)交互焦辅。
區(qū)別分布式的方式是根據(jù)不同機器不同業(yè)務(wù)博杖。
注:分布式需要做好事務(wù)管理。
集群模式
QQ截圖20180517203458.png
集群模式是不同服務(wù)器部署同一套服務(wù)對外訪問筷登,實現(xiàn)服務(wù)的負載均衡剃根。
區(qū)別集群的方式是根據(jù)部署多臺服務(wù)器業(yè)務(wù)是否相同。
注:集群模式需要做好session共享前方,確保在不同服務(wù)器切換的過程中不會因為沒有獲取到session而中止退出服務(wù)狈醉。
一般配置Nginx*的負載容器實現(xiàn):靜態(tài)資源緩存、Session共享可以附帶實現(xiàn)惠险,Nginx支持5000個并發(fā)量苗傅。
分布式是否屬于微服務(wù)?
答案是肯定的。微服務(wù)的意思也就是將模塊拆分成一個獨立的服務(wù)單元通過接口來實現(xiàn)數(shù)據(jù)的交互班巩。
微服務(wù)架構(gòu)
微服務(wù)的設(shè)計是為了不因為某個模塊的升級和BUG影響現(xiàn)有的系統(tǒng)業(yè)務(wù)渣慕。
微服務(wù)與分布式的細微差別是,微服務(wù)的應(yīng)用不一定是分散在多個服務(wù)器上抱慌,他也可以是同一個服務(wù)器逊桦。
作者:意識流丶
鏈接:http://www.reibang.com/p/92ca0bfbd52f
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)抑进,非商業(yè)轉(zhuǎn)載請注明出處卫袒。