更新時(shí)間:2020年04月10日14時(shí)25分 來(lái)源:傳智播客 瀏覽次數(shù):
什么單體架構(gòu)?
在軟件設(shè)計(jì)中,經(jīng)常提及和使用經(jīng)典的 3 層模型,即表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪(fǎng)問(wèn)層。
表示層:用于直接和用戶(hù)交互,也稱(chēng)為交互層,通常是網(wǎng)頁(yè)、UI 等。
業(yè)務(wù)邏輯層:即業(yè)務(wù)邏輯處理層,例如用戶(hù)輸入的信息要經(jīng)過(guò)業(yè)務(wù)邏輯層的處理后,才能展現(xiàn)給用戶(hù)。
數(shù)據(jù)訪(fǎng)問(wèn)層:用于操作數(shù)據(jù)庫(kù),用戶(hù)在表示層會(huì)產(chǎn)生大量的數(shù)據(jù),通過(guò)數(shù)據(jù)訪(fǎng)問(wèn)層對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě)操作。
雖然在軟件設(shè)計(jì)中劃分了經(jīng)典的 3 層模型,但是對(duì)業(yè)務(wù)場(chǎng)景沒(méi)有劃分。一個(gè)典型的單體應(yīng)用就是將所有的業(yè)務(wù)場(chǎng)景的表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)
訪(fǎng)問(wèn)層放在一個(gè)工程中,最終經(jīng)過(guò)編譯、打包,部署在一臺(tái)服務(wù)器上。
單體架構(gòu)圖如下所示:
單體架構(gòu)的優(yōu)點(diǎn)
部署簡(jiǎn)單: 由于是完整的結(jié)構(gòu)體,可以直接部署在一個(gè)服務(wù)器上即可。
技術(shù)單一: 項(xiàng)目不需要復(fù)雜的技術(shù)棧,往往一套熟悉的技術(shù)棧就可以完成開(kāi)發(fā)。
用人成本低: 單個(gè)程序員可以完成業(yè)務(wù)接口到數(shù)據(jù)庫(kù)的整個(gè)流程。
單體架構(gòu)的缺點(diǎn)
系統(tǒng)啟動(dòng)慢, 一個(gè)進(jìn)程包含了所有的業(yè)務(wù)邏輯,涉及到的啟動(dòng)模塊過(guò)多,導(dǎo)致系統(tǒng)的啟動(dòng)、重啟時(shí)間周期過(guò)長(zhǎng);
系統(tǒng)錯(cuò)誤隔離性差、可用性差,任何一個(gè)模塊的錯(cuò)誤均可能造成整個(gè)系統(tǒng)的宕機(jī);
可伸縮性差:系統(tǒng)的擴(kuò)容只能只對(duì)這個(gè)應(yīng)用進(jìn)行擴(kuò)容,不能做到對(duì)某個(gè)功能點(diǎn)進(jìn)行擴(kuò)容;
線(xiàn)上問(wèn)題修復(fù)周期長(zhǎng):任何一個(gè)線(xiàn)上問(wèn)題修復(fù)需要對(duì)整個(gè)應(yīng)用系統(tǒng)進(jìn)行全面升級(jí)。
猜你喜歡:
java中級(jí)程序員學(xué)習(xí)線(xiàn)路圖
SpringBoot整合NoSQL 數(shù)據(jù)庫(kù)(Redis)實(shí)現(xiàn)緩存[java培訓(xùn)]
2020-04-07如何通過(guò)Netty寫(xiě)出一個(gè)客戶(hù)端和服務(wù)器?[java培訓(xùn)]
2020-04-07solr完成VIP等級(jí)排名實(shí)例教程[java培訓(xùn)]
2020-04-07傳智播客疫情期間如何保證教學(xué)質(zhì)量?教輔團(tuán)隊(duì)轉(zhuǎn)戰(zhàn)線(xiàn)上
2020-04-03什么是Neo4j?如何通過(guò)Neo4j構(gòu)建《人民的名義》的關(guān)系圖譜?
2020-04-03傳智播客Java實(shí)戰(zhàn)項(xiàng)目紀(jì)實(shí):java實(shí)戰(zhàn)項(xiàng)目過(guò)程再現(xiàn)
2020-04-03北京校區(qū)