4. 平台总体架构设计:分层架构与技术选型原则

好,咱们今天聊聊智慧能源平台最核心的东西——总体架构。

说实话,我见过不少项目,上来就写代码,结果做到一半发现数据接不进来,或者接进来了处理不了。为什么?因为架构没想清楚。我个人习惯,做任何平台之前,先把分层架构画明白。

4.1 为什么一定要分层?

你想想看,一个智慧能源平台要管多少东西?

  • 成千上万的传感器、电表、水表、气表
  • 不同厂家、不同协议、不同数据格式
  • 实时数据、历史数据、告警数据
  • 还要做分析、预测、控制

如果不分层,所有逻辑搅在一起,改一个地方崩一片。我在项目中遇到过这种情况,当时为了赶工期,把数据采集和业务逻辑写在一个模块里。结果换了一批电表,协议变了,整个系统都得重改。嗯,从那以后我再也不敢这么干了。

核心原则:每一层只做自己的事,层与层之间通过标准接口通信。这样哪层出了问题,只改那层,不影响其他。

4.2 四层架构详解

智慧能源平台我习惯分成四层:感知层、网络层、平台层、应用层。说白了,就是从数据怎么来,到数据怎么用,一条线串起来。

智慧能源平台四层架构 应用层 能源监控 | 能耗分析 | 预测优化 | 告警管理 | 报表展示 平台层 数据存储 | 数据处理 | 服务治理 | 消息队列 | 微服务 网络层 4G/5G | LoRa | Wi-Fi | 以太网 | 协议转换 | 数据网关 感知层 智能电表 | 水表 | 气表 | 温度传感器 | 光伏逆变器 | 储能设备 数据流向 → 控制指令 ←

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做服务发现

技术选型原则:

  1. 成熟优先:能用开源成熟方案,就别自己造轮子。我见过有人自己写消息队列,结果各种bug
  2. 可扩展:选型时要考虑未来3-5年的数据量增长。比如时序数据库,一开始数据量小感觉不出来,到了TB级别,选错了库就麻烦了
  3. 社区活跃:选社区活跃的技术,遇到问题能搜到答案。冷门技术出了问题,只能自己啃源码
  4. 团队熟悉:再好的技术,团队没人会用也是白搭。我一般会优先选团队已有的技术栈

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 架构设计的一个小技巧

最后分享一个我自己的习惯。做架构设计时,我会先画一张「数据流图」,把数据从设备到展示的完整路径画出来。每一步做什么、用什么技术、数据格式是什么、延迟要求是多少,都标清楚。

这张图画完了,架构也就出来了。然后你再根据这张图去选技术、定接口、分模块。你会发现,后面写代码的时候特别顺,因为前面都想清楚了。

嗯,这一章就到这里。记住一句话:架构设计不是一次性的,它需要随着业务发展不断演进。但分层的思想,永远不会过时。


专注资料整理