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