
采用分层分布式架构,前端展示实时数据,后端分实时处理(流处理)与离线分析(大数据平台),数据采集层通过边缘计算+消息队列解耦,结合时序数据库(实时存储)与大数据平台(历史存储),支撑高并发采集、长期存储及故障预测。
系统设计围绕“分层解耦、高并发处理、长期存储”三大核心,各层功能如下:
类比:数据采集层像工厂的“传感器网络”,实时传输数据到中央“消息中转站”(消息队列);后端像“调度中心”,实时处理数据并存储;大数据平台像“数据仓库”,做长期分析和预测。
| 组件 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 时序数据库(如InfluxDB) | 专为时间序列数据设计 | 高写入速率、时间索引、聚合查询 | 实时监控、设备状态记录 | 不适合复杂查询,需优化索引 |
| 大数据平台(如Hadoop+Hive) | 分布式存储和分析 | 海量数据存储、复杂分析 | 历史数据存储、故障预测模型训练 | 写入延迟高,适合离线分析 |
| 消息队列(如Kafka) | 分布式消息系统 | 高吞吐、低延迟、持久化 | 数据采集层与后端的解耦 | 需考虑分区和消费者组 |
| 流处理框架(如Flink) | 实时数据处理 | 低延迟、状态管理、容错 | 实时聚合、异常检测 | 需配置资源调度,避免资源浪费 |
数据采集端(伪代码,边缘设备):
import paho.mqtt.client as mqtt
import json
import datetime
def publish_data(device_id, data):
client = mqtt.Client()
client.connect("mqtt.broker.com")
payload = json.dumps({
"device_id": device_id,
"data": data,
"timestamp": str(datetime.now())
})
client.publish("factory/device/data", payload)
client.disconnect()
后端消费(伪代码,Python+Kafka):
from kafka import KafkaConsumer
import json
consumer = KafkaConsumer(
"factory/device/data",
bootstrap_servers=["kafka.broker.com:9092"],
value_deserializer=lambda m: json.loads(m.decode("utf-8"))
)
for message in consumer:
data = message.value
# 实时处理:存储到InfluxDB,发送WebSocket更新
store_to_influx(data)
send_websocket_update(data)
“面试官您好,针对大型工厂的生产线设备监控系统,我设计的整体架构是分层分布式架构。前端采用Web大屏和移动端,通过WebSocket实时展示设备状态和趋势;后端分为实时处理层(用Kafka Streams处理每秒100+数据点,做实时聚合)和离线分析层(用Spark处理历史数据,做故障预测);数据采集层用边缘网关通过MQTT发送数据到Kafka,数据库分时序数据库(InfluxDB)存储实时数据,关系数据库(MySQL)存储元数据,大数据平台(Hadoop+Hive)存储历史数据。这样既能支撑高并发数据采集,又能实现至少1年的历史存储和大数据分析。”