中間件的過去、現(xiàn)在和未來
在計(jì)算機(jī)科學(xué)中,系統(tǒng)通常分為兩類:軟件和硬件。但是,中間還有一個(gè)附加層,稱為中間件,它是一個(gè)軟件“管道”,是操作系統(tǒng)和最終用戶之間的操作、進(jìn)程或應(yīng)用程序。本文旨在定義中間件并反思其必要性,并解決關(guān)于何時(shí)何地應(yīng)用的爭(zhēng)議。它還探討了中間件在云計(jì)算和 IoT(物聯(lián)網(wǎng))等新興技術(shù)中的應(yīng)用,以及未來中間件的發(fā)展。
該術(shù)語是在 1980 年代初期引入的。它包含復(fù)雜的軟件解決方案,通過軟件和應(yīng)用程序組件等新功能對(duì)遺留系統(tǒng)(通常是大型機(jī))進(jìn)行現(xiàn)代化改造。最初,它僅用于擴(kuò)展分離網(wǎng)絡(luò)層和應(yīng)用層的中間層。隨后,它的用途擴(kuò)大到作為操作系統(tǒng)和網(wǎng)絡(luò)層之上,應(yīng)用層之下的層。這意味著中間件現(xiàn)在可以促進(jìn)應(yīng)用程序組件和分布式網(wǎng)絡(luò)之間的常規(guī)通信。
通過中間件,程序員可以選擇實(shí)施松耦合的解決方案,而不必交互和分析不同的組件。
在最近的文獻(xiàn)3,12,14,16根據(jù)研究領(lǐng)域,使用了多種定義。一方面,軟件和 DevOps 工程師都將中間件描述為通過不同系統(tǒng)組件將軟件“粘合”在一起的層;另一方面,網(wǎng)絡(luò)工程師會(huì)說中間件是網(wǎng)絡(luò)連接的容錯(cuò)和錯(cuò)誤檢查集成。換句話說,他們會(huì)將中間件定義為通信管理軟件。與此同時(shí),數(shù)據(jù)工程師將中間件視為一種技術(shù),負(fù)責(zé)協(xié)調(diào)、觸發(fā)和編排動(dòng)作,以處理和發(fā)布來自各種來源的數(shù)據(jù),利用大數(shù)據(jù)和 IoT(物聯(lián)網(wǎng))。鑒于中間件沒有統(tǒng)一的定義,最好采用特定領(lǐng)域的方式。
中間件主要分類
交易。處理多個(gè)同步/異步交易,充當(dāng)來自分布式系統(tǒng)(如銀行交易或信用卡支付)的關(guān)聯(lián)請(qǐng)求的粘合層。
- 面向消息。消息隊(duì)列和消息傳遞架構(gòu),支持同步/異步通信。第一個(gè)操作基于使用隊(duì)列來處理信息的原則,而第二個(gè)通常以發(fā)布/訂閱模式操作,通過中間代理促進(jìn)通信。
- 程序。用于連接、傳遞和檢索異步通信(例如調(diào)用操作)的軟件響應(yīng)的遠(yuǎn)程和本地架構(gòu)。具體來說,第一種架構(gòu)調(diào)用網(wǎng)絡(luò)中另一臺(tái)計(jì)算機(jī)的預(yù)定服務(wù),而第二種架構(gòu)僅與本地軟件組件交互。
- 面向?qū)ο?。與過程中間件類似,這種類型的中間件結(jié)合了面向?qū)ο蟮木幊淘O(shè)計(jì)原則。從分析上講,它的軟件組件包括對(duì)象引用、異常和通過分布式對(duì)象請(qǐng)求的屬性繼承。它通常同步使用,因?yàn)樗枰獜姆?wù)器對(duì)象接收響應(yīng)來處理客戶端操作。重要的是,這種類型的中間件還可以通過使用(多)線程和通常的并發(fā)編程來支持異步通信。
學(xué)術(shù)界根據(jù)其服務(wù)的應(yīng)用程序模塊進(jìn)一步隔離了中間件,例如數(shù)據(jù)庫、Web 服務(wù)器等。中間件有幾種類型,分為以下關(guān)鍵類別:反射、代理、數(shù)據(jù)庫、嵌入式、門戶網(wǎng)站和設(shè)備(或機(jī)器人)。
- 首先,反射中間件構(gòu)成了專門設(shè)計(jì)用于“輕松與其他組件和應(yīng)用程序一起操作”的組件,而代理中間件具有多個(gè)組件,可以在復(fù)雜的特定領(lǐng)域語言和服務(wù)上運(yùn)行。
- 其次,數(shù)據(jù)庫中間件側(cè)重于 DB 到 DB 或 DB 到應(yīng)用程序的通信——無論是本地的還是通過 CLI(調(diào)用級(jí)接口)——而嵌入式中間件充當(dāng)嵌入式集成應(yīng)用程序和操作系統(tǒng)通信的中介。
- 第三,門戶中間件在復(fù)合的單體應(yīng)用程序中創(chuàng)建上下文管理工具,而設(shè)備(或機(jī)器人)中間件簡(jiǎn)化了特定設(shè)備操作系統(tǒng)或機(jī)器人硬件和固件的集成。
第一個(gè)分類更廣泛,強(qiáng)調(diào)架構(gòu)操作原則,而第二個(gè)分類是應(yīng)用程序驅(qū)動(dòng)的。出于這個(gè)原因,第一個(gè)隔離更可取,以準(zhǔn)確定義每個(gè)架構(gòu)集成的中間件,而不是其應(yīng)用程序?qū)傩?。所有類型的中間件如圖所示。

