自我介紹
我作為一名咸魚程序員(非閑魚),在實際的工作中我從來沒有去深入的了解過Spring的原理为黎、我從事了六年的Java開發(fā)胡陪,在2017年到2019年短短兩年之內(nèi)跳槽了多家公司。我從事過技術(shù)經(jīng)理(面向開發(fā)基礎(chǔ))碍舍,我以前認(rèn)知中如果單個服務(wù)無法承載我當(dāng)前的項目內(nèi)容我只會去選擇不同的集群架構(gòu)(針對于集群垂直化架構(gòu)方案),所以我為了運行的效率以及開發(fā)的效率學(xué)習(xí)了多門開發(fā)語言(無法面試邑雅、僅僅用于開發(fā)過程)并使用不同語言對應(yīng)的框架進行項目集群數(shù)據(jù)獲取片橡。
架構(gòu)的發(fā)展過程
回到主題,Java的架構(gòu)發(fā)展過程淮野,從我當(dāng)初學(xué)習(xí)開始捧书,我們當(dāng)初學(xué)習(xí)的Java框架有SpringMVC吹泡、Status2、Hibernate经瓷、MyBatis爆哑。在學(xué)習(xí)時開發(fā)的Demo項目就是單體架構(gòu)的項目,就是一個jar||war打天下舆吮,一個包丟到tomcat即可的項目揭朝。再到后來我參加了工作,在實際開發(fā)中我們將對應(yīng)的應(yīng)用拆分成了用戶端與服務(wù)后臺端色冀,并通過Nginx做tomcat集群潭袱,將對應(yīng)的項目放入不同的tomcat中管理。雖然當(dāng)時已經(jīng)有了Spring Boot以及微服務(wù)的對應(yīng)理論但是我當(dāng)時作為一個菜鳥并且項目為了追求穩(wěn)定使用的還是那么老套的架構(gòu)方案锋恬。再之后的一次跳槽后我接觸到了Spring Boot與Dubbo整合進行的微服務(wù)架構(gòu)模式的項目(戲稱SOA)因為整個架構(gòu)僅僅只是拆分了對應(yīng)的商品屯换、用戶、訂單与学、庫存服務(wù)彤悔。
下面進入正題,什么是單體架構(gòu)索守、什么是集群及垂直化架構(gòu)晕窑、什么是SOA架構(gòu)、什么是微服務(wù)架構(gòu)蕾盯?
單體架構(gòu)
單體架構(gòu)指單獨的一個項目也就是一個項目開發(fā)中沒有進行任何的拆分幕屹,將所有的服務(wù)都揉在一個項目之中。(即當(dāng)項目發(fā)布時只有一個jar包或者war包的項目)
這樣的架構(gòu)在初期用戶量不大的情況下是足以支撐起整個業(yè)務(wù)的
通常是Controller->Logic->Service->Mapper->DB全整在一個項目
集群及垂直化架構(gòu)
在項目不斷的壯大時级遭,我們所有的業(yè)務(wù)(用戶系統(tǒng)望拖、后臺管理系統(tǒng))等業(yè)務(wù)系統(tǒng)如果還放在同一個項目時會導(dǎo)致服務(wù)器的壓力不斷的增大挫鸽,一臺服務(wù)器無法進行大量用戶的訪問,以及因為產(chǎn)品需要滿足不同的需求來留住用戶丢郊,使得業(yè)務(wù)不斷的越來越復(fù)雜。服務(wù)器的負(fù)載越來越高的時候我們項目的jar包或war包可能會達(dá)到幾G升至上十G架诞,這樣對于項目的維護以及業(yè)務(wù)的拓展存在了很大的影響干茉。
這時我們通過將對應(yīng)的一個項目拆分成不同的系統(tǒng),多個項目并發(fā)布到不同的服務(wù)器沾谓,通過降低業(yè)務(wù)的耦合度來拆分并橫向的將對應(yīng)的系統(tǒng)放入服務(wù)器集群當(dāng)中。
拆分為多個項目可以理解為將本來的一個整站拆分成多個網(wǎng)站并發(fā)不到多個服務(wù)器
SOA(面向服務(wù))架構(gòu)
在集群及垂直化架構(gòu)當(dāng)中我們發(fā)現(xiàn)有很多的代碼是重復(fù)的昏兆,可復(fù)用的代碼妇穴,以及在緩存過程中發(fā)現(xiàn)當(dāng)用戶下單時庫存減少了但是在后臺查看時因為緩存等問題并沒有同步。所以為了節(jié)省代碼量去達(dá)到可復(fù)用饮潦、并且防止數(shù)據(jù)同步存在的延遲性携狭,將所有的服務(wù)進行了進一步的拆分
通常是
A系統(tǒng):Controller->Logic->ESB(企業(yè)服務(wù)總線)->Service->Mapper->DB
B系統(tǒng):Controller->Logic->ESB(企業(yè)服務(wù)總線)->Service->Mapper->DB
ESB(所有的服務(wù)處理邏輯揉成的一個或多個服務(wù))
所有的服務(wù)調(diào)用同一個ESB再由ESB調(diào)用對應(yīng)的服務(wù)及數(shù)據(jù)庫
微服務(wù)架構(gòu)
可以理解為跟細(xì)粒的SOA架構(gòu),將原本的多個服務(wù)拆分成跟多的單獨的服務(wù)進行強有效的解耦架構(gòu)