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