中間件的使用
在開發(fā)應(yīng)用程序時(shí),需要考慮的三個(gè)必要要素是可擴(kuò)展性、可維護(hù)和自動(dòng)化。首先,開發(fā)者避免橫向擴(kuò)展,這只是增加資源來擴(kuò)展主系統(tǒng)的能力。他們努力實(shí)現(xiàn)工作負(fù)載分區(qū)——在整個(gè)網(wǎng)絡(luò)上優(yōu)化分配作業(yè)調(diào)度。至于維護(hù),關(guān)注點(diǎn)分離原則對(duì)于開發(fā)人員來說非常重要,既要使每個(gè)實(shí)體可重用(模塊化),又要捆綁其屬性(封裝)。(典型的模塊化示例包括 Linux 內(nèi)核,因?yàn)榇a庫可以更改添加/刪除,以及可以多次使用不同元素來構(gòu)建系統(tǒng)的樂高積木。)此外,開發(fā)人員專注于自動(dòng)化操作以減少錯(cuò)誤并提供 24/7 可用的應(yīng)用程序。
中間件可以充當(dāng)促進(jìn)者,以實(shí)現(xiàn)可擴(kuò)展性、可維護(hù)和自動(dòng)化。具體來說,它添加了一個(gè)層,將復(fù)雜系統(tǒng)簡(jiǎn)化為小型集成,允許它們與分布式資源網(wǎng)絡(luò)相關(guān)聯(lián)。這意味著中間件在軟件開發(fā)過程中提供了敏捷性,同時(shí)縮短了整個(gè)軟件周期的時(shí)間;它還為開發(fā)人員提供了更容易的未來擴(kuò)展點(diǎn)。
此外,中間件可以通過結(jié)合“快速失敗,快速成功”的原則來支持快速原型設(shè)計(jì)。它允許開發(fā)人員立即應(yīng)用、采用和評(píng)估業(yè)務(wù)變更。中間件還可以降低項(xiàng)目成本,促進(jìn)創(chuàng)業(yè)創(chuàng)新。
中間件的能力
在 Internet 的廣泛使用和高速連接的適應(yīng)之前,大多數(shù)應(yīng)用程序都是作為單層、獨(dú)立的軟件解決方案開發(fā)的。該軟件是“單一的”,旨在服務(wù)于特定的目的和活動(dòng),因此并非旨在與其他應(yīng)用程序和軟件組件連接和交互。單層軟件需要一個(gè)復(fù)雜的中間件解決方案來與不同的模塊(例如客戶端/服務(wù)器)共享信息,或者傳遞來自主機(jī)/資源管理軟件的請(qǐng)求。
在互聯(lián)網(wǎng)徹底改變了開發(fā)人員的操作方式之后,越來越多的交易由連接到大型分布式計(jì)算機(jī)網(wǎng)絡(luò)(也稱為物聯(lián)網(wǎng))的多個(gè)計(jì)算設(shè)備驅(qū)動(dòng)。分布式計(jì)算引入了 SOA(面向服務(wù)的架構(gòu))而不是單體應(yīng)用程序。具體來說,SOA 由實(shí)現(xiàn)實(shí)體和服務(wù)分離的多層軟件解決方案組成,從而將每個(gè)組件分解為微服務(wù)。這是通過降低系統(tǒng)的復(fù)雜性并進(jìn)一步增加其模塊化來實(shí)現(xiàn)的。在這種情況下,中間件將每個(gè)實(shí)體視為唯一且自治的。因此,未來的修改是針對(duì)特定服務(wù)(模塊)而不是針對(duì)整個(gè)系統(tǒng)的組件。
中間件是一種將單個(gè)應(yīng)用程序開發(fā)為一組小型服務(wù)的方法,每個(gè)服務(wù)都在自己的進(jìn)程中運(yùn)行并與輕量級(jí)機(jī)制進(jìn)行通信,通常是 HTTP RestfulAPI。
中間件與 API(應(yīng)用協(xié)議接口)緊密相連,充當(dāng)程序員使用的不同 API 的層或軟件包。這意味著中間件可以簡(jiǎn)化復(fù)雜的應(yīng)用程序,使開發(fā)人員不僅關(guān)注組件的通信,還關(guān)注業(yè)務(wù)邏輯和系統(tǒng)交互。這是物聯(lián)網(wǎng)時(shí)代的一個(gè)重要方面,因?yàn)?API 是連接設(shè)備和無誤發(fā)送信息的主要網(wǎng)關(guān)。
物聯(lián)網(wǎng)中間件
物聯(lián)網(wǎng)這個(gè)術(shù)語描述了一個(gè)大型互連設(shè)備網(wǎng)絡(luò),這些設(shè)備收集由多個(gè)智能傳感設(shè)備融合的實(shí)時(shí)數(shù)據(jù)。為實(shí)現(xiàn)這一目標(biāo),電子設(shè)備(手機(jī)/平板電腦/計(jì)算機(jī))將數(shù)據(jù)發(fā)送到托管在云或邊緣計(jì)算基礎(chǔ)設(shè)施中的外部服務(wù)。最近的研究集中在開發(fā)一個(gè)物聯(lián)網(wǎng)網(wǎng)絡(luò),該網(wǎng)絡(luò)不僅可以與周圍環(huán)境交互,而且可以自主行動(dòng)而無需用戶干預(yù)。在此范圍內(nèi),物聯(lián)網(wǎng)將普適/無處不在的計(jì)算視為計(jì)算應(yīng)用的未來。計(jì)算機(jī)不再與單個(gè)設(shè)備或設(shè)備網(wǎng)絡(luò)相關(guān)聯(lián)。普適計(jì)算被定義為“源自數(shù)字世界的全部情景服務(wù),通過物理世界感知。
此外,開發(fā)物聯(lián)網(wǎng)應(yīng)用程序的架構(gòu)原則包括對(duì)安全性、能耗和監(jiān)控、可靠性、可解釋性和通信的審查。如前所述,中間件為所有這些功能提供了一個(gè)抽象層。根據(jù)其軟件許可,它可以分為企業(yè)維護(hù)、開源或設(shè)備特定(用于微型計(jì)算機(jī)/執(zhí)行器,如 Raspberry Pi 或 Arduino)。
下圖描繪了物聯(lián)網(wǎng)中間件通常如何根據(jù)以下關(guān)注點(diǎn)分離處理其操作:
- 硬件層(也稱為邊緣層)包括所有傳感設(shè)備,以及它們?cè)谄渲羞\(yùn)行的傳感器網(wǎng)絡(luò)。該層負(fù)責(zé)收集和處理可用數(shù)據(jù)。
- 操作系統(tǒng)層(即訪問網(wǎng)關(guān)層)執(zhí)行必要的數(shù)據(jù)轉(zhuǎn)換操作,以便相應(yīng)地提取和加載信息。
- 網(wǎng)絡(luò)層(即互聯(lián)網(wǎng)層)側(cè)重于通過保護(hù)連續(xù)、安全和無中斷的通信流將數(shù)據(jù)發(fā)送到下一層。
- 中間件層處理消息通信協(xié)議和服務(wù)。具體來說,該層除了為應(yīng)用程序提供訪問協(xié)議外,還檢查系統(tǒng)的操作和數(shù)據(jù)傳輸故障。
- 最后,應(yīng)用層單獨(dú)負(fù)責(zé)向最終用戶提供服務(wù)(通常通過API),通過向各種應(yīng)用程序端點(diǎn)(例如,不同的開發(fā)人員和部門)廣播服務(wù)。

