背景介紹:
目前做的專案是 iot 相關的專案,主要是公司會賣出許多設備,需要將設備產生的資料上雲做即時資料查看、歷史資料保存、警報觸發等功能
整個專案採微服務模式,透過 k8s 部署在公司賣出的一體機(主機電腦),或是部署在 Azure 上
此篇文章會拿其中一部分的架構出來說明是如何將原本無法水平擴展的微服務一步一步調整成可以動態水平擴展的微服務
專案架構:

接收訊息:
接收訊息有兩種來源,第一種是透過 rabbitmq 讓設備將資料上傳,第二種是透過 Azure Iot Hub
Worker:
Worker 是設備資料上傳後第一個經過的服務,主要負責幾件事情
- 解析不同設備上傳的資料並轉換成統一格式處理
 - 將設備資料存到 redis 當作即時資料 (RtData)
 - 將設備資料存到 Mongodb 當作原始資料 (RawData)
 - 將設備資料透過 RabbitMQ 傳送給 Archiver 來計算分鐘、小時、日資料
 - 將設備上下限資料存到 redis
 - 監控設備設定變更
 
Archiver:
Archiver 負責將 worker 處理過的資料進行計算,計算成分鐘、小時、日資料,稱之為 Recording Data,儲存到 mongodb 的不同 collection,讓其他微服務要撈資料可以根據使用者選擇的時間區段大小決定去哪張表內撈
Recording Data 主要會包含幾個欄位
- Max:時間區間內的最大值
 - Min:時間區間內的最小值
 - Last:時間區間內的最新值
 - Avg:時間區間內的平均值
 - Quality:區間內資料品質,可以是 正常、上線、下線、不合法、超過每分鐘變化率 等狀態