一文讀懂中間件
在碼農(nóng)的日常工作中, 經(jīng)常會(huì)提到中間件,然而大家對(duì)中間件的理解并不一致,導(dǎo)致了一些不必要的分歧和誤解。“中間件”一詞被用來(lái)描述各種各樣的軟件產(chǎn)品,在不同文獻(xiàn)中有著許多不同的中間件定義,包括操作系統(tǒng)(和/或網(wǎng)絡(luò))和應(yīng)用程序之間的軟件層,以及兩個(gè)應(yīng)用程序之間的“粘合劑”。它也被描述為一種重要的集成工具,或支持與分布式軟件的模塊化連接。

那么——
中間件到底是什么?
中間件有哪些類型?
典型的應(yīng)用場(chǎng)景是什么?
中間件和XaaS 有什么異同?.
.....?
中間件已經(jīng)成為分布式計(jì)算的一個(gè)不可或缺的部分。如果不涉及中間件,實(shí)際上不可能構(gòu)建大規(guī)模的分布式應(yīng)用程序。相比之下,試圖構(gòu)建一個(gè)沒(méi)有中間件的分布式應(yīng)用程序就像試圖在沒(méi)有操作系統(tǒng)的個(gè)人計(jì)算機(jī)上編寫一個(gè)簡(jiǎn)單的應(yīng)用程序。隨著中間件的發(fā)展,它所提供的主要目標(biāo)、設(shè)計(jì)、體系結(jié)構(gòu)和特性也在不斷演變。溫故知新,本文希望能夠?qū)χ虚g件有一個(gè)系統(tǒng)的理解。
1. 什么是中間件
在計(jì)算機(jī)科學(xué)中,系統(tǒng)通常分為兩類: 軟件和硬件。然而,在這兩者之間還有一個(gè)額外的層,稱為中間件,它是一個(gè)軟件“管道”,一個(gè)操作、一個(gè)進(jìn)程或者一個(gè)在操作系統(tǒng)和最終用戶之間的應(yīng)用程序。這個(gè)術(shù)語(yǔ)是在20世紀(jì)80年代初引入的,當(dāng)時(shí)包含了復(fù)雜的軟件解決方案,通過(guò)軟件和應(yīng)用組件等新特性對(duì)遺留系統(tǒng)進(jìn)行現(xiàn)代化改造。最初,它僅用于擴(kuò)展網(wǎng)絡(luò)層和應(yīng)用程序?qū)印kS后,擴(kuò)展到作為操作系統(tǒng)和網(wǎng)絡(luò)層之上的一層,以及應(yīng)用層之下的一層。這意味著中間件現(xiàn)在可以促進(jìn)應(yīng)用程序組件和分布式網(wǎng)絡(luò)之間的通信。
CORBA 于1991年問(wèn)世,為應(yīng)用集成和數(shù)據(jù)接口問(wèn)題提供了一個(gè)很好的解決方案,從而產(chǎn)生了第一個(gè)具體的中間件定義。從那時(shí)起,中間件這個(gè)術(shù)語(yǔ)就與 CORBA 糾纏在一起,并且在接下來(lái)的許多年里,如果有人提到中間件,那么每個(gè)人都會(huì)自動(dòng)地認(rèn)為是 CORBA。然而,隨著時(shí)間的推移,出現(xiàn)了一些問(wèn)題和限制,CORBA 無(wú)法為所有類型的分布式應(yīng)用程序提供解決方案。此外,它對(duì)應(yīng)用程序施加了高開銷,這使得它不適用于網(wǎng)格、云、無(wú)線傳感器網(wǎng)絡(luò)和移動(dòng)應(yīng)用程序。因此,術(shù)語(yǔ)中間件開始擺脫與 CORBA 的關(guān)聯(lián),并開始覆蓋更廣泛的工具和服務(wù),以支持不同的分布式計(jì)算/服務(wù)需求。
中間件的一個(gè)可能定義是“中間件是幫助應(yīng)用程序與其他應(yīng)用程序、網(wǎng)絡(luò)、硬件和/或操作系統(tǒng)進(jìn)行交互或通信的軟件,提供了提高服務(wù)質(zhì)量(QoS)的工具”。該定義可能描述了目前可用的大多數(shù)中間件產(chǎn)品。2000年的一次IETF研討會(huì)將中間件定義為“在傳輸(即通過(guò)TCP/IP)層服務(wù)集之上,但在應(yīng)用程序環(huán)境之下的那些服務(wù)”(即在應(yīng)用程序級(jí)API之下)。在這個(gè)更具體的意義上,中間件可以被描述為客戶端—服務(wù)器中的“—”,包括web服務(wù)器、應(yīng)用服務(wù)器、內(nèi)容管理系統(tǒng)以及支持應(yīng)用程序開發(fā)和交付的類似工具。通過(guò)中間件,程序員可以選擇實(shí)現(xiàn)分布式的解決方案,而不必分析不同的組件在進(jìn)行交互,很有些外觀模式升級(jí)版的味道。
中間件是一種軟件,它在一個(gè)或多個(gè)應(yīng)用程序和其他應(yīng)用程序之間,或者在一個(gè)或多個(gè)應(yīng)用程序和基礎(chǔ)設(shè)施之間起著“粘合劑、中介、代理、中間人、解釋器、抽象提供者、合并者、集成者、促進(jìn)者或連接器”的作用。
在實(shí)際工作中,根據(jù)所在領(lǐng)域的不同,人們對(duì)中間件使用了不同的定義。例如,軟件工程師和 DevOps 工程師都將中間件描述為通過(guò)不同的系統(tǒng)組件“粘合”軟件的層,網(wǎng)絡(luò)工程師會(huì)說(shuō)中間件是網(wǎng)絡(luò)連接的容錯(cuò)和錯(cuò)誤檢查的集成,換句話說(shuō),將中間件定義為通信管理軟件。與此同時(shí),數(shù)據(jù)工程師將中間件視為負(fù)責(zé)協(xié)調(diào)、觸發(fā)、處理和發(fā)布來(lái)自各種來(lái)源的數(shù)據(jù)的技術(shù)。鑒于沒(méi)有統(tǒng)一的中間件定義,而溝通的前提是概念的統(tǒng)一,所以在談?wù)撝虚g件的時(shí)候最好限定于特定的領(lǐng)域分類。
2. 中間件的分類
對(duì)于中間件而言,一般可以從兩個(gè)視角進(jìn)行分類:架構(gòu)視角和應(yīng)用程序的視角。架構(gòu)視角適合于按照每個(gè)體系結(jié)構(gòu)的集成來(lái)精確定義中間件,而不是它的應(yīng)用程序?qū)傩浴?/p>
2.1 系統(tǒng)架構(gòu)視角
在系統(tǒng)架構(gòu)的視角,中間件以特定方式集成到其異構(gòu)系統(tǒng)環(huán)境中,每一類中間件在其他軟件之間都有不同的通信協(xié)議或操作方式。
2.1.1 面向過(guò)程的中間件
面向過(guò)程的中間件使用同步通信,特點(diǎn)是使用客戶端stub和服務(wù)器skeleton。客戶端stub將過(guò)程的參數(shù)轉(zhuǎn)換為消息,并將該消息發(fā)送到服務(wù)器。服務(wù)器skeleton將消息轉(zhuǎn)換回參數(shù),并將過(guò)程調(diào)用發(fā)送到處理它的服務(wù)器應(yīng)用程序。一旦執(zhí)行了該程序,就會(huì)發(fā)生相反的過(guò)程。客戶端stub還會(huì)檢查錯(cuò)誤,將結(jié)果發(fā)送到調(diào)用軟件,然后掛起線程。
這一類中間件的優(yōu)點(diǎn)是使用標(biāo)準(zhǔn)類型的名稱服務(wù),遠(yuǎn)程處理進(jìn)程,即使出現(xiàn)網(wǎng)絡(luò)問(wèn)題也能返回響應(yīng),支持異常,并且可以管理多種類型的數(shù)據(jù)格式和異構(gòu)的系統(tǒng)級(jí)服務(wù)。缺點(diǎn)是不可伸縮,因?yàn)樗话瑥?fù)制機(jī)制,不具有反射性,并且是一個(gè)非常嚴(yán)格的過(guò)程,與過(guò)程緊密耦合。
2.1.2 面向?qū)ο蟮闹虚g件
面向?qū)ο笾虚g件結(jié)合了面向?qū)ο蟪绦蛟O(shè)計(jì)/設(shè)計(jì)原則,支持分布式對(duì)象請(qǐng)求,使用線程策略,對(duì)象(客戶端對(duì)象和服務(wù)器對(duì)象)之間的通信可以是同步、延遲同步和異步的。對(duì)象中間件通過(guò)將來(lái)自多個(gè)客戶端對(duì)象的類似請(qǐng)求分組到一個(gè)事務(wù)中來(lái)支持多個(gè)事務(wù)。首先,中間件使用客戶端對(duì)象對(duì)遠(yuǎn)程對(duì)象進(jìn)行邏輯方法調(diào)用。本地ORB代理封裝數(shù)據(jù)并將其傳輸?shù)酱怼4砜梢月?lián)系多個(gè)數(shù)據(jù)源,獲取它們的參考ID,收集數(shù)據(jù),有時(shí)還可以重新組織數(shù)據(jù)。服務(wù)器對(duì)象從代理接收消息,遠(yuǎn)程代理解析數(shù)據(jù)。數(shù)據(jù)被提交到一個(gè)遠(yuǎn)程服務(wù)對(duì)象,在那里執(zhí)行特定的過(guò)程,返回的結(jié)果與上述相反。
這一類中間件的優(yōu)點(diǎn)包括對(duì)服務(wù)器對(duì)象的負(fù)載管理和可伸縮性的支持,并解決了面向過(guò)程中間件的缺點(diǎn)。它還可以對(duì)許多不同的數(shù)據(jù)類型、形式和狀態(tài)進(jìn)行操作,并且是分布式對(duì)象的自我管理器。缺點(diǎn)是要在執(zhí)行前預(yù)鏈接,以及對(duì)于一些遺留系統(tǒng)需要封裝代碼。
2.1.3 面向消息的中間件
面向消息的中間件可以細(xì)分為兩種類型——消息傳遞和消息發(fā)布/訂閱。在消息傳遞類型中,應(yīng)用程序使用客戶端發(fā)送消息(針對(duì)一個(gè)或多個(gè)客戶端),服務(wù)器以某種預(yù)定順序(FIFO、基于優(yōu)先級(jí)方案或基于負(fù)載平衡方法)從隊(duì)列中拾取請(qǐng)求。中間件服務(wù)充當(dāng)消息的路由器,通常不與消息交互。
發(fā)布/訂閱類型的工作原理略有不同,這是一個(gè)事件驅(qū)動(dòng)的過(guò)程。如果客戶想要參與,它首先加入一條消息總線。然后,根據(jù)其作為發(fā)布者、訂閱者或兩者的功能,它在總線中注冊(cè)一個(gè)事件偵聽器。發(fā)布者向總線(在中間件服務(wù)器上)發(fā)送事件通知。然后,中間件服務(wù)已注冊(cè)的訂戶發(fā)送一條通知,說(shuō)明數(shù)據(jù)可用。當(dāng)訂閱者向特定的發(fā)布者請(qǐng)求一些數(shù)據(jù)時(shí),該請(qǐng)求被包裝在一條消息中并發(fā)送到總線。然后,總線向發(fā)布者發(fā)送一個(gè)請(qǐng)求數(shù)據(jù)的事件。
2.1.4 基于組件或反射型中間件
組件被描述為“執(zhí)行特定功能的程序,其設(shè)計(jì)方式便于與其他組件和應(yīng)用程序一起操作”。這種類型的中間件是一種組件配置。這些組件要么在構(gòu)建時(shí)選擇,要么在運(yùn)行時(shí)選擇。這種類型的中間件擁有廣泛的組件庫(kù)和組件工廠,支持在多個(gè)平臺(tái)上構(gòu)建。由于分布式計(jì)算環(huán)境中的變化(即資源可用性、新要求的協(xié)議、網(wǎng)絡(luò)連接)一直都在增加,因此需要組件或反射型中間件提供不斷增加的QoS要求。
該中間件的優(yōu)勢(shì)在于可配置性,配置可以在運(yùn)行時(shí)完成,這為滿足大量應(yīng)用程序的需求提供了很大的靈活性。
2.1.5 代理型中間件
代理型中間件由幾個(gè)組件組成:實(shí)體(對(duì)象、線程)、介質(zhì)(一個(gè)代理和另一個(gè)代理之間的通信)和規(guī)則(代理通信協(xié)調(diào)規(guī)則)。介質(zhì)可以是監(jiān)視器、通信鏈路或更復(fù)雜的類型(例如管道)。規(guī)則確定了代理的交互性質(zhì),例如同步或命名的類型。代理型中間件能夠自主地執(zhí)行操作以滿足其設(shè)計(jì)目標(biāo),涵蓋了廣泛的策略基礎(chǔ),范圍覆蓋了算法、負(fù)載平衡策略、資源適應(yīng)性等。
代理型中間件的優(yōu)點(diǎn)是代理可以代表用戶執(zhí)行任務(wù),并且可以根據(jù)周圍的環(huán)境適應(yīng)范圍廣泛的策略。然而,操作的復(fù)雜性、理解操作的困難,以及將其納入系統(tǒng)所需的大量人力,一直是這一類型中間件的主要弱點(diǎn)。