對(duì)有關(guān) IoT 中間件的一些最有前途的開源項(xiàng)目的回顧突出了以下幾點(diǎn):用于云中傳感器系統(tǒng)的 OpenIoT;FIWARE 用于轉(zhuǎn)換設(shè)備之間的通信協(xié)議;LinkSmart(以前稱為 Hydra),用于數(shù)據(jù)存儲(chǔ)和機(jī)器學(xué)習(xí)的快速部署和高可擴(kuò)展性;DeviceHive 用于物聯(lián)網(wǎng)關(guān)于通信、控制和管理的自動(dòng)化層抽象;和 ThingSpeak 用于有關(guān)智能應(yīng)用的工業(yè)物聯(lián)網(wǎng)框架。
同樣,IBM、AWS(亞馬遜網(wǎng)絡(luò)服務(wù))、微軟 Azure、谷歌和甲骨文也開發(fā)了企業(yè)中間件?;谕怀鲲@示的項(xiàng)目,一些中間件框架專注于自動(dòng)化特定任務(wù)或核心業(yè)務(wù)活動(dòng)流程。
未來:云容器和微服務(wù)
雖然開發(fā)人員使用虛擬化(將資源分層到基礎(chǔ)設(shè)施中)、管理程序(操作系統(tǒng)的解釋器)、客戶操作系統(tǒng)(具有自己的內(nèi)核)和應(yīng)用程序,但中間件促進(jìn)了在單一多用途環(huán)境中的分散部署。隨著容器的指數(shù)級(jí)增長(zhǎng),這一點(diǎn)變得很明顯——軟件環(huán)境可以通過同一服務(wù)器(主機(jī))在隔離環(huán)境(也稱為沙箱)中快速輕松地多次部署. 就像 Java 的座右銘“一次編寫,隨處運(yùn)行”一樣,容器是一個(gè)獨(dú)立的軟件環(huán)境,具有獨(dú)特的代碼、庫、運(yùn)行時(shí)和依賴項(xiàng)。中間件層也從虛擬化轉(zhuǎn)移到容器化,目的是為了優(yōu)化通信和抽象通信協(xié)議以開發(fā)軟件管道。
從開發(fā)人員的角度來看,轉(zhuǎn)向云計(jì)算解決方案意味著需要更少的編碼,因?yàn)樵苹A(chǔ)架構(gòu)中的大部分工作都是在“幕后”執(zhí)行的。換句話說,以前由本地中間層處理的分布式編程和企業(yè)開發(fā)的幾個(gè)方面現(xiàn)在可以遠(yuǎn)程處理。更具體地說,要解決的常見問題包括擴(kuò)展、彈性可觀察性、資源管理以及持續(xù)集成和交付。這意味著企業(yè)將限制中間件開發(fā)人員的數(shù)量,他們將專注于架構(gòu)和應(yīng)用程序開發(fā),而不是部署。
結(jié)論
中間件可用于軟件周期的多個(gè)階段——從架構(gòu)和開發(fā)到部署。對(duì)企業(yè)數(shù)字化轉(zhuǎn)型(從單體到微服務(wù)實(shí)施)的永久需求,這些表明中間件將繼續(xù)存在。無論是將復(fù)雜的軟件組件分離成更小的服務(wù),在計(jì)算機(jī)之間傳輸數(shù)據(jù),還是創(chuàng)建通用網(wǎng)關(guān)以實(shí)現(xiàn)無縫通信,您都可以依靠中間件來實(shí)現(xiàn)不同設(shè)備、應(yīng)用程序和軟件層之間的通信。此外,有必要對(duì)新開發(fā)人員進(jìn)行中間件教育,并通過現(xiàn)代教育技術(shù)和學(xué)習(xí)系統(tǒng)強(qiáng)調(diào)其重要性。
隨著越來越多的敏捷運(yùn)動(dòng),科技行業(yè)采用了快速瀑布模型來為每個(gè)結(jié)構(gòu)需求創(chuàng)建層堆棧,包括集成、通信、數(shù)據(jù)和安全性。鑒于此范圍,研究云或數(shù)據(jù)服務(wù)的潛在擴(kuò)展不再重要?,F(xiàn)在必須強(qiáng)調(diào)端點(diǎn)連接和敏捷開發(fā)。
這意味著中間件不應(yīng)該僅僅作為一個(gè)面向?qū)ο蟮慕鉀Q方案來執(zhí)行簡(jiǎn)單的請(qǐng)求-響應(yīng)命令。中間件可以通過結(jié)合微服務(wù)架構(gòu)來通過多個(gè)網(wǎng)關(guān)整合推拉事件和數(shù)據(jù)流,以開發(fā)一個(gè)整體的去中心化生態(tài)系統(tǒng)。


























