- 應(yīng)用系統(tǒng)架構(gòu)種類(lèi)及優(yōu)缺點(diǎn)分析
軟件體系結(jié)構(gòu)是構(gòu)建計(jì)算機(jī)軟件實(shí)踐的基礎(chǔ)。 軟件架構(gòu)是一個(gè)系統(tǒng)的草圖。它描述的對(duì)象是直接構(gòu)成系統(tǒng)的抽象組件。各個(gè)組件之間的連接則明確和相對(duì)細(xì)致地描述組件之間的通訊。
隨著社會(huì)及軟件設(shè)計(jì)的發(fā)展,不同時(shí)期對(duì)軟件架構(gòu)的要求也不一樣,軟件架構(gòu)的發(fā)展,從最開(kāi)始的單體應(yīng)用架構(gòu),到垂直應(yīng)用架構(gòu),再到分布式架構(gòu),再到面向服務(wù)的SOA架構(gòu),再到目前比較流行的微服務(wù)架構(gòu),每種架構(gòu)都在自己的時(shí)代發(fā)揮了重要的作用.
單體架構(gòu)是早期的應(yīng)用軟件架構(gòu),以前的SSH或者SSM架構(gòu)模式就屬于這種架構(gòu),架構(gòu)采用分層的架構(gòu)模式,可分為數(shù)據(jù)庫(kù)訪問(wèn)層,業(yè)務(wù)邏輯層,控制層,前臺(tái)到后臺(tái)在一個(gè)項(xiàng)目里完成,這種架構(gòu)簡(jiǎn)單,開(kāi)發(fā)成本低,部署在一個(gè)節(jié)點(diǎn)上就可以,維護(hù)也比較方便,但缺點(diǎn)也比較明顯,全部功能集成在一個(gè)項(xiàng)目中,這樣對(duì)于大型項(xiàng)目來(lái)講不易開(kāi)發(fā)和維護(hù),模塊之間耦合緊密,單點(diǎn)容錯(cuò)能力很低,并且無(wú)法針對(duì)不同的模塊進(jìn)行針對(duì)性優(yōu)化和水平擴(kuò)展,一個(gè)模塊出現(xiàn)問(wèn)題,會(huì)導(dǎo)致整個(gè)系統(tǒng)無(wú)法使用.

?

單體應(yīng)用架構(gòu)
隨著項(xiàng)目運(yùn)行發(fā)展,用戶訪問(wèn)量逐漸增大,單體架構(gòu)的應(yīng)用只能通過(guò)軟負(fù)載均衡等手段,結(jié)合單純?cè)黾庸?jié)點(diǎn)的方式來(lái)應(yīng)對(duì),但系統(tǒng)中并不是所有的模塊都會(huì)有比較大的訪問(wèn)量,這時(shí)單體架構(gòu)的劣勢(shì)就會(huì)展現(xiàn)出來(lái),這時(shí)我們把系統(tǒng)模塊拆分,對(duì)訪問(wèn)量較大的模塊,增加節(jié)點(diǎn),進(jìn)行水平擴(kuò)展即可這就是垂直應(yīng)用架構(gòu),垂直應(yīng)用架構(gòu)很好的適應(yīng)了當(dāng)時(shí)時(shí)代發(fā)展的需要,實(shí)現(xiàn)了流量分擔(dān),解決了并發(fā)問(wèn)題,并且可以針對(duì)不同模塊進(jìn)行優(yōu)化和水平擴(kuò)展,一個(gè)模塊出了問(wèn)題不會(huì)影響到其他系統(tǒng),從而也提高了系統(tǒng)容錯(cuò)能力,但垂直應(yīng)用架構(gòu)的系統(tǒng),各模塊間相互獨(dú)立,無(wú)法相互調(diào)用,這會(huì)導(dǎo)致重復(fù)的開(kāi)發(fā)任務(wù).模塊間物業(yè)相互調(diào)用的情況是避免不了的.

?