2.2 應(yīng)用的視角
應(yīng)用程序可以包含適合特定功能的中間件,例如數(shù)據(jù)訪問(wèn)、基于Web、實(shí)時(shí)操作等專門用于應(yīng)用程序的中間件。
2.2.1 數(shù)據(jù)訪問(wèn)中間件
數(shù)據(jù)訪問(wèn)中間件用于應(yīng)用程序與本地和/或遠(yuǎn)程數(shù)據(jù)庫(kù)(關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù))、數(shù)據(jù)倉(cāng)庫(kù)或其他數(shù)據(jù)源的交互。這類中間件包括事務(wù)處理監(jiān)視器、數(shù)據(jù)庫(kù)網(wǎng)關(guān)和分布式事務(wù)處理中間件。這種類型的中間件可以幫助滿足特殊的數(shù)據(jù)庫(kù)需求,如安全性(身份驗(yàn)證、機(jī)密性和訪問(wèn)控制)、保護(hù)和ACID屬性。如果DBMS不可用或無(wú)法處理事務(wù),該數(shù)據(jù)庫(kù)中間件甚至可以自己執(zhí)行請(qǐng)求的事務(wù)。由于數(shù)據(jù)可能會(huì)保留在多個(gè)數(shù)據(jù)庫(kù)中,因此中間件(特別是事務(wù)處理監(jiān)視器)會(huì)跟蹤每個(gè)事務(wù)的進(jìn)度,并在請(qǐng)求的一部分失敗時(shí)請(qǐng)求回滾。中間件通知請(qǐng)求的狀態(tài),并傳遞所有返回的數(shù)據(jù)。一些中間件甚至修改了返回?cái)?shù)據(jù)的外觀,使數(shù)據(jù)更易于應(yīng)用程序或用戶使用。
數(shù)據(jù)訪問(wèn)中間件在多個(gè)源和數(shù)據(jù)庫(kù)之間的透明通信,將應(yīng)用程序編程語(yǔ)言轉(zhuǎn)換為目標(biāo)數(shù)據(jù)庫(kù)可接受的語(yǔ)言,以及將響應(yīng)集轉(zhuǎn)換為請(qǐng)求應(yīng)用程序可接受的格式,能夠直接查詢數(shù)據(jù)庫(kù)或與DBMS通信。
2.2.2 桌面中間件
桌面中間件可以根據(jù)用戶的要求,通過(guò)跟蹤和協(xié)助應(yīng)用程序,對(duì)數(shù)據(jù)的表示方式進(jìn)行更改,管理任何傳輸服務(wù)(例如終端仿真、文件傳輸、打印服務(wù)),并在中斷最少的情況下提供備份保護(hù)和其他操作后臺(tái)功能。中間件服務(wù)包括圖形管理、排序、字符和字符串操作、記錄和文件管理、目錄服務(wù)、數(shù)據(jù)庫(kù)信息管理、線程管理、作業(yè)調(diào)度、事件通知服務(wù)、軟件安裝管理、加密服務(wù)和訪問(wèn)控制等等。
2.2.3 基于Web的中間件
基于Web的中間件幫助用戶進(jìn)行瀏覽,使用界面提前搜索感興趣的頁(yè)面,并從瀏覽歷史中識(shí)別用戶感興趣的變化。它為大量應(yīng)用程序提供身份驗(yàn)證服務(wù),并提供獨(dú)立于底層操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議和硬件平臺(tái)的進(jìn)程間通信。與網(wǎng)絡(luò)緊密相連的中間件被稱為應(yīng)用服務(wù)器,它們提高了對(duì)性能、可用性、可擴(kuò)展性、安全性、信息檢索以及對(duì)協(xié)作管理和使用的支持。當(dāng)服務(wù)器和客戶端之間獲得更好的通信時(shí),中間件可以直接連接到應(yīng)用程序。基于web的中間件提供的一些核心服務(wù)包括目錄服務(wù)、電子郵件、計(jì)費(fèi)、大規(guī)模供應(yīng)管理、遠(yuǎn)程數(shù)據(jù)訪問(wèn)(包括下載、程序訪問(wèn)和瀏覽)和遠(yuǎn)程應(yīng)用程序等。
例如,電子商務(wù)中間件涉及了通過(guò)網(wǎng)絡(luò)進(jìn)行的兩個(gè)或多個(gè)企業(yè)(或用戶和企業(yè))之間的通信。該中間件控制對(duì)客戶配置文件信息的訪問(wèn),允許業(yè)務(wù)功能(如購(gòu)買和銷售物品)的操作,并協(xié)助應(yīng)用程序之間的財(cái)務(wù)信息交易。這種中間件可以提供一個(gè)模塊化平臺(tái)來(lái)構(gòu)建web應(yīng)用程序[,對(duì)安全性、QoS、經(jīng)濟(jì)高效且快速的交易以及不同環(huán)境下的透明度的需求至關(guān)重要。
面向移動(dòng)應(yīng)用的中間件是基于Web中間件的另一個(gè)主要分支。它集成了分布式應(yīng)用程序和服務(wù)器,為移動(dòng)用戶提供對(duì)電子郵件、日歷、聯(lián)系信息、任務(wù)列表等的安全無(wú)線訪問(wèn)。
2.3.4 實(shí)時(shí)型中間件
實(shí)時(shí)型中間件支持時(shí)間敏感的請(qǐng)求和調(diào)度策略,通過(guò)提高用戶應(yīng)用程序效率的服務(wù)來(lái)實(shí)現(xiàn)這一點(diǎn)。實(shí)時(shí)中間件可分為實(shí)時(shí)數(shù)據(jù)庫(kù)應(yīng)用、傳感器處理和信息傳遞等。
隨著物聯(lián)網(wǎng)的普及,實(shí)時(shí)信息處理中間件的數(shù)量急劇增加。實(shí)時(shí)型中間件提供了一個(gè)決策過(guò)程,確定了解決時(shí)間敏感過(guò)程的最佳方法,并可以幫助操作系統(tǒng)分配資源,以幫助時(shí)間敏感的應(yīng)用程序滿足其實(shí)時(shí)性需求。
2.3.5專有用途中間件
專有用途中間件一般為滿足特定需求而創(chuàng)建的,把不便于分類的中間件類型歸類于此。

3.中間件的用途
在互聯(lián)網(wǎng)的廣泛使用和高速連接的改造之前,大多數(shù)應(yīng)用程序是作為單體獨(dú)立的軟件解決方案開發(fā)的。這個(gè)軟件為了特定的目的和活動(dòng)而構(gòu)建,因此不設(shè)計(jì)為連接和軟件組件的交互。單體軟件需要一個(gè)復(fù)雜的中間件解決方案,以便與不同的模塊(如客戶機(jī)/服務(wù)器)共享信息,或者向主機(jī)/資源管理軟件發(fā)出請(qǐng)求。
在互聯(lián)網(wǎng)徹底改變了運(yùn)作方式,越來(lái)越多的業(yè)務(wù)由連接到大型分布式計(jì)算機(jī)網(wǎng)絡(luò)的多個(gè)計(jì)算設(shè)備所驅(qū)動(dòng)。分布式計(jì)算引入了面向服務(wù)的體系結(jié)構(gòu), 由多層軟件解決方案組成,這些解決方案實(shí)現(xiàn)了實(shí)體和服務(wù)的分離,從而將每個(gè)組件分解為微服務(wù)。這是通過(guò)降低系統(tǒng)的復(fù)雜性和進(jìn)一步增加其模塊性來(lái)實(shí)現(xiàn)的。在這個(gè)場(chǎng)景中,每個(gè)實(shí)體被視為唯一且自治的。
這時(shí),中間件是一種將單個(gè)應(yīng)用程序開發(fā)成的一套小型服務(wù),每個(gè)應(yīng)用程序都在自己的進(jìn)程中運(yùn)行,并與輕量級(jí)機(jī)制(通常是 HTTP 資源 API)通信。中間件與 API緊密相連,使用不同API軟件包。這意味著中間件可以簡(jiǎn)化復(fù)雜的應(yīng)用程序,因此開發(fā)人員不僅關(guān)注組件的通信,還關(guān)注業(yè)務(wù)邏輯和系統(tǒng)的交互。
另外,在開發(fā)應(yīng)用程序的時(shí)候,一般需要考慮的三個(gè)必要因素是可伸縮性、維護(hù)和自動(dòng)化。首先橫向擴(kuò)展只是增加資源以擴(kuò)展主系統(tǒng)的功能,在整個(gè)網(wǎng)絡(luò)上最優(yōu)地分配作業(yè)調(diào)度。至于維護(hù),關(guān)注點(diǎn)分離原則非常重要,不管是使每個(gè)實(shí)體可重用(模塊化)還是捆綁它的屬性(封裝)。典型的模塊化示例包括 Linux 內(nèi)核,其中不同的元素可以被多次使用來(lái)構(gòu)建一個(gè)系統(tǒng)。此外,重點(diǎn)一般會(huì)放在自動(dòng)化操作上,以減少錯(cuò)誤,并使應(yīng)用程序全天候可用。
中間件可以作為實(shí)現(xiàn)可伸縮性、維護(hù)和自動(dòng)化的促進(jìn)者。這意味著中間件在軟件開發(fā)過(guò)程中提供了靈活性,同時(shí)減少了整個(gè)軟件周期的時(shí)間,也為開發(fā)人員提供了更容易擴(kuò)展性。此外,中間件可以通過(guò)結(jié)合“快速失敗,快速成功”的原則來(lái)支持快速的原型實(shí)現(xiàn),還可以降低項(xiàng)目成本,普遍促進(jìn)創(chuàng)業(yè)和創(chuàng)新。
綜上所述,中間件提供的注意用途如下:
提供工具和函數(shù)以簡(jiǎn)化復(fù)雜應(yīng)用程序的開發(fā)。
提供高級(jí)抽象和接口,以促進(jìn)應(yīng)用程序的集成、重用和開發(fā)。
隱藏底層平臺(tái)和操作環(huán)境的異構(gòu)性。
隱藏基礎(chǔ)環(huán)境中的分發(fā)機(jī)制和通信細(xì)節(jié)。
促進(jìn)基礎(chǔ)設(shè)施的不同分布式組件之間的通信。
為不同應(yīng)用程序所需的通用功能提供共同服務(wù),以減少開發(fā)工作和避免服務(wù)重復(fù)。
提供一個(gè)公共體系結(jié)構(gòu)來(lái)添加新的服務(wù)和特性,而不必更改應(yīng)用程序。
提供增值特性和非功能特性,如安全性、可靠性和 QoS。
提供必要的工具,以增強(qiáng)分布式應(yīng)用程序的性能并提高其穩(wěn)定性和可伸縮性。

4. 中間件示例:物聯(lián)網(wǎng)中間件
物聯(lián)網(wǎng)描述了一個(gè)由多個(gè)智能感應(yīng)設(shè)備融合的實(shí)時(shí)數(shù)據(jù)收集的大型互聯(lián)設(shè)備網(wǎng)絡(luò)。為了實(shí)現(xiàn)這一目標(biāo),電子設(shè)備將數(shù)據(jù)發(fā)送到外部服務(wù),這些服務(wù)托管在云端或邊緣計(jì)算的基礎(chǔ)設(shè)施中。物聯(lián)網(wǎng)網(wǎng)絡(luò)不僅可以與周圍環(huán)境互動(dòng),而且不需要用戶的干預(yù)就可以自主行動(dòng)。在這個(gè)范圍內(nèi),普適計(jì)算被定義為“源于數(shù)字世界的、通過(guò)物理世界感知的服務(wù)整體”。
此外,開發(fā)物聯(lián)網(wǎng)應(yīng)用的體系結(jié)構(gòu)原則包括安全性、能源消耗和監(jiān)控、可靠性、可解釋性和通信。根據(jù)其軟件許可,它可以分為企業(yè)維護(hù)、開源或設(shè)備專用。物聯(lián)網(wǎng)中間件是基于以下關(guān)注點(diǎn)分離來(lái)處理其操作的:
硬件層包括所有的傳感設(shè)備,以及它們運(yùn)行的傳感器網(wǎng)絡(luò)。這一層負(fù)責(zé)收集和處理可用的數(shù)據(jù)。
操作系統(tǒng)層執(zhí)行必要的數(shù)據(jù)轉(zhuǎn)換操作,以便相應(yīng)地提取和加載信息。
網(wǎng)絡(luò)層通過(guò)保護(hù)連續(xù)、安全和無(wú)干擾的通信流,將數(shù)據(jù)發(fā)送到下一層。
中間件層處理消息通信協(xié)議和服務(wù)。具體來(lái)說(shuō),除了為應(yīng)用程序提供訪問(wèn)協(xié)議之外,該層還檢查系統(tǒng)的操作和數(shù)據(jù)傳輸故障。
應(yīng)用程序?qū)油耆?fù)責(zé)向最終用戶提供服務(wù)(通常是通過(guò) API) ,方法是啟用服務(wù)廣播到各個(gè)應(yīng)用程序的終端。
一些關(guān)于物聯(lián)網(wǎng)中間件的最有前途的開源項(xiàng)目,包括: 針對(duì)云傳感器系統(tǒng)的 OpenIoT; 針對(duì)設(shè)備間通信協(xié)議的 FIWARE; 針對(duì)數(shù)據(jù)存儲(chǔ)和機(jī)器學(xué)習(xí)的快速部署和高可擴(kuò)展性的 LinkSmart; 針對(duì)通信、控制和管理的自動(dòng)化層的物聯(lián)網(wǎng)抽象的 DeviceHive; 針對(duì)針對(duì)智能應(yīng)用的工業(yè)物聯(lián)網(wǎng)框架 ThingSpeak等等。類似地,IBM、 AWS 、Azure、谷歌和甲骨文都開發(fā)了企業(yè)中間件,專注于自動(dòng)化特定任務(wù)或核心業(yè)務(wù)活動(dòng)流程。


