4. 平台总体架构设计:分层架构与技术选型原则
好,咱们今天聊聊智慧能源平台最核心的东西——总体架构。
说实话,我见过不少项目,上来就写代码,结果做到一半发现数据接不进来,或者接进来了处理不了。为什么?因为架构没想清楚。我个人习惯,做任何平台之前,先把分层架构画明白。
4.1 为什么一定要分层?
你想想看,一个智慧能源平台要管多少东西?
- 成千上万的传感器、电表、水表、气表
- 不同厂家、不同协议、不同数据格式
- 实时数据、历史数据、告警数据
- 还要做分析、预测、控制
如果不分层,所有逻辑搅在一起,改一个地方崩一片。我在项目中遇到过这种情况,当时为了赶工期,把数据采集和业务逻辑写在一个模块里。结果换了一批电表,协议变了,整个系统都得重改。嗯,从那以后我再也不敢这么干了。
核心原则:每一层只做自己的事,层与层之间通过标准接口通信。这样哪层出了问题,只改那层,不影响其他。
4.2 四层架构详解
智慧能源平台我习惯分成四层:感知层、网络层、平台层、应用层。说白了,就是从数据怎么来,到数据怎么用,一条线串起来。
4.2.1 感知层
这一层就是所有硬件设备。智能电表、水表、气表、温度传感器、光伏逆变器、储能设备……说白了,就是数据采集的源头。
关键点:
- 设备种类多,协议不统一。Modbus、DL/T645、IEC 61850、MQTT……你都得支持
- 数据采集频率不同。电表可能15分钟一次,光伏逆变器可能5秒一次
- 设备可靠性参差不齐。有的设备会掉线,有的数据会跳变
我的经验:感知层不要只考虑当前设备。预留20%的接口能力,因为项目上线后一定会加新设备。我曾经在一个项目中只留了10%的余量,结果半年后客户要加一批充电桩,差点把网关搞崩。
4.2.2 网络层
数据从设备出来,怎么传到平台?这就是网络层的事。
常见的通信方式:
| 通信方式 | 适用场景 | 优缺点 |
|---|---|---|
| 4G/5G | 分布式站点、偏远地区 | 覆盖广,但流量费用高 |
| LoRa | 低功耗、小数据量 | 省电,但带宽低 |
| Wi-Fi | 室内、园区 | 速度快,但覆盖有限 |
| 以太网 | 机房、变电站 | 稳定可靠,但布线成本高 |
这里有个坑——网络不稳定。尤其是用4G的场景,信号时好时坏。我建议在网络层做数据缓存和断点续传。设备本地先存一份,网络恢复了再补传。嗯,这个设计救过我一次,客户工厂在山区,4G信号经常断,但数据一条没丢。
4.2.3 平台层
这是整个架构的核心,也是我花时间最多的部分。
平台层要干几件事:
- 数据接入:接收网络层传来的数据,做协议解析、数据校验
- 数据存储:时序数据(如电表读数)用InfluxDB或TDengine,业务数据用MySQL或PostgreSQL
- 数据处理:实时流处理(如告警判断)用Kafka+Flink,批量处理用Spark
- 服务治理:微服务架构,用Kubernetes管理容器,用Nacos做服务发现
技术选型原则:
- 成熟优先:能用开源成熟方案,就别自己造轮子。我见过有人自己写消息队列,结果各种bug
- 可扩展:选型时要考虑未来3-5年的数据量增长。比如时序数据库,一开始数据量小感觉不出来,到了TB级别,选错了库就麻烦了
- 社区活跃:选社区活跃的技术,遇到问题能搜到答案。冷门技术出了问题,只能自己啃源码
- 团队熟悉:再好的技术,团队没人会用也是白搭。我一般会优先选团队已有的技术栈
4.2.4 应用层
这一层是用户直接看到的。能源监控大屏、能耗分析报表、告警推送、优化建议……
应用层设计要注意几点:
- 用户体验:数据展示要直观。别搞一堆数字,用户看不懂。用图表、仪表盘、热力图
- 实时性:告警信息延迟不能超过5秒。我遇到过告警延迟了10分钟,客户都跳闸了才收到通知
- 权限管理:不同角色看到的内容不同。厂长看总能耗,车间主任看产线能耗,操作员看设备状态
4.3 技术选型实战清单
说了这么多理论,给个我实际项目中用过的技术栈清单,供你参考:
| 层级 | 技术组件 | 选型理由 |
|---|---|---|
| 感知层 | Modbus TCP/RTU、DL/T645、IEC 61850 | 行业标准协议,设备兼容性好 |
| 网络层 | EMQ X(MQTT Broker)、Kong(API网关) | 高并发、支持百万级设备连接 |
| 平台层 | Kubernetes、Docker、Kafka、Flink、TDengine、Redis | 容器化部署、流处理、时序存储、缓存加速 |
| 应用层 | Vue.js、ECharts、Grafana、Spring Boot | 前端可视化、后端微服务 |
避坑指南:我曾经在一个项目中选了当时最新版的某个时序数据库,结果文档不全,社区也不活跃。遇到一个数据压缩的问题,折腾了两周才解决。后来换成了TDengine,一周就搞定了。所以,选技术别追新,稳定第一。
4.4 架构设计的一个小技巧
最后分享一个我自己的习惯。做架构设计时,我会先画一张「数据流图」,把数据从设备到展示的完整路径画出来。每一步做什么、用什么技术、数据格式是什么、延迟要求是多少,都标清楚。
这张图画完了,架构也就出来了。然后你再根据这张图去选技术、定接口、分模块。你会发现,后面写代码的时候特别顺,因为前面都想清楚了。
嗯,这一章就到这里。记住一句话:架构设计不是一次性的,它需要随着业务发展不断演进。但分层的思想,永远不会过时。