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