中間件的過去、現(xiàn)在和未來
在計算機科學中,系統(tǒng)通常分為兩類:軟件和硬件。但是,中間還有一個附加層,稱為中間件,它是一個軟件“管道”,是操作系統(tǒng)和最終用戶之間的操作、進程或應用程序。本文旨在定義中間件并反思其必要性,并解決關(guān)于何時何地應用的爭議。它還探討了中間件在云計算和 IoT(物聯(lián)網(wǎng))等新興技術(shù)中的應用,以及未來中間件的發(fā)展。
該術(shù)語是在 1980 年代初期引入的。它包含復雜的軟件解決方案,通過軟件和應用程序組件等新功能對遺留系統(tǒng)(通常是大型機)進行現(xiàn)代化改造。最初,它僅用于擴展分離網(wǎng)絡層和應用層的中間層。隨后,它的用途擴大到作為操作系統(tǒng)和網(wǎng)絡層之上,應用層之下的層。這意味著中間件現(xiàn)在可以促進應用程序組件和分布式網(wǎng)絡之間的常規(guī)通信。
通過中間件,程序員可以選擇實施松耦合的解決方案,而不必交互和分析不同的組件。
在最近的文獻3,12,14,16根據(jù)研究領(lǐng)域,使用了多種定義。一方面,軟件和 DevOps 工程師都將中間件描述為通過不同系統(tǒng)組件將軟件“粘合”在一起的層;另一方面,網(wǎng)絡工程師會說中間件是網(wǎng)絡連接的容錯和錯誤檢查集成。換句話說,他們會將中間件定義為通信管理軟件。與此同時,數(shù)據(jù)工程師將中間件視為一種技術(shù),負責協(xié)調(diào)、觸發(fā)和編排動作,以處理和發(fā)布來自各種來源的數(shù)據(jù),利用大數(shù)據(jù)和 IoT(物聯(lián)網(wǎng))。鑒于中間件沒有統(tǒng)一的定義,最好采用特定領(lǐng)域的方式。
中間件主要分類
交易。處理多個同步/異步交易,充當來自分布式系統(tǒng)(如銀行交易或信用卡支付)的關(guān)聯(lián)請求的粘合層。
- 面向消息。消息隊列和消息傳遞架構(gòu),支持同步/異步通信。第一個操作基于使用隊列來處理信息的原則,而第二個通常以發(fā)布/訂閱模式操作,通過中間代理促進通信。
- 程序。用于連接、傳遞和檢索異步通信(例如調(diào)用操作)的軟件響應的遠程和本地架構(gòu)。具體來說,第一種架構(gòu)調(diào)用網(wǎng)絡中另一臺計算機的預定服務,而第二種架構(gòu)僅與本地軟件組件交互。
- 面向?qū)ο?。與過程中間件類似,這種類型的中間件結(jié)合了面向?qū)ο蟮木幊淘O計原則。從分析上講,它的軟件組件包括對象引用、異常和通過分布式對象請求的屬性繼承。它通常同步使用,因為它需要從服務器對象接收響應來處理客戶端操作。重要的是,這種類型的中間件還可以通過使用(多)線程和通常的并發(fā)編程來支持異步通信。
學術(shù)界根據(jù)其服務的應用程序模塊進一步隔離了中間件,例如數(shù)據(jù)庫、Web 服務器等。中間件有幾種類型,分為以下關(guān)鍵類別:反射、代理、數(shù)據(jù)庫、嵌入式、門戶網(wǎng)站和設備(或機器人)。
- 首先,反射中間件構(gòu)成了專門設計用于“輕松與其他組件和應用程序一起操作”的組件,而代理中間件具有多個組件,可以在復雜的特定領(lǐng)域語言和服務上運行。
- 其次,數(shù)據(jù)庫中間件側(cè)重于 DB 到 DB 或 DB 到應用程序的通信——無論是本地的還是通過 CLI(調(diào)用級接口)——而嵌入式中間件充當嵌入式集成應用程序和操作系統(tǒng)通信的中介。
- 第三,門戶中間件在復合的單體應用程序中創(chuàng)建上下文管理工具,而設備(或機器人)中間件簡化了特定設備操作系統(tǒng)或機器人硬件和固件的集成。
第一個分類更廣泛,強調(diào)架構(gòu)操作原則,而第二個分類是應用程序驅(qū)動的。出于這個原因,第一個隔離更可取,以準確定義每個架構(gòu)集成的中間件,而不是其應用程序?qū)傩?。所有類型的中間件如圖所示。
中間件的使用
在開發(fā)應用程序時,需要考慮的三個必要要素是可擴展性、可維護和自動化。首先,開發(fā)者避免橫向擴展,這只是增加資源來擴展主系統(tǒng)的能力。他們努力實現(xiàn)工作負載分區(qū)——在整個網(wǎng)絡上優(yōu)化分配作業(yè)調(diào)度。至于維護,關(guān)注點分離原則對于開發(fā)人員來說非常重要,既要使每個實體可重用(模塊化),又要捆綁其屬性(封裝)。(典型的模塊化示例包括 Linux 內(nèi)核,因為代碼庫可以更改添加/刪除,以及可以多次使用不同元素來構(gòu)建系統(tǒng)的樂高積木。)此外,開發(fā)人員專注于自動化操作以減少錯誤并提供 24/7 可用的應用程序。
中間件可以充當促進者,以實現(xiàn)可擴展性、可維護和自動化。具體來說,它添加了一個層,將復雜系統(tǒng)簡化為小型集成,允許它們與分布式資源網(wǎng)絡相關(guān)聯(lián)。這意味著中間件在軟件開發(fā)過程中提供了敏捷性,同時縮短了整個軟件周期的時間;它還為開發(fā)人員提供了更容易的未來擴展點。
此外,中間件可以通過結(jié)合“快速失敗,快速成功”的原則來支持快速原型設計。它允許開發(fā)人員立即應用、采用和評估業(yè)務變更。中間件還可以降低項目成本,促進創(chuàng)業(yè)創(chuàng)新。
中間件的能力
在 Internet 的廣泛使用和高速連接的適應之前,大多數(shù)應用程序都是作為單層、獨立的軟件解決方案開發(fā)的。該軟件是“單一的”,旨在服務于特定的目的和活動,因此并非旨在與其他應用程序和軟件組件連接和交互。單層軟件需要一個復雜的中間件解決方案來與不同的模塊(例如客戶端/服務器)共享信息,或者傳遞來自主機/資源管理軟件的請求。
在互聯(lián)網(wǎng)徹底改變了開發(fā)人員的操作方式之后,越來越多的交易由連接到大型分布式計算機網(wǎng)絡(也稱為物聯(lián)網(wǎng))的多個計算設備驅(qū)動。分布式計算引入了 SOA(面向服務的架構(gòu))而不是單體應用程序。具體來說,SOA 由實現(xiàn)實體和服務分離的多層軟件解決方案組成,從而將每個組件分解為微服務。這是通過降低系統(tǒng)的復雜性并進一步增加其模塊化來實現(xiàn)的。在這種情況下,中間件將每個實體視為唯一且自治的。因此,未來的修改是針對特定服務(模塊)而不是針對整個系統(tǒng)的組件。
中間件是一種將單個應用程序開發(fā)為一組小型服務的方法,每個服務都在自己的進程中運行并與輕量級機制進行通信,通常是 HTTP RestfulAPI。
中間件與 API(應用協(xié)議接口)緊密相連,充當程序員使用的不同 API 的層或軟件包。這意味著中間件可以簡化復雜的應用程序,使開發(fā)人員不僅關(guān)注組件的通信,還關(guān)注業(yè)務邏輯和系統(tǒng)交互。這是物聯(lián)網(wǎng)時代的一個重要方面,因為 API 是連接設備和無誤發(fā)送信息的主要網(wǎng)關(guān)。
物聯(lián)網(wǎng)中間件
物聯(lián)網(wǎng)這個術(shù)語描述了一個大型互連設備網(wǎng)絡,這些設備收集由多個智能傳感設備融合的實時數(shù)據(jù)。為實現(xiàn)這一目標,電子設備(手機/平板電腦/計算機)將數(shù)據(jù)發(fā)送到托管在云或邊緣計算基礎(chǔ)設施中的外部服務。最近的研究集中在開發(fā)一個物聯(lián)網(wǎng)網(wǎng)絡,該網(wǎng)絡不僅可以與周圍環(huán)境交互,而且可以自主行動而無需用戶干預。在此范圍內(nèi),物聯(lián)網(wǎng)將普適/無處不在的計算視為計算應用的未來。計算機不再與單個設備或設備網(wǎng)絡相關(guān)聯(lián)。普適計算被定義為“源自數(shù)字世界的全部情景服務,通過物理世界感知。
此外,開發(fā)物聯(lián)網(wǎng)應用程序的架構(gòu)原則包括對安全性、能耗和監(jiān)控、可靠性、可解釋性和通信的審查。如前所述,中間件為所有這些功能提供了一個抽象層。根據(jù)其軟件許可,它可以分為企業(yè)維護、開源或設備特定(用于微型計算機/執(zhí)行器,如 Raspberry Pi 或 Arduino)。
下圖描繪了物聯(lián)網(wǎng)中間件通常如何根據(jù)以下關(guān)注點分離處理其操作:
- 硬件層(也稱為邊緣層)包括所有傳感設備,以及它們在其中運行的傳感器網(wǎng)絡。該層負責收集和處理可用數(shù)據(jù)。
- 操作系統(tǒng)層(即訪問網(wǎng)關(guān)層)執(zhí)行必要的數(shù)據(jù)轉(zhuǎn)換操作,以便相應地提取和加載信息。
- 網(wǎng)絡層(即互聯(lián)網(wǎng)層)側(cè)重于通過保護連續(xù)、安全和無中斷的通信流將數(shù)據(jù)發(fā)送到下一層。
- 中間件層處理消息通信協(xié)議和服務。具體來說,該層除了為應用程序提供訪問協(xié)議外,還檢查系統(tǒng)的操作和數(shù)據(jù)傳輸故障。
- 最后,應用層單獨負責向最終用戶提供服務(通常通過API),通過向各種應用程序端點(例如,不同的開發(fā)人員和部門)廣播服務。
對有關(guān) IoT 中間件的一些最有前途的開源項目的回顧突出了以下幾點:用于云中傳感器系統(tǒng)的 OpenIoT;FIWARE 用于轉(zhuǎn)換設備之間的通信協(xié)議;LinkSmart(以前稱為 Hydra),用于數(shù)據(jù)存儲和機器學習的快速部署和高可擴展性;DeviceHive 用于物聯(lián)網(wǎng)關(guān)于通信、控制和管理的自動化層抽象;和 ThingSpeak 用于有關(guān)智能應用的工業(yè)物聯(lián)網(wǎng)框架。
同樣,IBM、AWS(亞馬遜網(wǎng)絡服務)、微軟 Azure、谷歌和甲骨文也開發(fā)了企業(yè)中間件?;谕怀鲲@示的項目,一些中間件框架專注于自動化特定任務或核心業(yè)務活動流程。
未來:云容器和微服務
雖然開發(fā)人員使用虛擬化(將資源分層到基礎(chǔ)設施中)、管理程序(操作系統(tǒng)的解釋器)、客戶操作系統(tǒng)(具有自己的內(nèi)核)和應用程序,但中間件促進了在單一多用途環(huán)境中的分散部署。隨著容器的指數(shù)級增長,這一點變得很明顯——軟件環(huán)境可以通過同一服務器(主機)在隔離環(huán)境(也稱為沙箱)中快速輕松地多次部署. 就像 Java 的座右銘“一次編寫,隨處運行”一樣,容器是一個獨立的軟件環(huán)境,具有獨特的代碼、庫、運行時和依賴項。中間件層也從虛擬化轉(zhuǎn)移到容器化,目的是為了優(yōu)化通信和抽象通信協(xié)議以開發(fā)軟件管道。
從開發(fā)人員的角度來看,轉(zhuǎn)向云計算解決方案意味著需要更少的編碼,因為云基礎(chǔ)架構(gòu)中的大部分工作都是在“幕后”執(zhí)行的。換句話說,以前由本地中間層處理的分布式編程和企業(yè)開發(fā)的幾個方面現(xiàn)在可以遠程處理。更具體地說,要解決的常見問題包括擴展、彈性可觀察性、資源管理以及持續(xù)集成和交付。這意味著企業(yè)將限制中間件開發(fā)人員的數(shù)量,他們將專注于架構(gòu)和應用程序開發(fā),而不是部署。
結(jié)論
中間件可用于軟件周期的多個階段——從架構(gòu)和開發(fā)到部署。對企業(yè)數(shù)字化轉(zhuǎn)型(從單體到微服務實施)的永久需求,這些表明中間件將繼續(xù)存在。無論是將復雜的軟件組件分離成更小的服務,在計算機之間傳輸數(shù)據(jù),還是創(chuàng)建通用網(wǎng)關(guān)以實現(xiàn)無縫通信,您都可以依靠中間件來實現(xiàn)不同設備、應用程序和軟件層之間的通信。此外,有必要對新開發(fā)人員進行中間件教育,并通過現(xiàn)代教育技術(shù)和學習系統(tǒng)強調(diào)其重要性。
隨著越來越多的敏捷運動,科技行業(yè)采用了快速瀑布模型來為每個結(jié)構(gòu)需求創(chuàng)建層堆棧,包括集成、通信、數(shù)據(jù)和安全性。鑒于此范圍,研究云或數(shù)據(jù)服務的潛在擴展不再重要?,F(xiàn)在必須強調(diào)端點連接和敏捷開發(fā)。
這意味著中間件不應該僅僅作為一個面向?qū)ο蟮慕鉀Q方案來執(zhí)行簡單的請求-響應命令。中間件可以通過結(jié)合微服務架構(gòu)來通過多個網(wǎng)關(guān)整合推拉事件和數(shù)據(jù)流,以開發(fā)一個整體的去中心化生態(tài)系統(tǒng)。