官术网_书友最值得收藏!

1.3.1 單體式架構(gòu)概述

單體式架構(gòu)又稱為單應(yīng)用架構(gòu)或單體架構(gòu),也就是系統(tǒng)所有的功能,前端頁(yè)面也好,后端服務(wù)也好,所有的功能模塊都在同一個(gè)工程上開(kāi)發(fā),最終將所有模塊、所有功能都打包在一起,放在一個(gè)進(jìn)程上運(yùn)行。例如,很多企業(yè)的Java Web項(xiàng)目就是將應(yīng)用程序打成WAR包,然后部署在一個(gè)Web容器中運(yùn)行。

總結(jié)起來(lái)就是8個(gè)字:一包在手,天下我有。現(xiàn)在回想一下在1.2.1節(jié)中SOA的例子,如果換單體式架構(gòu)又會(huì)是什么樣的呢?在單應(yīng)用模式下,它的架構(gòu)如圖1.5所示。

圖1.5 單體式架構(gòu)

由圖1.5可見(jiàn),所有的功能都在一個(gè)WAR包內(nèi),部署在Web容器(通常是TOMCAT)中運(yùn)行,在資源允許的情況下,可以任意地水平擴(kuò)展多個(gè)Web容器,客戶端(通常是瀏覽器)通過(guò)代理服務(wù)器(通常是Nginx)定義一些負(fù)載策略,反向代理集群的節(jié)點(diǎn),達(dá)到負(fù)載均衡的目的。

這樣的模式問(wèn)題是顯而易見(jiàn)的,系統(tǒng)中沒(méi)有明確的邊界和職責(zé)劃分,所有代碼都雜糅在一起,隨著系統(tǒng)越做越大,代碼量越來(lái)越多,重復(fù)的代碼隨處可見(jiàn),模塊之間調(diào)用邏輯雜亂無(wú)章,代碼質(zhì)量越來(lái)越難以管理,最終導(dǎo)致無(wú)論任何人也無(wú)法在這套系統(tǒng)上添加任何功能,這套系統(tǒng)讓人聞風(fēng)色變,都不愿意在其中修改任何邏輯。

單體式架構(gòu)模式是筆者接觸最早的模式,雖然現(xiàn)在看來(lái),其設(shè)計(jì)有些不可思議,但不得不承認(rèn),單體式架構(gòu)是在微服務(wù)之前最流行、運(yùn)用最廣泛的模式。直到今天,仍然有很多公司和項(xiàng)目在采用這種模式。

然而,任何軟件系統(tǒng)都沒(méi)有經(jīng)久不衰的解決方案,也沒(méi)有一開(kāi)始就很完美的設(shè)計(jì),就像人們打游戲,沒(méi)有萬(wàn)能的裝備組合,也沒(méi)有一開(kāi)始就很完美的打法,都是隨著經(jīng)驗(yàn)的不斷積累,隨著對(duì)游戲理解的不斷加深,才發(fā)明了各種裝備組合,各種團(tuán)戰(zhàn)戰(zhàn)術(shù)。軟件設(shè)計(jì)的發(fā)展和創(chuàng)造往往也是同樣的思路。

主站蜘蛛池模板: 九龙坡区| 南康市| 武隆县| 仙桃市| 泽库县| 塔城市| 繁昌县| 六盘水市| 高州市| 牟定县| 阳原县| 高阳县| 怀宁县| 郴州市| 崇左市| 布拖县| 宝鸡市| 彰化县| 绿春县| 宣恩县| 宁海县| 乌兰浩特市| 安义县| 繁峙县| 陈巴尔虎旗| 马公市| 临澧县| 杂多县| 德清县| 万山特区| 天台县| 曲靖市| 鹿泉市| 天峨县| 望奎县| 江油市| 隆林| 北安市| 唐河县| 丹凤县| 长宁区|