將Java和其他平臺(tái)與.NET混合可以幫助構(gòu)建物聯(lián)網(wǎng)應(yīng)用程序。專家Tom Nolle也對此解釋了為什么Azure是一個(gè)不錯(cuò)的IoT的起飛之地。
對于物聯(lián)網(wǎng)(幾乎歇斯底里的興趣使.NET開發(fā)人員處于一個(gè)艱難的位置。 IoT,即物聯(lián)網(wǎng),這通常意味著RESTful接口、Java開發(fā)等與.NET無關(guān)的東西。一般來說,.NET用戶有個(gè)強(qiáng)大的架構(gòu)示例,可以啟動(dòng)物聯(lián)網(wǎng)開發(fā)。你只需遵循Azure IoT Hub模型,無論是否有Azure計(jì)劃 。專注于您的耦合中間件的服務(wù)總線,不要害怕將Java引入到組合中。
任何應(yīng)用架構(gòu)師都會(huì)告訴你,IoT是一個(gè)用例,而不是一個(gè)應(yīng)用程序模型。像會(huì)計(jì)或零售銀行,IoT需要應(yīng)用架構(gòu)來架構(gòu)其組件之間的關(guān)系。并將任務(wù)分成可以有效開發(fā),再利用和部署的組件。由于很少有公司具有真正的物聯(lián)網(wǎng)開發(fā)經(jīng)驗(yàn),定義有效的物聯(lián)網(wǎng)模型是一個(gè)艱巨的挑戰(zhàn)。最好的辦法是跟隨云。
微軟和亞馬遜都有建設(shè)物聯(lián)網(wǎng)應(yīng)用的隱性愿景。它所開始的設(shè)備聯(lián)盟從必須以與其他傳統(tǒng)用戶設(shè)備相同的方式進(jìn)行連接、注冊、認(rèn)證和管理。這些IoT設(shè)備是事件的源,可能需要實(shí)時(shí)處理、存儲(chǔ)庫編目和分析,或兩者皆有。然后,業(yè)務(wù)應(yīng)用程序(包括當(dāng)前的應(yīng)用程序)必須利用此事件處理的結(jié)果。由于Microsoft Azure是.NET開發(fā)的首選云合作伙伴,因此通過引用Azure IoT Hub元素可以最簡單地構(gòu)建.NET IoT應(yīng)用程序。
Azure IoT Hub組件負(fù)責(zé)設(shè)備連接和管理。在此處管理與設(shè)備相關(guān)的所有內(nèi)容,Azure IoT中心(或任何IoT中心)的輸出是一組代表物聯(lián)網(wǎng)遙測的消息或事件。到IoT元件的控制消息通過類似于IoT集線器的東西連接。如果你不打算使用Azure,那么自主開發(fā)的設(shè)備連接和控制元素的結(jié)構(gòu)應(yīng)盡可能與Azure IoT中心的結(jié)構(gòu)相匹配,特別是在接口方面。
消息還是事件?傻傻分不清楚
為了超越Azure IoT中心,你需要考慮IoT元素生成的內(nèi)容。術(shù)語消息和事件經(jīng)常容易混淆。消息系統(tǒng)將信息直接指向特定接收者,而事件系統(tǒng)僅僅以一個(gè)條件進(jìn)行報(bào)告。最廣泛的IoT應(yīng)用程序?qū)脑O(shè)備生成,因此將Azure IoT Hub的輸出視為一系列并行消息和事件流將會(huì)很方便。
Azure IoT傾向于通過公共進(jìn)程處理事件和消息。事件中心組件可以接收事件,并將其發(fā)布到進(jìn)程中,或根據(jù)需要將它們發(fā)送到存儲(chǔ)元素中。與事件中心集成的Stream Analytics組件可以對復(fù)雜事件處理進(jìn)行實(shí)時(shí)分析。你可以使用標(biāo)準(zhǔn)的.NET消息和事件工具或Windows 10 Core IoT設(shè)備(基于第三方和自定義開發(fā))構(gòu)建這些組件。
無論您是使用Azure還是有自己的數(shù)據(jù)中心, 事件路由和流分析邏輯都是分類和分析事件生成階段的組合。Azure IoT Hub設(shè)備通過IoT應(yīng)用程序的這一部分反饋,允許它們與某些處理邏輯相關(guān)聯(lián),這些處理邏輯可以是IoT特定的應(yīng)用程序組件或當(dāng)前的業(yè)務(wù)應(yīng)用程序。重要的是,你的集線器和流分析組件可將各種特定于設(shè)備的事件/消息表單,協(xié)調(diào)為常見的應(yīng)用程序特定事件或消息。如果不這樣做,所有邏輯就必須更改來適應(yīng)新設(shè)備,并且存在IoT數(shù)據(jù)處理不一致的風(fēng)險(xiǎn)。你可以在事件路由和流分析過程中使用處理程序,或在下一個(gè)元素中包含處理程序。對于通常期望響應(yīng)的真實(shí)消息,處理程序應(yīng)該在應(yīng)用程序和IoT設(shè)備之間提供狀態(tài)控制和關(guān)聯(lián),以確保以正確的形式進(jìn)行響應(yīng)。
業(yè)務(wù)邏輯分發(fā)過程應(yīng)基于發(fā)布和訂閱接口,從而將應(yīng)用與設(shè)備分離,并提高開發(fā)效率。理想情況下,IoT應(yīng)用程序?qū)ㄅcHub / Stream Analytics組件中的消息/事件相關(guān)聯(lián)的處理程序。然后轉(zhuǎn)換格式并將結(jié)果消息使用某種形式的服務(wù)總線隊(duì)列綁定到應(yīng)用程序上。這里的關(guān)鍵是要有一個(gè)總線架構(gòu),可以與所有的應(yīng)用程序交互,且本身是彈性和可分發(fā)。 Microsoft的Service Bus是完全可分發(fā)的、云兼容的,可以支持幾乎任何類型的應(yīng)用程序接口。它既可用作Azure服務(wù)也可用作Windows Server組件。
在發(fā)布-訂閱總線組件后面隱藏的是業(yè)務(wù)邏輯本身。因?yàn)槿绻魏谓o定的信息源(事件)或消息(請求/響應(yīng))具有標(biāo)準(zhǔn)格式都是很理想的,這樣就可能需要開發(fā)一個(gè)存根,以將應(yīng)用/組件與所選擇的消息總線的格式匹配。有些數(shù)據(jù)的重新映射通常由總線本身支持,但是要準(zhǔn)備好適應(yīng)對遺留應(yīng)用的特殊要求。
.NET的自由組合
最后一點(diǎn)要記住的是,在任何領(lǐng)域混合.NET(和C#)應(yīng)用程序與Java都沒有問題。在Azure IoT Hub應(yīng)用程序的設(shè)備處理部分中,許多傳感器和控制器將通過中間網(wǎng)關(guān)連接到互聯(lián)網(wǎng)或公司虛擬專用網(wǎng)絡(luò)上。你可以使用Windows 10 Core IoT套件構(gòu)建一個(gè)網(wǎng)絡(luò),當(dāng)然你也可以利用傳感器/控制器供應(yīng)商所支持Java或 其他語言。
當(dāng)構(gòu)建物聯(lián)網(wǎng)應(yīng)用程序的更深層元素時(shí),你可能會(huì)發(fā)現(xiàn)Java或其他平臺(tái)很有用。使用Event Hub的事件分發(fā)可以適應(yīng)多種語言和中間件工具。這在后端的服務(wù)總線耦合應(yīng)用程序中也是如此。 選擇最好的,適應(yīng)你已經(jīng)有的,并建立你需要符合本文描述的云模型。 你的IoT應(yīng)用程序隨后可以不斷增長并滿足未來業(yè)務(wù)需求。