主頁 > 軟體設計 > 物聯網的應用模式

物聯網的應用模式

2021-09-01 09:08:48 軟體設計

一、前言

什么是模式?簡單說就是一種總結,一種模版,一種標準流程,慣用法-設計模式-架構風格,就是IT這邊常見的三層模式,至于應用模式,我的理解是特定應用領域下的模式,

由于物聯網的特性,其有很多應用模式,這些應用模式并不是專屬于物聯網應用領域,而是在物聯網應用領域,放大了這些應用模式的效果與價值,

簡單說一下,文章中提及的工業物聯網專案下的風機監測,
工業物聯網專案下的風機監測系統,是通過一系列傳感器檢測風場諸多風機的狀態,比如是否存在傾斜倒塌風險,

二、應用模式

1.Interpolation(插入)

a.定義

通過某網路的周邊節點資料,確定中間節點資料

b.問題

一個在時空上連續分布的資料,由于網路波動等原因,缺少部分分布點的資料,

c.解決

由于時空分布的連續性,某個點的資料不可能出現突然猛然增降(如果真的有,大概率也被視為例外資料,進而被清洗了),所以可以通過該點周邊的資料平滑地推斷出該點的資料,

d.缺點

缺點無非兩點:資料可信性、方案落地的要求
前者,由于有部分資料并不直接來自于實際采集,必然導致最終結果的一定程度失真,
后者,這個方案的落地,必須確保這些時空分布點的關聯性足夠強,尤其是時空點的分布并不是足夠密集時,

e.示例

以工業物聯網專案下的風機監測系統為例,
時間:就單個風機,如果傾斜傳感器采集頻率為10/s,那么連續1分鐘內的資料只有590,那么也是可以接受的,甚至這些資料只有300個,只要資料丟失呈現均勻分布,而不是斷崖式的,那么也是可以接受的,只是后續,需要讓技術確定為什么采集資料少了這么多,囧
空間:同樣就單個風機而言,即使在一個小時內某個傾斜傳感器沒有采集資料,但其他部位的傾斜傳感器作業正常,那么可以通過其他傳感器,推斷出這個故障傳感器的資料,進而保證上層程式正常運轉,

2.Sensor Facade(傳感器裝飾)

a.定義

通過中間服務,將傳感器原始資料,轉換為可讀性更高的資料,接耦,帶來硬體升級的成本降低

b.問題

傳感器型號眾多,從通行協議,到互動方式,差異性較大,尤其一些型號的傳感器,可能突然就不生產了,

c.解決

類似于設計模式的Facade模式,通過一個Facade層,屏蔽具體硬體型號帶來的差別,為上層提供統一的資料模型,

d.缺點

每種傳感器都需要建立對應的facade,并且統一的資料模型的抽象決定了這層Facade的上限,
至于每層facade的新增開發量,就取決于facade的抽象設計水平了,

e.示例

以工業物聯網專案下的風機監測系統為例,
該系統的傾斜傳感器有五種,后續還要支持更多傳感器型別,這些傳感器來自不同的廠家,有的使用mqtt協議,有的使用自定義二進制協議,采集的資料也存在差異(是否有溫度采集),
為了避免影響到上層應用,所以在終端服務器(網關層)進行了Facade處理,通過抽象的二進制協議決議&互動模塊和Mqtt互動模塊,將不同傳感器的資料進行處理,最侄訓得一個統一的傾斜資料模型,供上層應用使用,

3.Cache(快取)

a.定義

當傳感器資料被異步獲取/發送時,可以將快取的資料回傳,進而提高性能,避免重新采集/生產資料,

b.問題

傳感器資料的被訪問頻率,與傳感器采集頻率不同步,或者傳感器資料被多個消費者異步消費,

c.解決

傳感器資料采集/處理完畢后,將結果資料置入一塊快取,在資料尚未快取失效期間,外部(其他傳感器/服務節點)請求資料時,直接回傳快取中的資料,

d.缺點

僅適用于異步資料互動,異步處理復雜度相對高一些,

e.示例

