共計 4174 個字符,預計需要花費 11 分鐘才能閱讀完成。
本篇文章為大家展示了以 Serverless 為核心的云端能力如何打造分布式大氣監測系統,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
前述
下面將對數據上云后的相關流程,進行說明。
由于項目平臺持續建設中,當前已開源信息為二期版本,所以本篇內容均基于此版本能力進行說明。此版本架構進一步優化了數據鑒權及數據庫保護。
分為兩個部分:
架構組成:技術角度,拆解設計邏輯
模塊實現:功能角度,講解實現邏輯
【注 1】二期版本首頁效果
【注 2】在建三期版本首頁效果
【注 3】在建三期版本中,加入了 日志服務、對象存儲、小程序功能。提供靈活的日志存儲與高速檢索能力、低成本的數據庫備份 + 恢復 + 遷移同步能力、移動端交互及其它能力。
架構組成二期架構圖
注:淺藍色標明的是相對一期的架構變更重點。
部署維度
終端:部署在監測點的設備。相關設計在本系列前文中已說明。
云端:部署在云上的平臺。相關設計將在本文說明。
功能維度
以平臺設計的基本組成部分,進行的邏輯拆分。并依架構層的設計需求,配套選型的具體產品。
具體功能與選型說明:
監測節點:由軟硬兩部分組成。基于騰訊物聯網終端操作系統 TencentOS tiny 開發固件,將 兼容騰訊云的硬件設備 與 騰訊云 IoT explorer 進行了協議級的對接。
本地網關:此部分以通信協議轉換為主,不解析具體數據,僅需按前文指引配置即可。
物聯網接入層:基于騰訊云 IoT explorer 產品,提供了解密、接入、轉發的相關功能。在獲取數據后,進行了基于 http 協議的轉推動作,傳遞給下游 API 網關。
中間件層:基于 API 網關提供了銜接及負載均衡等能力,基于鑒權、流控等能力,銜接云函數,提供可靠的數據輸入輸出服務。
邏輯層:基于云函數,實現了接收數據入庫(數據固化)、定時統計匯總(數據分析)、輸出應用數據(數據輸出,支撐展示)的能力。
存儲層:基于云數據庫 TencentDB for MySQL,進行監測數據、匯總數據、平臺配置的存儲。
展示層:基于騰訊云圖,提供了地圖展示、數據展示、折線圖展示等能力。并配置提供聯動處理,提高了響應速度,減少了資源文件的重復傳輸。
模塊實現
整體系統,以數據為核心,進行了相關設計,所以本部分有兩個組成部分:
數據結構:講解各環節的核心數據結構與關聯模式。
模塊說明:講解各功能模塊的實現與對應源碼。
數據結構 IoT explorer(物聯網開發平臺) 推送數據結構
以 API 網關推送進來,由云函數在環境變量 event 中提取到的原始數據。
其中主要的部分:
非 body 部分,為 api 網關相關信息
body = IoT explorer 原始數據
body = 終端節點上報的原始數據,經 base64 編碼
{ body : {\ payload\ :\ eyJtZXRob2QiOiJyZXBvcnQiLCJjbGllbnRUb2tlbiI6IjIwMjAtMDgtMThUMTE6MTc6NDkuNDAzWiIsInBhcmFtcyI6eyJQTTFfQ0YxIjo1LCJQTTJkNV9DRjEiOjYsIlBNMTBfQ0YxIjo3LCJQTTEiOjUsIlBNMmQ1Ijo2LCJQTTEwIjo3LCJwYXJ0aWNsZXNfMGQzIjo3OTIsInBhcnRpY2xlc18wZDUiOjI1NCwicGFydGljbGVzXzEiOjE1LCJwYXJ0aWNsZXNfMmQ1IjozLCJwYXJ0aWNsZXNfNSI6MywicGFydGljbGVzXzEwIjowLCJ2ZXJzaW9uIjoxNTEsIkVycm9yIjowfX0=\ , \ seq\ :18639, \ timestamp\ :1597749469,\ topic\ :\ $thing/up/property/?????/?????\ , \ devicename\ :\ ?????\ , \ productid\ :\ ?????\} ,
headerParameters : {},
headers : {
accept-encoding : gzip ,
content-length : 511 ,
content-type : application/json ,
endpoint-timeout : 15 ,
host : service-???-???.gz.apigw.tencentcs.com ,
user-agent : Go-http-client/1.1 ,
x-anonymous-consumer : true ,
x-api-requestid : ???03a993936ae191f44651??? ,
x-b3-traceid : ???03a993936ae191f44651??? ,
x-qualifier : $LATEST
},
httpMethod : POST ,
path : /?????? ,
pathParameters : {},
queryString : {},
queryStringParameters : {},
requestContext : {
httpMethod : POST ,
identity : {},
path : /?????? ,
serviceId : service-????? ,
sourceIp : ?.?.?.? ,
stage : release
}
}
body 解 base64 編碼后:
{
clientToken : 2020-08-18T11:17:49.403Z ,
method : report ,
params : {
Error : 0,
PM1 : 5,
PM10 : 7,
PM10_CF1 : 7,
PM1_CF1 : 5,
PM2d5 : 6,
PM2d5_CF1 : 6,
particles_0d3 : 792,
particles_0d5 : 254,
particles_1 : 15,
particles_10 : 0,
particles_2d5 : 3,
particles_5 : 3,
version : 151
}
}
數據庫表單結構
數據庫詳細格式,請參考 github-sql
各表用途:
config:系統配置表
space:地點表。記錄節點部署地點。
client:節點表。記錄節點信息及最新關鍵信息,關聯 space 表。
base_data:日志表。記錄每次上報的信息,關聯 space、client 表。
aggregate_data:匯總信息表。記錄按小時、天等時段匯總的數據信息。
temp_base_data:臨時日志表。上報設備名如不在節點表內,則存入此表,主要用于調測。
API 接口數據結構模塊說明數據入庫
模塊功能:接收 IoT explorer 推送數據,匹配并轉換后,入數據庫
使用產品:API 網關、無服務器云函數
關聯源碼:github-upload
部署方式:請參考相關文章 在線甲醛監測“4.2.2 無服務器云函數 /4.2.3 云 API 網關”章節
終端在線更新
模塊功能:按 3 分鐘觸發,更新終端信息,用于快速查詢與展示
使用產品:云函數
關聯源碼:github-client_active_new
部署方式:請參考相關文章 在線甲醛監測“4.2.2 無服務器云函數 /4.2.3 云 API 網關”章節,但改為“定時觸發”模式
數據統計
模塊功能:按小時及天觸發,統計監測數據,用于快速查詢與展示
使用產品:云函數
關聯源碼:github-aggregate
部署方式:請參考相關文章 在線甲醛監測“4.2.2 無服務器云函數 /4.2.3 云 API 網關”章節,但改為“定時觸發”模式
數據接口 - 終端匯總信息表
模塊功能:通過 API 網關提供數據查詢能力,響應云圖調用,提供終端匯總信息表
使用產品:API 網關、云函數
關聯源碼:github-client_info
部署方式:請參考相關文章 在線甲醛監測“4.2.2 無服務器云函數 /4.2.3 云 API 網關”章節
數據接口 - 終端單點信息表
模塊功能:通過 API 網關提供數據查詢能力,響應云圖調用,提供終端單點信息表
使用產品:API 網關、云函數
關聯源碼:github-client_data
部署方式:請參考相關文章 在線甲醛監測“4.2.2 無服務器云函數 /4.2.3 云 API 網關”章節
數據展示
模塊功能:提供 WEB 端展示能力,含地圖繪點、列表展示、折線展示等
使用產品:騰訊云圖
關聯源碼:無,當前為手工配置
部署方式:請參考相關文章 在線甲醛監測“4.2.4 騰訊云圖”章節,但數據源選擇時,改為使用“API”。其中“首頁”地圖使用“數據接口 - 終端匯總信息表”接口、“單點數據頁”使用“數據接口 - 終端單點信息表”接口。具體調用的接口 URL,請對應 API 網關提供的服務鏈接。
二期成本分析
上圖表數為每節點每 15 秒上報一次的計算結果。
硬件部分由于廠商與采購量的差異,價格不同。此處以云服務成本計算,如果 10000 節點規模,每節點每分鐘上報一次,單節點云服務年成本:
二期架構 3.335 元 (數據庫 / 年 + 云圖 / 年)/10000+(API 網關 + 云函數)/4=(468+48)/10000+(9+2.1)/4
三期架構 1.09 元 (消息隊列 / 年 + 數據庫 / 年 *2+ 云圖 / 年)/10000+(云函數 + 日志服務 + 對象存儲)/4=(3228+468*2+48)/10000+(2.1+2.24+0.02)/4
二期無對象存儲及日志服務模塊,但在當前在建三期中已使用數月,故有實際數據可列入統計。
后續計劃
完成三期建設,計劃內容涉及:
交互優化 (done): 啟用 space 表,展示地點。
交互建設 (doing): 增加小程序能力,提供移動端查詢能力,及告警推送能力。
容災優化 1(done): 增加對象存儲,提供低成本數據備份、恢復、異步遷移同步能力。
容災優化 2(todo): 增加消息隊列 CKafka,應對網絡異常、數據庫異常情況下的數據堆積與丟失風險。
容災優化 3(doing): 增加日志服務,用于數據對賬,應對多環節數據處理中,可能出現的數據丟失或錯亂情況。
三期架構圖預告
注:淺藍色說明的是相對二期的架構變更重點。
三期版本部分完成效果 WEB 端展示
上述內容就是以 Serverless 為核心的云端能力如何打造分布式大氣監測系統,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。