垂直應(yīng)用架構(gòu)
分布式架構(gòu),由垂直應(yīng)用架構(gòu)演變而來(lái),當(dāng)垂直應(yīng)用架構(gòu)中,模塊越來(lái)越多,重復(fù)的業(yè)務(wù)代碼會(huì)越來(lái)越多,這時(shí)把重復(fù)部分代碼抽取出來(lái),做成統(tǒng)一的業(yè)務(wù)層來(lái)提供獨(dú)立服務(wù),這就形成了分布式架構(gòu),分布式架構(gòu)分為表現(xiàn)層和服務(wù)層兩個(gè)部分,表現(xiàn)層僅處理頁(yè)面交互,服務(wù)層提供業(yè)務(wù)邏輯支撐,各個(gè)服務(wù)模塊之間可以相互調(diào)用,提高了代碼的復(fù)用性,但隨著業(yè)務(wù)模塊增多,系統(tǒng)間耦合度會(huì)逐漸變高,模塊間調(diào)用關(guān)系錯(cuò)綜復(fù)雜,系統(tǒng)會(huì)變的越來(lái)越難以維護(hù).


?
分布式架構(gòu)
由于分布式架構(gòu)下,模塊服務(wù)越來(lái)越多,模塊小而多的問(wèn)題越來(lái)越突出,模塊間調(diào)用混亂復(fù)雜,這個(gè)時(shí)候就需要增加一個(gè)調(diào)度中心,對(duì)模塊服務(wù)間的調(diào)用進(jìn)行實(shí)時(shí)管理,此時(shí)SOA Service OrientedArchitecture,面向服務(wù)的架構(gòu)出現(xiàn)了,該架構(gòu)通過(guò)添加服務(wù)治理中間層,來(lái)實(shí)時(shí)管理模塊服務(wù)之間的相互調(diào)用.目前服務(wù)治理中間件有阿里的DUBBO,早期時(shí)有人用WebService或ESB企業(yè)服務(wù)總線,底層通訊協(xié)議使用SOAP協(xié)議(Http+XML)來(lái)實(shí)現(xiàn)傳輸.SOA架構(gòu)使用服務(wù)治理層解決了服務(wù)之間調(diào)用關(guān)系錯(cuò)綜復(fù)雜的問(wèn)題,但服務(wù)間依賴(lài)關(guān)系較多,某個(gè)環(huán)節(jié)出錯(cuò)可能會(huì)導(dǎo)致服務(wù)雪崩,并且模塊服務(wù)間關(guān)系復(fù)雜,運(yùn)維成本增加,測(cè)試部署困難.

?


SOA架構(gòu)
微服務(wù)架構(gòu)從SOA架構(gòu)演變而來(lái),比SOA架構(gòu)模式,粒度控制更加精細(xì),微服務(wù)架構(gòu)倡導(dǎo)將應(yīng)用模塊,設(shè)計(jì)成一個(gè)個(gè)獨(dú)立,可配置,的子服務(wù),每個(gè)服務(wù)可以獨(dú)立部署,互不影響,服務(wù)間通訊采用Http協(xié)議,并使用restful風(fēng)格的API形式進(jìn)行通訊,數(shù)據(jù)交換采用輕量級(jí)Json格式通訊,借助Http實(shí)現(xiàn)了系統(tǒng)跨語(yǔ)言,跨平臺(tái)的交互,微服務(wù)架構(gòu),通過(guò)對(duì)服務(wù)的原子化拆分,獨(dú)立打包,部署,升級(jí),保證了每個(gè)微服務(wù)清晰的任務(wù)劃分,利于擴(kuò)展.并且現(xiàn)在已經(jīng)有成熟的微服務(wù)全家桶式的框架,比如SpringCloud以及最新的Spring Cloud Alibaba.

?