5. 中間件與云服務(wù)
隨著云服務(wù)的普及,中間件促進(jìn)了在單一多用途環(huán)境中的分布式部署。尤其是容器的指數(shù)級(jí)增長(zhǎng),這種情況變得更加明顯,軟件環(huán)境可以通過(guò)同一臺(tái)服務(wù)器在一個(gè)沙箱環(huán)境中快速而方便地部署多次。容器是一個(gè)獨(dú)立的軟件環(huán)境,具有唯一的代碼、庫(kù)、運(yùn)行時(shí)環(huán)境和依賴關(guān)系。中間件層也已經(jīng)從虛擬化轉(zhuǎn)移到了集裝箱化,用于優(yōu)化通信和抽象通信協(xié)議以開發(fā)軟件管道。
云原生是一種利用基礎(chǔ)云計(jì)算技術(shù)的應(yīng)用程序開發(fā)方法,其目標(biāo)是在內(nèi)部部署、私有云或公共云環(huán)境中提供一致的開發(fā)、部署和管理。實(shí)際上,云原生應(yīng)用是從微服務(wù)構(gòu)建的應(yīng)用程序,部署在使用Kubernetes編排的容器中。微服務(wù)是松散耦合的應(yīng)用程序組件,包含了自己的堆棧,可以彼此獨(dú)立部署和更新,并使用REST API、消息代理和事件流的組合相互通信。容器將應(yīng)用程序代碼(如微服務(wù))以及在任何傳統(tǒng)IT或云基礎(chǔ)設(shè)施上運(yùn)行該代碼所需的操作系統(tǒng)庫(kù)和依賴項(xiàng)打包在一起。
中間件可以解決其中一些復(fù)雜性,但使用傳統(tǒng)中間件運(yùn)行容器化應(yīng)用程序會(huì)增加其自身的復(fù)雜性。出于這個(gè)原因,流行的云應(yīng)用開發(fā)平臺(tái),已經(jīng)演變?yōu)榘巳萜骰虚g件,即模塊化中間件,以便只需將所需功能打包到一個(gè)容器中。
從開發(fā)者的角度來(lái)看,向云計(jì)算解決方案的轉(zhuǎn)變意味著代碼更少。云基礎(chǔ)設(shè)施中的大部分工作都是在“引擎下”完成的。以前由本地中間層處理的分布式編程現(xiàn)在可以遠(yuǎn)程處理,更具體地,需要處理的常見問(wèn)題包括擴(kuò)展性、彈性、可觀察性、資源管理以及持續(xù)的集成和交付。這意味著企業(yè)將限制中間件開發(fā)人員的數(shù)量,更關(guān)注架構(gòu)和應(yīng)用程序開發(fā),而不是部署。

