1. 程式人生 > >架構小白到磚家-02-單應用系統框架發展過程-為什麼使用springboot?

架構小白到磚家-02-單應用系統框架發展過程-為什麼使用springboot?

web應用開發經歷了很久的發展,已經越來越複雜了,為了更好的搭建應用框架,還是在梳理下歷史發展過程。web應用開發語言就很多,這裡只討論java方案的歷史。

為什麼會有web應用呢?人們為了辦理一些公司業務,以前只能到公司現場進行人工櫃檯辦理,為了方便使用者和提升工作效率,可以使用系統進行遠端業務辦理工作,就產生了web應用。
在這裡插入圖片描述
web應用的基本原理是瀏覽器和web應用之間的通訊。相當於使用者和公司(瀏覽器和web應用)使用寫信的方式來進行交流,郵差(http協議)來將信件在兩人之間傳遞。信件的檢視和書寫需要藉助一些工具(html、css、js)。web應用使用java定義servlet(業務介面人)來接收和處理信件,那麼一個web應用就是多個servlet組成。由於收件人很多,郵差為了能準確的將信件送給收件人,所以在信件上面添加了通訊地址(URL)。每個servlet就是一個收件人並且擁有一個自己的信箱,如果一個複雜的web應用將擁有非常多的servlet,就會出現如何管理複雜的通訊地址問題。
在這裡插入圖片描述


在這裡插入圖片描述
怎麼解決通訊地址管理問題呢?這個時候struts就誕生了,建立一個傳達室的公共信箱(struts)接收所有信件,然後根據收件人登記的通訊地址再發送給真正的收件人。由於每個servlet都有一個專屬的信箱,需要花費大量的資源,有了傳達室以後,那麼就不需要每個收件人都有信箱,大家公用傳達室的信箱就可以了。這樣一個沒有信箱的普通java程式(普通員工)也可以在傳達室登記一個自己的通訊地址,然後就能接收自己的信件了。雖然有了傳達室統一收件,還是需要維護一個龐大的登記簿來管理通訊地址,那麼怎麼維護通訊地址登記簿又是問題了。
在這裡插入圖片描述
如何解決通訊地址登記簿呢?這個時候springmvc就誕生了,由於通訊地址都是有資訊的,所以其實通訊地址的格式按一定約定規則(xx省xx市xx區xx街道x-x-x門牌號),可以不用維護通訊登記簿,直接按照通訊地址的規則就可以把信件分配給對應的收件人。
解決了信件收取的問題,還有很多重要信件需要進行妥善儲存,有了檔案室(資料庫)進行資訊儲存。由於檔案室是公用的,每天很多人來存取資訊,檔案室為了保證資料資訊不會丟失和錯誤,建立了資料儲存流程,每個人要儲存資料的時候都需要填一個登記表格,然後通過檔案員來處理儲存業務,偶爾還有儲存失敗的情況,還需要叫存件人處理失敗問題。另外有時候一封信件包含多個業務資訊,需要填寫不同的登記表來將資訊儲存到不同的檔案櫃上。所以想還原一封信件完整資訊也比較麻煩了。
在這裡插入圖片描述

如何解決儲存資訊的複雜和繁瑣的過程呢?人們就成立一個專職辦理儲存的部門(EJB)來幫助業務人員去儲存資訊,但是EJB自己非常龐大,又定義了一大堆代辦規則,而且辦事效率還不高,讓儲存工作比自己親自辦理還要繁瑣。於是一個更輕量級的部門(spring)出現了,它通過提前設定通用規則,代辦過程自動使用規則的方法(AOP切面程式設計),讓儲存流程變得簡單。但是還是沒有解決信件內容根據不同業務分別儲存歸檔的問題,人們還是需要自己進行拆分資訊和組合資訊。於是又成立了一個專門資料拆分和組裝的ORM部門(hibernate、mybatis)。它可以按照提前設定好的拆分規則,對資訊進行自動的拆分和組裝。由於ORM部門有兩種方案,而且標準還不統一,增加了學習和選擇問題。於是spring制定了一個統一的儲存標準(JPA),而且還提供了一些現有規則,方便直接使用進行簡單的儲存業務處理。
在這裡插入圖片描述

在這裡插入圖片描述
解決了web應用對外通訊問題和資料儲存問題,還有一個資源利用的問題。比如web應用的一個業務就招一個人來單獨辦理,如果業務太多,那麼就需要很多人來處理。但是很多業務平時沒有這麼多人來辦理,或多個業務都需要某一個公共業務支援,這樣就會造成很多人員的浪費。怎麼解決這種人員管理問題呢?spring這個部門有一個制度,就是每個員工都進行分類,平時都在統一等待區,有了業務事件後,才指派一個員工去處理,處理完成後又回到等待區。就是建立了一個人力資源池,根據具體業務需要,來調派和管理資源數量,從而避免資源浪費。然後把spring的這種資源池的制度推廣到其他部門,建立一個web應用的資源池,就可以解決應用的資源利用問題。這樣就形成了springmvc+spring+springJPA的應用框架。這樣的框架,幾個技術之間還是需要建立相應的合作規則,才能順暢的完成整個應用的運轉。這種合作規則,需要人們自己去配置,但是這些配置其實只有一種最佳實踐,很多的特殊性規則並不多,能不能簡化或者去掉這種配置合作規則的辦法呢?
在這裡插入圖片描述
為了能夠方便人們簡單實用這種應用框架,spring完成了java的web應用框架大一統,推出了springboot框架,將springmvc+spring+springJPA預設制定了最佳實踐的合作規則,並且還提供了各種其他技術工具的整合方案,讓人們可以根據自己的需要進行新增。這樣使得今天web應用的基礎方案只需要使用springboot就可以解決大部分問題了。
在這裡插入圖片描述
回顧總結一下web應用發展的過程,web應用主要需要解決兩大問題,第一個問題,解決處理使用者業務請求接收問題,從最原始的多個servlet,進化struts的單一servlet,但是需要維護URL對映表,再進化springmvc的URL自動對映機制;第二個問題,解決資料儲存問題,從JDBC直接手動操作資料庫,進化到EJB重量級實務框架,在進化到spring的AOP輕量級實務框架方案,再到ORM框架進行資料物件和資料表的自動對映,最後到springJPA統一ORM標準和自動簡單資料庫操作。在這個過程中,還發展出了spring的物件管理機制,進而實現了springboot的最佳框架實踐。另外web應用運維部署是需要servlet容器的,springboot根據最新的微服務概念,也整合了tomcat等servlet容器,可以不用額外的容器部署了。

所以現在單應用系統框架,只需要使用springboot就能快速的進行開發工作了。