微服務(wù)架構(gòu)
- 分布式系統(tǒng)多租戶的優(yōu)缺點(diǎn)分析
多租戶技術(shù)又稱(chēng)多重租賃技術(shù),是一種軟件架構(gòu),它探討的是實(shí)現(xiàn)如何在多用戶環(huán)境箱,實(shí)現(xiàn)共用相同的系統(tǒng)或程序組件,并確保各個(gè)用戶之間的數(shù)據(jù)獨(dú)立性和隔離性.在多租戶應(yīng)用系統(tǒng)架構(gòu)中,使用多租戶應(yīng)用系統(tǒng)的客戶稱(chēng)之為租戶,對(duì)租戶而言在系統(tǒng)中建置的各種數(shù)據(jù),以及用戶本身客制化的應(yīng)用程序環(huán)境等都是屬于租戶范圍的,也就是說(shuō),雖然多個(gè)租戶同時(shí)在使用一套程序軟件,但每個(gè)租戶都有自己的一套客制化軟件環(huán)境,因此租戶數(shù)據(jù)的隔離,隱私,安全是多租戶技術(shù)的關(guān)鍵.
多租戶的軟件架構(gòu),系統(tǒng)維護(hù)成本低,系統(tǒng)升級(jí)時(shí)只需更新一次,維護(hù)人員不需要對(duì)每個(gè)用戶都進(jìn)行更新,節(jié)省了大量的運(yùn)維成本,同時(shí)因?yàn)橐粋€(gè)軟件實(shí)例被多個(gè)組織共享,降低了整體的資源消耗,減低了應(yīng)用運(yùn)行成本和相應(yīng)管理開(kāi)支,同時(shí)降低了在云計(jì)算環(huán)境下,導(dǎo)致的敏感數(shù)據(jù)容易泄露,數(shù)據(jù)訪問(wèn)無(wú)詳細(xì)記錄,操作無(wú)詳細(xì)記錄的風(fēng)險(xiǎn),提高了數(shù)據(jù)的安全性.另外由于統(tǒng)一部署所以管理起來(lái)也會(huì)更方便,當(dāng)然多租戶的軟件架構(gòu)同樣也有系統(tǒng)復(fù)雜性高的問(wèn)題,由于多租戶系統(tǒng)融合了所有租戶的需求,所以需要更強(qiáng)的專(zhuān)業(yè)技術(shù)來(lái)持續(xù)開(kāi)發(fā)升級(jí)維護(hù),才能保證系統(tǒng)的持續(xù)穩(wěn)定運(yùn)行.
- 多租戶系統(tǒng)模型及實(shí)現(xiàn)方式分析
在現(xiàn)有多租戶的技術(shù)實(shí)現(xiàn)中主要有三種模型.
第一種是獨(dú)立數(shù)據(jù)庫(kù)隔離模型,即為每個(gè)租戶維護(hù)一個(gè)單獨(dú)的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)獨(dú)占一臺(tái)服務(wù)器設(shè)備,這種方案的用戶隔離級(jí)別最高,安全性最好,獨(dú)立數(shù)據(jù)庫(kù)是一個(gè)租戶獨(dú)享一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,它提供了最高強(qiáng)度的隔離,租戶的數(shù)據(jù)彼此,在物理層面上不可見(jiàn),數(shù)據(jù)的備份恢復(fù)都很靈活.但相應(yīng)的硬件成本也高,數(shù)據(jù)庫(kù)安裝數(shù)量多,隨之會(huì)帶來(lái)運(yùn)維和購(gòu)置成本的增加.
第二種是共享數(shù)據(jù)庫(kù)服務(wù)器,獨(dú)立數(shù)據(jù)庫(kù)實(shí)例模型,這種方式所有租戶共享一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,但每個(gè)租戶使用該數(shù)據(jù)庫(kù)服務(wù)器上的一個(gè)數(shù)據(jù)庫(kù)實(shí)例,將每個(gè)租戶分別關(guān)聯(lián)到這臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的不同數(shù)據(jù)庫(kù)實(shí)例上,租戶之間的數(shù)據(jù),彼此在邏輯上是不可見(jiàn)的,這在一定程度上實(shí)現(xiàn)了數(shù)據(jù)的邏輯隔離,并不是完全隔離,但若該數(shù)據(jù)庫(kù)服務(wù)器出現(xiàn)問(wèn)題,所有租戶的數(shù)據(jù)庫(kù)都會(huì)受到影響.
第三種是共享數(shù)據(jù)庫(kù)服務(wù)器,共享數(shù)據(jù)庫(kù)實(shí)例,共享數(shù)據(jù)庫(kù)表模型,
這種方式實(shí)現(xiàn)的多租戶系統(tǒng),所有租戶的數(shù)據(jù)放到同一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的,同一個(gè)數(shù)據(jù)庫(kù)實(shí)例中,每個(gè)租戶通過(guò)表中的TenantId來(lái)區(qū)分不同的租戶數(shù)據(jù),這種模型共享程度最高,隔離級(jí)別最低,租戶間數(shù)據(jù)彼此邏輯不可見(jiàn),這是成本最低的一種實(shí)現(xiàn)方式,另外還有一種相似的實(shí)現(xiàn)方式,也是通過(guò)共享數(shù)據(jù)庫(kù)服務(wù)器共享數(shù)據(jù)庫(kù)表,但數(shù)據(jù)的隔離不是通過(guò)TenantId而是通過(guò)軟件系統(tǒng)自身的權(quán)限配置,來(lái)實(shí)現(xiàn)的租戶數(shù)據(jù)邏輯上的隔離,這種方式跟前一種方式相比設(shè)計(jì)實(shí)現(xiàn)成本會(huì)更低一些同時(shí)也能很好的在邏輯上保證數(shù)據(jù)的隔離.
- 企業(yè)軟件SAAS化的優(yōu)缺點(diǎn)分析
Saas Software-as-a-Service軟件即服務(wù),對(duì)于平臺(tái)供應(yīng)商來(lái)說(shuō),相對(duì)于傳統(tǒng)的軟件供應(yīng)模式,軟件的Saas化,可以讓用戶通過(guò)互聯(lián)網(wǎng)使用實(shí)時(shí)運(yùn)行的軟件,給用戶帶來(lái)極其豐富的體驗(yàn)的同時(shí),也節(jié)約了客戶的使用投資,同時(shí)由于供應(yīng)商,始終維護(hù)一套代碼,所以在一定程度上也節(jié)省了供應(yīng)商的成本.同時(shí)對(duì)于供應(yīng)商來(lái)說(shuō),多租戶的軟件架構(gòu)代碼可重復(fù)使用,成本較低,可以更快的為用戶提供解決方案,軟件產(chǎn)品可按功能模塊,隨意組合,定價(jià)模式靈活,符合企業(yè)發(fā)展模式,另外只維護(hù)一套軟件,供應(yīng)商可以把精力專(zhuān)注到產(chǎn)品提升上,給客戶提供更好,更全面的解決方案和技術(shù)支持.
- 多租戶系統(tǒng)技術(shù)及架構(gòu)選型分析
多租戶應(yīng)用軟件構(gòu)建模型有獨(dú)立數(shù)據(jù)庫(kù)服務(wù)器模型,獨(dú)立數(shù)據(jù)庫(kù)服務(wù)器,共享數(shù)據(jù)庫(kù)實(shí)例模型,共享數(shù)據(jù)庫(kù)服務(wù)器,共享數(shù)據(jù)庫(kù)實(shí)例,共享數(shù)據(jù)庫(kù)表模型,這三種方式各有優(yōu)缺點(diǎn).
基于這三種構(gòu)建多租戶系統(tǒng)的模型,我們可以在分布式微服務(wù)軟件架構(gòu)的基礎(chǔ)上再去構(gòu)建多租戶應(yīng)用系統(tǒng),微服務(wù)軟件架構(gòu)是當(dāng)下比較流行的分布式軟件架構(gòu),其提供的全家桶式的,一站式分布式問(wèn)題解決方案也獲得了眾多企業(yè)的認(rèn)可,最新的SpringCloud Alibaba 優(yōu)化了服務(wù)的治理,流量監(jiān)控,分布式事物等處理等功能,使得分布式系統(tǒng)的開(kāi)發(fā)變的更加的方便.因此建議使用SpringCloud Alibaba微服務(wù)架構(gòu)做為多租戶系統(tǒng)開(kāi)發(fā)的基礎(chǔ)框架.
在SpringCloud Alibaba的微服務(wù)架構(gòu)選型基礎(chǔ)上,進(jìn)一步選擇若依管理系統(tǒng)微服務(wù)版做為系統(tǒng)開(kāi)發(fā)的基盤(pán),該系統(tǒng)一直保持升級(jí),是基于JAVA EE 分布式微服務(wù)架構(gòu)的平臺(tái),基于經(jīng)典技術(shù)組合(Spring Boot、Spring Cloud & Alibaba、Vue、Element),已經(jīng)內(nèi)置了模塊如:部門(mén)管理、角色用戶、菜單及按鈕授權(quán)、數(shù)據(jù)權(quán)限、系統(tǒng)參數(shù)、日志管理、代碼生成等。在線定時(shí)任務(wù)配置;支持集群,支持多數(shù)據(jù)源,可以提高系統(tǒng)開(kāi)發(fā)效率,文檔完善,代碼易懂,且基盤(pán)持續(xù)維護(hù)更新保證了基礎(chǔ)代碼的安全,同時(shí)支持二次開(kāi)發(fā),保證了系統(tǒng)靈活的可定制性.

?
?