嵌入式系統
計算機操作系統啟動后,會加載一系列的功能和服務,而這些東西都不是開發操作系統的人寫的,如果想讓一個生態快速崛起,那么操作系統的開發人,就要告訴大家,在這個操作系統上,你要遵守那些規則,我才能讓你運行起來;
因此,我們追加的各種應用,都可以理解為一個嵌入式系統,例如我們開發的桌面端軟件,我們開發的移動 App 都是遵循著該規則。
那么,站在這個角度,你就可以推演你要做什么?
- 怎么將自己登記給操作系統,沒有登機牌,那肯定是上不了船的——安裝時提供包名進行注冊;
- 怎么收聽船長給的各種通知,接收不到通知,別人就再也找不到你了——對應著 listen(8080);
- 上傳之后,操作系統都會給你說明書,告訴日用品,熱水,遇到緊急情況去哪里報告等等,這些都是操作系統提供給你的,這個就叫 API;
- 如何得知船上的其他人,給船上的其他人發送廣播;
- 怎么接收船上的其他人發送的廣播,這里廣播就是船上的內部通信方式,而你的手機是外部通訊方式,內部當然 比外部快,損耗少;
嵌入式系統——凡是預留了接收主系統信息的缺口,并獨立處理所有輸入邏輯之后返回輸出結果的獨立系統都被稱為嵌入式系統;
- 嵌入式系統必須從屬于某一個主系統,能夠接收主系統提供的各項服務
Service 服務
概念:
一個能長時間接收外部請求,并根據外部請求的具體要求(傳入參數),在完成所有的處理環節之后,反饋給請求者的角色就是一個服務,他有幾個特點:
- 能服務的人 1 個或者多個,現實中的政務大廳都是能同時服務多個的,所以程序中的服務也應定位成能同時服務多個用戶的程序
- 有自己的排隊系統,超出服務的承載量之后,就要有排隊系統,同時也會有彈性窗口的能力,例如平時工作日銀行窗口只有 1 個,到了周六日就會有 5 個窗口同時辦理業務,同時還有人在外邊排隊
這樣的過程就叫做服務器。
嵌入式服務
- 有很多業務比如押運,蓋章,快遞,以及貸款環節,并非接待員能搞完的,那么接待員就會找這些服務來協助自己處理問題,他們之間仍然存在交接環節,接待員會給貸款員一些客戶信息,同時提供給貸款員一些權限,以節省貸款員與接待員的溝通成本,此時貸款員就成了嵌入式的服務,貸款員有多個,個人貸,企業貸,消費貸,房貸,不同貸款人都有不同的人承擔,而接待員的交接方式都是相同的。
這里的貸款員就是 Java Web 中最原始的 Servlet,Servlet 名字組合就是 server
applet,服務的小程序,它的確是一個大服務的小程序,只處理一部分功能,例如,/good/234 就是獲取
ID=234商品信息,這就是一個 servlet,如果你將一堆這種 servlet 整合到一起,就成了一個 war 包 “servlet”
則是一個計算機科學的術語,用于描述一種特定類型的服務器端程序。“servlet” 這個詞是由 Sun Microsystems
提出的,它是由 “server”(服務器)和 “applet”(小應用程序)兩個詞合并而來。在 Java 編程中,“servlet”
通常指的是運行在 Servlet 容器中的 Java 類,用于處理來自客戶端的請求并生成響應。Servlet 通常用于構建動態的 Web
應用程序。
- 再回到銀行接待員和貸款員的角度來看,每個貸款員都要把自己的身份信息注冊到銀行里,接待員會去查找和翻看貸款員的信息是否匹配,匹配之后,將這個用戶的信息交付給他具體的貸款員,這里就是 WEB-INF/web.xml中記錄的手冊了,該手冊里記錄著/good/234這個鏈接請找某某 Servlet
總結,最初結識 Java 的那批人,上來接觸的是接待員這個概念,因此就會讓自己一頭霧水,同理一個貸款員也不知道整個公司的運作機理,他也只是死死地記住要先把自己的電話號碼,職責填表,再與接待員對接時,要獲取一些額外數據,同時還要理解這些數據以后怎么用,處理完畢之后,把所有的文件再遞交給接待員,之后貸款員就不知道發生了什么了。
JSP
Web網頁就是拼接一個 HTML 返回給前端,前端獲得 HTML 進行解析運行,在沒有 JSP 的時候,就使用 Servlet 的拼接字符串的方式進行拼接,這個過程耗時耗力,極其低效。后來采用JSP 模板的方式。
可以將其類比于默寫題和填空題,默寫題要自己全部拼接,填空題只需要按照要求,將局部答案填進去就行。所以開發效率就變高了。
前后端分離之后,后端輸出 HTML的概念就變少了,這個功能也就退出了歷史舞臺。
Tomcat 數據庫連接池
數據庫連接池打破了嵌入式獨立系統的規則
Tomcat 的數據庫連接池實際上是一個由 Tomcat 提供的模塊,它可以管理數據庫連接以提高性能,并允許 Web 應用程序從連接池中獲取數據庫連接,從而避免頻繁地創建和銷毀連接。在這個場景下:
嵌入式系統: 您的 Web 應用程序(例如一個基于 Java 的 Web 應用)可以被視為一個嵌入式系統,它在 Tomcat 這個更大的容器中運行。
數據庫連接池: Tomcat 的數據庫連接池是一個獨立的組件,它由 Tomcat 管理,負責管理數據庫連接,提供連接重用、連接池大小限制、連接的創建和釋放等功能。
獨立性破壞: 是的,您提到的是一個例子,連接池的引入確實打破了 Web 應用程序的絕對獨立性。Web 應用程序需要依賴于 Tomcat 提供的連接池,而不是直接在應用程序代碼中創建和管理數據庫連接。這使得應用程序在連接數據庫時與外部組件進行了交互。
好處: 雖然連接池引入了外部依賴,但它提供了性能優勢和資源管理,可以更有效地管理數據庫連接。這可以避免頻繁創建和關閉數據庫連接,提高了應用程序的性能和擴展性。
總之,Tomcat 的數據庫連接池是一個嵌入式系統中的嵌入式組件,它在 Web 應用程序中被使用,但它確實打破了應用程序的絕對獨立性,以實現性能和資源管理的好處。這是一個常見的權衡,通過外部的組件來提供特定功能,以獲得更好的整體性能。
SpringBoot 如何處理的?
SpringBoot 做了一次大整合,將 tomcat 和嵌入式 servlet 整合到了一起,這樣可同時操作服務分發層和 servlet 邏輯處理層兩套邏輯,可操作的方向變多了。