【篇章一】SpringCloud前言 - 單體架構系統

目錄

前言

單體架構系統

1.什麼是單體架構

2.單體架構的優缺點

關於部署

關於開發和整理

 3.總結


前言

剛畢業的學生黨一枚,瞭解到現在分佈式系統 - 微服務體系的火熱,自Spring5.0版本的更新,通過百度等各種引擎瞭解Spring的身影,SpringBoot新穎的名詞也是在那個時候,才逐漸接觸,回想起臨近畢業的前幾個月,用springboot + JPA搭建一個小型應用軟件,週期效率大幅度縮減,真是歎爲觀止。關於SpringCloud微服務架構體系的學習,我們首先要了解關於單體架構的含義。

關於單體架構系統的介紹,我們可以從以下幾點入手入手:

  1. 什麼是單體架構系統
  2. 單體架構的優缺點

單體架構系統

1.什麼是單體架構

早期互聯網軟件行業的架構體系,將視圖交互,業務,DB數據交互統一歸爲一類處理。

從jsp + servlet的mvc體系搭建,到spring + springmvc + mybatis輕量級的框架使用,所有項目無不都是圍繞這一特點來進行搭建。而我們所說單體架構也就是:基於MVC設計思想,將所有涉及到的層面統一歸爲一類項目進行搭建。也可以把它說成:一個war有很多不同場景的業務模塊。

舉例來說:我們準備設計一款開放式的娛樂平臺,需求模塊有很多個專欄:如籃球,遊戲,主題樂園等。這些所謂的專欄可以理解爲應用場景,這裏用單體架構來設計的話,就是將籃球,遊戲,主題樂園統一放到一個項目中去處理業務,數據交互等。

Ps: 如果我們把這些不同應用場景的業務拆分,針對不同場景的模塊需求進行編譯,最後再統一集中在一個服務總站去“拿到”我們想用的模塊接口,豈不是更好。


2.單體架構的優缺點

從單體架構項目搭建和部署入手:我們可以把它理解爲傳統項目,從設計的角度分爲以下幾種(自己所涉及到範圍):

上游層次:

                 表示層:用於直接與用戶交互,通常表示:網頁,UI

                 業務邏輯層:業務處理,通過現實場景來進行業務編譯

                 數據訪問層:數據庫讀寫操作,得到大量的數據提供至業務處理層

下游層面:

                 網關層:接口攔截處理,常用於用戶登錄的session處理

                 功能性工具:如加密機制,圖文上傳,圖文識別,數據爬蟲等

                 數據源優化:針對不同的數據源進行配置,如創建連接池,最大連接數,最小連接數

                 非關係型數據庫優化:Redis,mongoDB,MemcacheDB配置,集羣等

                  .........

關於部署:

理解傳統項目的大體架構,在項目打包部署的時候,通常已maven指令打成war包,然後將war包部署到tomcat,jetty等這樣容器中運行。我們試想一下:可不可以拋棄將war包部署到容器這一繁瑣環節,通過maven直接打包到特有的容器中,完成自動化部署配置呢,當然這是可以的,我們可以藉助IDEA,Eclipse的遠程服務連接插件,將修改的內容文件傳送到遠端服務器上。

缺點:如上闡述,並非純粹的自動化部署。如果一個項目,修改的文件量過多,通過上述的方式,而不能一一去比對,在上傳的過程中,出現某些非人爲因素所導致的文件或某些代碼段丟失,嚴重的會導致整體項目崩潰。--- 興許你瞭解過docker就會解決如上問題

 

關於開發和整理

對於一個用戶量不是很多的小型應用,維護性並不是那麼可觀的就能看出來,但這也是它的優點之一,僅僅只是小而已。最典型的LAMP系統,及Linux操作系統,apache,mysql,php,在項目搭建的初始階段,這種架構的性價比是極爲迅速的,開發效率快,成本低,本身用戶量小,維護起來也不是困難。

缺點:項目過於龐大,用戶量達到上萬,上百萬時,傳統項目顯然暴露出它的不足:

           1. 開發相對困難:模塊之間的強耦合性過多

           2. 項目管理相對困難:遠程倉庫有很多不同分支點,可能需要對多個分支點進行代碼維護

           3. 測試相對困難:測試人員針對於多個模塊需要對不同生產環境進行測試

           4. 代碼可讀性差:後期需求模塊的疊加,可能會出現代碼冗餘,新來的開發人員接手時可能有些猝不及防的感覺

           5. 高併發的處理:隨着用戶的越來越多,累計的業務需求不斷增多,我們會引入多線程,併發,異步,線程安全,鎖,負載均衡,集羣等這樣的機制,當然我們學習多線程的時候也都知道,對於線程安全鎖的實現,性能上大幅度縮減項目的運行效率,除了本質上的線程引入線程池的優化,最大併發數的優化,數據庫底層的優化,容器的最大併發數優化,nginx集羣,非關係數據庫緩存與集羣,數據庫讀寫分離,分庫分區等等,達到一定的壓力值後也會很快衝破瓶頸,能力上還是有限的。


 

 3.總結

           產品的走勢,用戶量的預算,如果是初期搭建或者用戶量不是過於龐大,選擇單體架構還是很不錯一個選擇。成本低,開發效率快,維護也方便,當然前提是初期和用戶量少的條件。

            產品用戶量過於龐大,則不建議使用單體架構。

針對於項目搭建的初期來說,是有必要去了解不同體系的架構。骨架是產品的根骨,一個好的架構才能成就一款好的產品。對於單體架構體系和分佈式架構體系,我們在學習的時候也要對其有個大體的瞭解,這也是爲了以後成爲高級工程師,架構師的基礎,關於分佈式體系,我們也可以去了解一下SOA理念,再結合SpringCloud。


PS: 後續會針對與SpringCloud微服務這裏做一個專欄,週期不定,但最長不會超過5天。喜歡可以互相分享,借鑑,不足之處還需大家點撥。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章