以工業物聯網專案下的風機監測系統為例,
該檢測系統有一個震動傳感器的資料采集,由于震動資料的特殊性,所以必須是連續的高頻采集,比如一天采集十分鐘長度,頻率為1000HZ的資料,這份資料采集后,會有三個資料流出向:

  • 交由演算法程式處理,計算結果儲存到資料庫中
  • 將轉化后的資料進行存盤,便于后續演算法優化
  • 上層應用可能會掃描到該資料,用于上層使用(如展示等)
    當時的解決方案,就是本地通過檔案系統快取原始資料,消費者(演算法、轉換程式、上層應用)通過異步掃描的方式獲取該資料,每天創建對應快取檔案后,會清理一天前的快取檔案,

4.Gateway(網關)

a.定義

整個系統出入流量的“總閘”,實作安全傳輸,以及相關協議轉換(利用Interpolation、Sensor Facade等)

b.問題

用戶請求格式、協議存在很大差異,每個微服務都需要進行請求格式轉換、協議轉換,并對回傳進行處理,
與此同時,每個微服務都需要實作完整鑒權,確認請求權限,并且由于每個微服務都暴露在外網,系統安全性大大降低,
而這一切,帶來了性能降低、成本提高、安全性降低等一系列問題,

c.解決

系統進出流量,統一經過網關,由網關作為edge service,進行系統內外的互動,
一方面由于網關隔絕了系統內外,大大提高系統內其他服務的安全性,
另一方面由于所有流量都經過網關,所以請求&回應的統一處理可以交由網關處理,如協議轉換,格式轉換、安全傳輸等,

d.缺點

系統增加了一個可能的新性能瓶頸-網關,這包含了網關所帶來的性能瓶頸,以及網關的單點故障考量等,
作為系統的基礎組成,網關的設計影響了系統的安全,性能等,不合理的網關設計,反而會帶來耦合,進而提高系統的復雜性,

e.示例

以工業物聯網專案下的云平臺為例,
云平臺,采用了網關,進行協議轉換,以及鑒權等,
協議轉換:由于存在傳感器將原始資料直接上傳云平臺,所以云平臺需要協議轉換模塊,進行內容的轉化,
鑒權:通過網關統一對傳感器、用戶的權限校驗,內部服務進行“裸奔”,而部分敏感操作,有對應服務進行二次權限校驗,

f.擴展

網關是一個邏輯概念,并不是類似路由器這樣的物理存在,而在應用中,可能被拆分為多個組件,
這里要說一下,之前小伙伴問我XXX集團的網關是什么組件,是不是Spring的gateway,說實話,就是沒有理清這里的概念,網關雖然是功能上一個整體概念,但落在應用中,可能是由多個組件組成,而SpringCloud的gateway等,只是一個較為成熟的落地方案,可以理解為一個用于快速應用的腳手架,比如在XXX集團里的統一接入層,包含了網關的功能,包含CDN、LVS、XXX(類似Nginx)、鑒權平臺、無線接入平臺等等,

5.Sensor Aggregator(傳感器聚合器)

a.定義

往往上層服務所需資訊,不只是在一個傳感器中體現,而是在多個傳感器的聚合資訊中,

b.問題

物聯網某個“物物件“的狀態/某個指標,是由多個傳感器資料聚合而來,如果平臺接受所有傳感器資料,這個資料量就超出了當前系統的承受量,

c.解決

物聯網某個“物物件“的狀態/某個指標,可通過對相關的多個傳感器采集資料聚合而來,再將聚合后的結果,上傳至平臺,

d.缺點

  • 需要對多個傳感器資料進行聚合,可能需要對應聚合演算法
  • 末端的單個傳感器,往往缺乏多個傳感器的資料聚合能力,所以可能需要額外的硬體,進行資料聚合,
  • 由于聚合方式&演算法的緣故,可能聚合結果存在一定程度的失真,

e.示例

以工業物聯網專案下的風機監測系統為例,
風機的傾斜指標,是由塔頂傾斜與塔底傾斜組成,不同部位的傾斜是由三個傾斜傳感器的資料,通過演算法聚合而來