6.小結(jié)
中間件一詞已被用于包含許多不同類型的軟件,因此很難確定到底指的是什么。簡(jiǎn)單地說(shuō), 中間件是連接分布式環(huán)境中的任何組件集,以提供更好的功能。
實(shí)際上,從體系結(jié)構(gòu)、開發(fā)到部署,中間件可以在其軟件周期中使用。對(duì)業(yè)務(wù)數(shù)字化轉(zhuǎn)換的持續(xù)需求表明中間件將繼續(xù)存在。無(wú)論是微服務(wù),還是在計(jì)算機(jī)之間的傳輸數(shù)據(jù),或者創(chuàng)建一個(gè)通用網(wǎng)關(guān),都可以依靠中間件來(lái)實(shí)現(xiàn)不同設(shè)備、應(yīng)用程序和軟件層之間的通信。通過(guò)微服務(wù)架構(gòu),通過(guò)中間件可以相對(duì)輕松地開發(fā)一個(gè)全局的分布式生態(tài)系統(tǒng)。
盡管中間件這一術(shù)語(yǔ)本身的使用越來(lái)越少,但它仍然存在于移動(dòng)和傳感器網(wǎng)絡(luò)、面向服務(wù)的架構(gòu)、網(wǎng)格計(jì)算、云計(jì)算、在線多人游戲、網(wǎng)絡(luò)機(jī)器人、物聯(lián)網(wǎng)等等。因此,中間件實(shí)際上仍然無(wú)處不在,并且很可能在很長(zhǎng)一段時(shí)間內(nèi)無(wú)處不在。
【參考資料與關(guān)聯(lián)閱讀】?
https://lib.jucs.org/article/71693/
https://www.ibm.com/cloud/learn/middleware
https://queue.acm.org/detail.cfm?id=3526211 https://onlinelibrary.wiley.com/doi/full/10.1002/cpe.2817 https://www.researchgate.net/publication/221205414ASurveyofMiddleware 當(dāng)你問(wèn)代理機(jī)制的時(shí)候?指的是Agent,Proxy,Broker還是Delegate呢? 也談“業(yè)務(wù)架構(gòu)” 淺析面向云架構(gòu)的SLA 軟件架構(gòu)的10個(gè)常見模式 面向數(shù)據(jù)架構(gòu)的云演變 回顧Bob大叔的簡(jiǎn)潔架構(gòu) 解讀六邊形架構(gòu) 老曹眼中的面向數(shù)據(jù)架構(gòu) 架構(gòu)大數(shù)據(jù)應(yīng)用 再談<全棧架構(gòu)師> 一文 一文弄清物聯(lián)網(wǎng)的OTA 物聯(lián)網(wǎng)要點(diǎn)深入淺出
