物聯(lián)網(wǎng)關(guān)鍵技術(shù):規(guī)則引擎
物聯(lián)網(wǎng)系統(tǒng)以及各類互聯(lián)網(wǎng)分布式系統(tǒng),消息隊列是經(jīng)常用到的中間件技術(shù)。在物聯(lián)網(wǎng)系統(tǒng)中,消息隊列一般和規(guī)則引擎結(jié)合使用,規(guī)則引擎決定消息會進(jìn)入消息隊列的哪個topic。

消息隊列一般與規(guī)則引擎結(jié)合使用
為啥要用規(guī)則引擎
規(guī)則引擎起源于基于規(guī)則的專家系統(tǒng),是專家系統(tǒng)的一個分支,而專家系統(tǒng)可劃分為人工智能的范疇。當(dāng)時人們提出專家系統(tǒng),是為了讓計算機(jī)來應(yīng)用人類專家的經(jīng)驗,并像人類一樣進(jìn)行推理,最終解決特定領(lǐng)域的問題。
規(guī)則引擎是一種嵌入在其他應(yīng)用程序中的程序組件,實現(xiàn)了將業(yè)務(wù)決策從應(yīng)用程序代碼中分離的作用。業(yè)務(wù)人員可以使用預(yù)定義的規(guī)則語義模塊編寫業(yè)務(wù)規(guī)則。規(guī)則引擎解析業(yè)務(wù)規(guī)則,接受數(shù)據(jù)輸入,并根據(jù)業(yè)務(wù)規(guī)則做出業(yè)務(wù)決策。通過編寫業(yè)務(wù)規(guī)則,就可以改變數(shù)據(jù)的處理邏輯,而不需要重新編寫應(yīng)用程序的代碼。
當(dāng)然如果不使用規(guī)則引擎,物聯(lián)網(wǎng)系統(tǒng)只基于消息隊列也可以工作,但這樣的設(shè)計不夠靈活,使用規(guī)則引擎可以帶來很多好處。
與代碼不同,規(guī)則以不復(fù)雜的語言編寫,甚至可以通過圖形化的工具配置; 業(yè)務(wù)人員也可以輕松閱讀和驗證一套規(guī)則。
在規(guī)則引擎的幫助下,應(yīng)用程序的擴(kuò)展性可以變得非常強(qiáng)。如果需要頻繁更改需求,可以添加新規(guī)則,而無需修改現(xiàn)有規(guī)則。
在物聯(lián)網(wǎng)系統(tǒng)中,當(dāng)設(shè)備基于Topic進(jìn)行消息通信時,可以使用規(guī)則引擎,編寫類似SQL的語句對Topic中的數(shù)據(jù)進(jìn)行處理,并配置轉(zhuǎn)發(fā)規(guī)則將處理后的數(shù)據(jù)轉(zhuǎn)發(fā)到其他服務(wù),可以非常方便的對設(shè)備的數(shù)據(jù)進(jìn)行保存和分析。
AWS IoT
很多公司的物聯(lián)網(wǎng)云平臺都使用了規(guī)則引擎組件。以亞馬遜的IoT架構(gòu)為例,IoT設(shè)備內(nèi)嵌SDK 使用MQTT、HTTP 或 WebSockets協(xié)議將設(shè)備連接到 AWS IoT設(shè)備網(wǎng)關(guān)。規(guī)則引擎驗證發(fā)布到 AWS IoT的消息,并根據(jù)預(yù)先定義的業(yè)務(wù)規(guī)則將這些消息分發(fā)到另一臺設(shè)備或云服務(wù)。

AWS IoT架構(gòu)
規(guī)則引擎可以將消息分發(fā)到AWS Lambda(Serverless托管計算服務(wù))、Amazon Kinesis(大規(guī)模流式數(shù)據(jù)處理)、Amazon S3(可擴(kuò)展云存儲)、Amazon DynamoDB(托管NoSQL數(shù)據(jù)庫)、Amazon SimpleNotification(推送通知服務(wù))、Amazon SimpleQueue Service(消息隊列服務(wù))。

AWS IoT與AWS云服務(wù)對接
常用規(guī)則引擎
規(guī)則引擎不僅僅用于物聯(lián)網(wǎng),還可用于很多領(lǐng)域,比如保險、信貸、支付等金融風(fēng)控中。
- 常用的商業(yè)規(guī)則引擎包括:IBM ODM(ILOG)、Oracle Business Rules、Sparkling Logic Smarts、TopRules(中軟國際)、明策智能決策、益博睿決策引擎等。
- 常用的開源規(guī)則引擎包括:JBoss Drools、Mandarax、OpenRules、JEOPS、InfoSapient、Apache Camel等。
- 其中Drools是使用最廣泛的規(guī)則引擎。對于物聯(lián)網(wǎng)應(yīng)用來說,除了上述規(guī)則引擎以外,還有一種簡單的類似規(guī)則引擎的服務(wù)IFTTT。

IFTTT的典型示例:當(dāng)Uber到了,把燈亮起提醒我。
IFTTT是“if this then that”的縮寫,主要是讓用戶的網(wǎng)絡(luò)行為能夠引發(fā)連鎖反應(yīng)。IFTTT旨在幫助人們利用各網(wǎng)站的開放API,將Facebook、Twitter等各個網(wǎng)站或應(yīng)用銜接起來,完成特定的任務(wù)。已有很多人利用IFTTT服務(wù)搭建了屬于自己的物聯(lián)網(wǎng)應(yīng)用。