空間三個維度分別對應一個傳感器,進而獲得較為精確的結果,感興趣的小伙伴,可以自己計算哈,

f.擴展

資料聚合并不僅僅針對于“物物件”的單個指標,也可以直接針對“物物件”,具體粒度取決于業務需求,以及技術限制等,

6.Control Aggregator(控制聚合器)

a.定義

通過對傳感器&傳感器集合資料分析,進行決策,進而對控制集進行操作

b.問題

一方面一個事件的處理,往往會涉及多個控制傳感器的處理(亮燈、起落架抬起等),另一方面,每次相關事件處理,都需要呼叫多個控制傳感器,

c.解決

通過定義控制聚合器,由控制聚合器,呼叫對應的多個控制傳感器,

d.缺點

控制聚合器往往是單獨的硬體(部分情況下為邏輯模塊),需要額外處理,另一方面控制聚合器不太容易進行變更,如變更所屬控制行為,

e.示例

以工業物聯網專案下的中控系統為例,
工業物聯網的中控系統,存在報警控制聚合器邏輯模塊,一旦系統觸發對應報警,則由報警控制聚合器觸發對應的蜂鳴器、紅燈等,

f.擴展

多個控制行為的聚合,如觸發報警,會涉及紅燈、蜂鳴、彈窗等
我認為原檔案這部分描述不夠好,原文是:

The Control Aggregator pattern uses analysis performed on the collected information of multiple sensors to create actions that may occur on multiple control points to achieve a desired outcome.

Data from a large number of sensors needs to be collected and analyzed, possibly leading to control actions taken across multiple devices.

但控制聚合,其實與是否多個傳感器資料沒關系,

可以理解,傳感器聚合器和控制聚合器都是個“頭”,系統通過“頭”,進而把握”頭“下面的存在,
簡單來說,系統是個Boss,xx聚合器就是TL,xx就是對應TL下的員工,Boss直接從傳感器聚合器獲取資訊,直接將命令下發給控制聚合器,至于這兩個聚合器怎么獲取資料,怎么進行控制,Boss不管,

7.Multicast(多播)

a.定義

單個事件,發送給多個消費者進行消費(可以是實體內(喚醒判斷、資料ETL),也可是實體間(中控、平臺))

b.問題

一個事件的發生,往往會處罰多個action,
并且這些action時常變化,如果編碼到事件源,則會導致系統耦合度過高,

c.解決

其實就類似架構設計中的事件驅動架構,設計模式中的觀察者模式等,
由事件源發出一個訊息,感興趣的消費者可以進行訂閱,并執行對應的action,

d.缺點

事件源,到消費并不是可靠的,可能存在丟失,可能需要建立可靠性消費,但這樣系統的復雜度和成本就會大幅提升,
另一方面,由于是異步(不考慮同步)消費,消費結果是無法直接反饋給事件源,但可以通過中間狀態&事件源采用事件驅動處理進行改善,

e.示例

以工業物聯網專案下的中控系統為例,
當報警觸發,會發送出對應的報警訊息,系統內部會有多處消費,如:

  • 通信服務,消費報警資訊,進而對目標群體,進行短信推送等,
  • 指標展示服務,通過websocket向用戶大屏,推送對應的報警訊息,
  • 控制聚合模塊,消費報警訊息,觸發對應的報警控制傳感器,如紅燈、蜂鳴等
  • ,,,

三、總結

其實看完之后,會發現每個模式都似曾相識,都與以前接觸的架構、模式、方法論千絲萬縷,就像多播應用模式,設計模式中的觀察者模式、架構風格中的事件驅動架構,其實都是一樣的,
所以,希望大家在看了這些應用模式后,將它內化為自己的東西,最好能看到各個應用模式背后的架構思想,

四、附錄

參考

  • MSA-IOT

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/296418.html

標籤:架構設計

上一篇:java 自定義表單 動態表單 表單設計器 作業流引擎 flowable 專案原始碼

下一篇:基于ABP落地領域驅動設計-02.聚合和聚合根的最佳實踐和原則

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more