註解:
虛線代表高可用性(HA)架構/多節點端口。
長方形(無圓弧)物件代表自行開發專案,其餘為開源專案。
NGINX: 作為此專案的附載平衡器,採用round-robin作為IoT-Endpoint服務附載平衡策略,ip-hash作為Visualization服務策略(具備Websocket端口),接合開源的VTS模組,以利監控不同Domain的封包處理狀態。
IoT-Endpoint: 由Nodejs建構之API服務,負責接收IoT裝置上傳數據,並寫入Kafka服務。
Bot-Listener: 由Nodejs建構之Webhook服務,負責接收來自Line和Telegram通訊軟體服務商的訊息,並寫入Kafka服務。
Calibrator: 由Nodejs建構之Consumer服務,負責透過客製化回歸參數或結合Onnx格式和訓練完備之XGBoost模型校正感測器量測數據。
Sinker: 由Nodejs建構之Consumer服務,負責將感測器量測數據批次寫入PostgreSQL和clickhouse。
Automation-Worker: 由Python建構之Consumer服務,結合Pandas、Matplotlib、Selenium等開源套件以及Grafana,繪製商業需求之各類圖表與報告,並將結果存入MinIO保存。
Alerting: 由Nodejs建構之Consumer服務,負責將預警訊息或是商業報告圖表,透過Line和Telegram通訊軟體服務商發送至目標用戶。
Kafka: 採用3節點zookeeper/Kafka架構,內部節點間通訊採用PLAINTEXT協議,外部客戶端之間則採用SASL_PLAINTEXT協議,由於平台收集之數據無隱私問題,且考量加密通訊所帶來的延遲,故無採用SSL加密。Consumers的監控則採用由Linkedin開源之Burrow專案進行量測狀態數據採集,結合Apache Airflow來執行檢測與通報任務。
PostgreSQL: 採用primary/standby架構,使用streaming replication作為備份模式,結合timescale專案來提升數據查詢效能。
Clickhouse: 運用Distributed和ReplicatedMergeTree Engine來實作HA架構。此外,採用AggregatingMergeTree來完成感測器量測數據的實時聚合任務。
MinIO: 使檔案管理上可透過S3 API來執行,確保微服務間能保持stateless狀態,也能自動移除過期之商業報告。
Visualization: 使用leaflet作為GIS互動式視覺化框架,Bootstrap作為排版和元件美化框架,EChart作為主要圖表視覺化工具,Tabulator則是作為表格數據管理的主要工具。