单体架构
微服務架構介紹,我們講一下軟件常見的架構方式,以及什么是微服務架構,微服務架構的原則,那我們先來看第一個知識點,軟件架構方式當中的,單體架構,那么什么是單體架構呢,其實單體架構我們也稱之為單體系統,單體應用,就是把我們系統當中的功能模塊,耦合在一個應用中的架構方式,稱之為單體架構,單體架構也稱之為單體系統或者單體應用,然后就是一種把系統中,所有的功能,還有這個模塊,耦合在一個應用中的架構方式,我們稱之為單體架構,那么單體架構他有哪些特點呢,單體架構特點,其實單體架構的特點呢,我們來看一下,只要我們是單體架構去架構的項目,都會打包成一個獨立的單元,就是我們的項目最終會導成一個唯一的jar包,或者是war包,這是他的第一個特點,那第二個特點是什么呢,它會以一個進程的方式,來運行,這是單體架構的第二個特點,我們來分析一下他的特點,其實第一個我們很好理解,在我們所學的課程當中,只要我們沒有學面向服務的方式,我們所說的SOA架構,沒有學這種架構方式之前,所有的項目采用的是單體架構,單體架構最終會導成一個jar或者war來運行,所以第一個很好理解,第二個會以一個進程方式來運行,這個什么意思呢,就是我們導成的jar或者是war,在我們的系統當中去運行時,都是以一個進行的方式來運行的,比如我們導成一個jar包,jar當中的class,最終要依賴于虛擬機,來運行的,所以這個時候我們肯定要啟動虛擬機,其實虛擬機是操作當中的一個進程,在這個進程當中呢,來運行我們的class,那么對于war包也是如此,我們的war包最終要部署到tomcat當中,或者我們的容器當中來運行,那么容器也是以一個進程在操作系統當中來運行,然后在改進程當中,來運行我們的WEB項目,所以這是單體架構的一個特點,那接下來我們通過畫一個圖,來表示單體架構的一個方式
這個圖我已經畫好了我們來看一下,這個是我們整個webapp,然后在我的項目當中,包含了有表現層,應用層,數據層,以及這個數據庫,我們在表現層,應用層,數據層之間呢,去做代碼的調用,然后就會來操作我們的數據庫,這是一個典型的單體架構,其實你會發現所謂的單體架構,就是我們講過的MVC架構,其實MVC架構就是單體架構的一個方式
單體架構的優點和缺點,第一個優點是什么呢,項目易于管理,其實我們整個單體項目,我們在做開發的時候呢,團隊的人數并不是很多,項目結構也并不是很復雜,所以項目在管理上呢,會更容易一些,第二個就是部署簡單,我們項目開發完畢,都要去部署的,由于項目本身是單一結構的,項目部署起來是非常的容易的,把我們項目所生成的,導成war包,放入到tomcat所指定的目錄里,去運行,相比我們分布式架構呢,容易的多,這是單體架構的一個優點,這個是優點,我們再來看單體架構的缺點,如果我們的項目比較的簡單,功能比較單一,或者需求變更并不會很頻繁,其實這個時候單體架構是一個很好地選擇,但是如果我們的項目比較的龐大,功能比較復雜,或者項目迭代的次數比較的頻繁,更新的次數比較的頻繁,這個時候單體架構的缺點也就體現出來了,那我們來看一下單體架構的項目有哪些缺點呢,我們接下來從6個維度來說單體架構的缺點,第一就是測試成本高,其實這個比較容易理解,由于我們所有的功能都在一個項目當中,這個時候如果我們的項目要去迭代了,需求變更的現象了,我的功能要做改變,由于是一個整體,一旦我們的代碼發生改變以后,對于其他的部分呢,我們也要做一個重新的測試,因為我們不能保證不會有其他的影響,所以我們整個測試的過程,要把所有的進行一個測試,所以這個時候就會導致我們測試的成本過高,這是大體架構的第一個缺點,測試成本高,第二個是什么呢,可伸縮性差,我們來看一下什么是可伸縮性差,其實單體架構項目,由于是一個但進程的形式來運行的,所以他很具備局限性,水平擴展是非常不容易的,比如我們現在想對整個項目做水平擴展,那么我們是無法根據某一個功能,功能的模塊去做擴展的,比如說我們的電商系統,包含了入庫管理,商品管理,還有訂單管理,比如說在這些模塊當中,商品模塊訪問量會增大,商品模塊進行部署,去做水平擴展,那么這個時候單體架構項目是無法做到的,我們只能對整個系統做集群部署,所以他的可伸縮性是比較差的,這是他的第二個缺點,第三個缺點是什么呢,可靠性差,可靠性差主要體現在哪兒呢,比如我們某段代碼出現了bug,比如像內存溢出了,這個時候就會導致整個系統宕機,受影響的也是我們整個系統,所以說就會出現某個功能,一旦出現問題了,導致我們整個系統不可用了,所以這也是單體架構的一個缺點,可靠性比較差,第四個是什么呢,就是系統迭代困難,由于我們所有的功能都在一個系統里面,會導致我們迭代相當的困難,比如我們一些互聯網項目,基本上每個月都有一個正常的迭代,畢竟會導致代碼分支過多,其實分支過多,有經驗的知道,分支過多在合并代碼的時候,這是一個非常痛苦的事,所以這也是單體架構的另一個缺點,迭代困難,我們再來看,還有什么缺點呢,跨語言程度弱,由于我們現在系統的體系,越來越龐大,需求越來越復雜,這個時候我們緊靠一個JAVA語言,對于整個開發工作可能會力不從心,這個時候我們可能還會依賴其他的語言,對項目做支持,那么如果是單體架構的項目呢,由于用的是統一的技術架構,因為你的項目用JAVA,你只能用JAVA,因為你是一個項目,統一到一個標準當中,所以他的技術棧也比較統一,那么像這種開發方式呢,我們管理起開看似比較簡單,這個時候我們想引入其他的語言的時候,就變得非常的難了,因為他們都是耦合到一起的,所以單體跨語言也是比較差的,我們再來看最后一個維度,團隊協作難,這是什么意思呢,整個系統我們都是以一個團隊來開發的,如果系統變得非常龐大,就是單體系統變得非常龐大的時候,這個時候每個人都要學習大量的代碼,和相關知識,那么我們整個團隊之間,溝通和協作就變得非常的頻繁,他不像分布式架構,分布式就是每個團隊都是開發一部分,那么團隊和團隊之間,他們協作和溝通,不像單體項目溝通那么頻繁的,所以他的團隊協作還是比較難的,以上就用六個維度來說了單體架構的一個缺點,如果我們項目結構比價簡單,需求變更不是很頻繁,其實單體架構還是比較方便的,但是我們現在系統隨便叫出來一個,功能或者業務都是比較復雜的,所以這個時候我們如果還是做單體架構的一個方式,其實這些缺點慢慢都會體現出來的,講一下軟件架構的最基本的方式,單體架構的一個技術特點
?
總結
- 上一篇: Spring Boot定时任务-Job类
- 下一篇: 常见软件架构方式的区别