中間件是什么?C/S、B/S、中間件淺易講解
先拋出個經濟學觀點:社會的發展導致了社會分工,分工的結果是進一步提高了技術生產能力。--《資本論》第一章
隨著技術系統的規模發展得足夠復雜,導致了開發團隊無法親力親為參與每個技術系統的全部建設,如果每次承接同類業務開發都從零開始對接,那么將大大增加研發成本。 這就導致了社會分工,有人把工程開發中基礎的、底層的、共用的服務和邏輯包裝成中間件,你只管使用就夠了。簡單理解:中間件就是將具體業務和底層邏輯解耦的組件。
給個比喻:中間件,就是所謂的中介,畢竟業務繁雜到一定程度后,干什么都需要中介。
讓我們坐好板凳,回憶一下那些沒有中間件的那些日子,除了最簡單的不需要任何服務的單機版程序,一種較為樸實的技術系統設計架構叫做C/S架構。
一、C/S架構(客戶端/服務器架構)
C/S架構,即Client客戶端/Server服務器架構,是一種分布式應用模式,最簡單的系統功能分為兩層:客戶端和服務器端。
如下圖,最簡單的技術系統分為兩層結構,在實際部署中就是一臺服務器和一臺或者若干臺終端。終端就是客戶端,需要安裝客戶端程序(比如.exe、.apk等應用程序),服務器上安裝數據庫系統,提供數據庫存儲服務。這種架構叫做兩層結構。客戶端負責用戶界面和業務邏輯,服務器端負責數據存儲和處理。
多客戶端的話,C/S架構需要在每個客戶端安裝專用的軟件。
當業務發展得稍微復雜了,客戶端上的業務邏輯很復雜,我們為了讓客戶端瘦下來(不瘦下來的話,軟件開發人員無法合理分工高效開發,另外對客戶端配置要求也越來越高),這個時候,我們增加了一個應用服務中間層,我們在這臺服務器上實現了應用服務。這就形成了三層結構。如上圖所示。三層結構通常是指將整個業務應用劃分為:表現層(客戶端呈現)、業務邏輯層(應用服務關聯)、數據訪問層(數據庫服務關聯)。
三層結構在應用服務這個中間層慢慢發展,慢慢催生形成了一些中間件開發框架,也在某種意義上推動了C/S向B/S的轉變。
二、B/S架構(瀏覽器/服務器架構)
因為C/S架構要求在每個客戶端安裝程序,在用戶使用方面是個阻礙。 由于瀏覽器的通用性,所以,很多技術系統都轉變成了B/S架構。B即Browser,指的是Web瀏覽器,極少數事務邏輯在前端實現,但主要事務邏輯在服務器端實現。B/S架構的系統無須特別安裝,只要有Web瀏覽器即可。很多時候真是瀏覽器在手,天下我有。B/S架構,就是瀏覽器/服務器架構,簡稱“鄙視”架構,誰用誰知道,用了都說好。
B/S架構是典型的三層結構,即表現層、業務邏輯層、數據訪問層。客戶端使用應用服務的流程如下:
1 客戶端輸入鏈接,向web服務器發起HTTP請求(或者HTTPS)。
2 web服務能夠處理HTTP請求,并且調用應用服務器的暴露接口。
3 應用服務器的接口被web服務器調用,會執行對應的暴露方法。如果有必要和數據庫進行數據交互,應用服務器會和數據庫進行交互后,將json數據返回給web服務器。
4 web服務器將html前臺模板+數據組合渲染成html返回給客戶端。
5 客戶端瀏覽器呈現html效果。
具體的web實際應用部署中,我們經常會見到以下兩種簡單架構。
(1) 單體架構
這個B/S架構下,數據庫和web應用都安裝在同一個服務器。
(2) 應用與數據庫分離架構
這個B/S架構下,web應用和數據庫單獨分開安裝在不同服務器。
單體架構、分離架構的區別其實就是為了緩解應用服務和數據服務捆在一起的壓力,讓凱撒的歸凱撒,上帝的歸上帝,各自分開負責應用和數據。其他復雜的一些架構,比如使用負載均衡、緩存抗量、多應用部署和Nginx反向代理、 數據庫讀寫分離、應用分組部署等架構,主要是為了承受大規模的用戶訪問和高并發服務。比如12306網站,肯定采用了較為復雜的設計架構。
三、 C/S、B/S、中間件的關聯
B/S是隨著瀏覽器的更普遍應用興起的的技術系統設計,在這種架構下,在web和應用服務這個中間層,它至少需要提供兩個功能。
(1)web基礎交互功能(與瀏覽器交互的用于處理HTTP請求和響應功能)
這塊功能是工程開發中基礎的、底層的、共用的服務。所以web基礎交互方面已經發展了一些成熟的Web服務器中間件,如Nginx、Apache、IIS 等中間件。
(2)具體業務對應的業務邏輯功能(比如政府采購網站,需要登錄注冊還有貨品展示、下單等功能)
這部分我們常稱之為應用服務,是開發過程中個性化開發的部分,開發好了,我們將編譯后的應用服務代碼部署在web應用服務器,然后再安裝配置Web服務器中間件,網站就可以進行訪問使用了。
四、其他
中間件還有很多其他方面的應用。web服務器中間件只是其中一種。
常見的中間件分類包括:
1. 消息隊列中間件:用于在應用程序之間進行異步消息傳遞。消息隊列中間件包括RabbitMQ、Apache Kafka、ActiveMQ等。
2. 數據庫中間件:用于管理和訪問數據庫。數據庫中間件包括MySQL Proxy、PostgreSQL PgBouncer等。
3. 緩存中間件:用于加速數據訪問,減輕數據庫負載。緩存中間件包括Redis、Memcached等。
4. Web服務器中間件:用于處理HTTP請求和響應。常見的Web服務器中間件包括Nginx、Apache等。
5. 應用服務器中間件:用于托管和管理應用程序的執行環境。它們通常用于Java EE和其他應用程序開發技術中。常見的應用服務器中間件包括Tomcat、Jboss等。
6、其他中間件。
睿智創新.RAIZ
致力于信息技術與開發應用的,一體化IT服務提供商
運維外包 | 網站建設 | 軟件開發 | 系統集成
技術服務交流,優秀案例分享,歡迎關注私信