2. 系统架构设计:分层架构与微服务

好,咱们进入第二章。系统架构设计,说白了就是给风电场功率管理系统搭骨架。骨架搭不好,后面加再多功能也是白搭。我个人习惯,做架构设计前先想清楚一件事:这个系统要扛多大的风电场?几十台风机,还是几百台?这直接决定了你用哪种架构。

2.1 分层架构:四层模型

先聊聊分层架构。这是最经典的玩法,也是我入行时接触的第一种架构。风电场功率管理系统,我建议分成四层:感知层、网络层、平台层、应用层。为什么这么分?每一层各司其职,出了问题也好定位。

2.1.1 感知层

感知层是系统的眼睛和耳朵。它负责采集风机、测风塔、升压站等设备的数据。我在项目中遇到过,有些厂家把感知层做得特别重,恨不得把每个螺丝钉都装上传感器。其实没必要,抓住关键数据就行:风速、风向、有功功率、无功功率、桨距角、发电机转速。

核心数据采集项:

  • 风速、风向(测风塔和机舱风速仪)
  • 有功功率、无功功率(并网点)
  • 桨距角、发电机转速(每台风机)
  • 电网频率、电压(公共连接点)

2.1.2 网络层

网络层负责把感知层的数据传上来。嗯,这里要注意,风电场的网络环境往往比较恶劣。电磁干扰、距离远、设备多,都是问题。我曾经在一个海上风电场项目里,光纤被渔船挂断过三次。从那以后,我坚持要求网络层必须做冗余设计。

常见的传输方式有:

  • 光纤通信:稳定可靠,适合主干网
  • 工业以太网:实时性好,适合场内通信
  • 4G/5G:灵活,适合偏远场站
  • LoRa:低功耗,适合传感器数据

2.1.3 平台层

平台层是系统的核心。数据到了这里,要完成存储、计算、分析。我建议用时序数据库来存风电数据,比如InfluxDB或TimescaleDB。为什么?风电数据是典型的时间序列数据,每秒都可能产生几十个数据点。关系型数据库扛不住。

我的经验:平台层一定要做好数据清洗。原始数据里经常有坏点、缺失值、异常值。不处理干净,上层应用算出来的功率预测全是错的。

2.1.4 应用层

应用层是给用户看的。功率预测、有功控制、无功调节、报表统计,都在这一层。我见过不少系统,应用层做得花里胡哨,但底层数据不准,结果就是「垃圾进,垃圾出」。所以,先把下面三层做扎实了,再谈应用层。

2.2 微服务与单体架构对比

聊完分层,咱们说说架构选型。单体架构和微服务架构,到底选哪个?你想想看,这个问题其实没有标准答案。我两个都用过,各有各的坑。

2.2.1 单体架构

单体架构就是把所有功能打包成一个应用。部署简单,开发快,适合小规模风电场。我最早做的一个项目,20台风机,单体架构跑得稳稳的。

优点:

  • 开发效率高,一个团队就能搞定
  • 部署简单,一个包搞定
  • 调试方便,本地就能跑
  • 运维成本低,不需要容器编排

缺点:

  • 扩展性差,某个模块压力大也得整体扩容
  • 技术栈绑定,不能局部升级
  • 代码耦合度高,改一处可能影响全局

2.2.2 微服务架构

微服务架构把系统拆成多个独立服务。每个服务负责一个业务功能,独立部署、独立扩展。适合大型风电场,比如上百台风机的那种。

优点:

  • 独立扩展,功率预测服务压力大,单独加实例就行
  • 技术栈灵活,不同服务可以用不同语言
  • 故障隔离,一个服务挂了不影响其他
  • 团队自治,每个团队负责一个服务

缺点:

  • 运维复杂,需要容器编排、服务发现
  • 调试困难,一个请求可能经过多个服务
  • 数据一致性难保证,分布式事务是老大难

2.2.3 对比表格

维度 单体架构 微服务架构
适用规模 小型风电场(≤50台) 大型风电场(>50台)
开发效率 低(初期)
运维成本
扩展性
故障隔离
技术栈灵活性

避坑指南:我曾经在一个项目里盲目上微服务,结果团队只有5个人,光搭基础设施就花了两个月。最后项目延期,老板差点把我开了。所以,小团队、小项目,老老实实用单体架构。别为了技术而技术。

2.3 架构选型建议

说了这么多,到底怎么选?我建议分三步走:

  1. 评估规模:风电场多少台风机?未来会不会扩容?
  2. 评估团队:团队多少人?有没有容器编排经验?
  3. 评估需求:业务逻辑复杂吗?需要频繁更新吗?

如果风机少于50台,团队小于10人,业务逻辑简单,我建议用单体架构。如果风机超过100台,团队有20人以上,业务逻辑复杂,可以考虑微服务架构。

还有一种折中方案:先做单体架构,等业务发展到一定规模,再逐步拆成微服务。这叫「演进式架构」。我在好几个项目里都这么干,效果不错。

2.4 系统架构图

下面这张图,是我画的风电场功率管理系统分层架构图。你可以看到数据从感知层一路流到应用层,每一层都有明确的职责。

风电场功率管理系统分层架构图 应用层 功率预测 | 有功控制 | 无功调节 | 报表统计 | 告警管理 技术栈:Vue.js / React + Spring Boot / Flask 平台层 数据存储 | 数据清洗 | 计算引擎 | 消息队列 | 服务注册 技术栈:InfluxDB + Kafka + Spark + Nacos 网络层 光纤通信 | 工业以太网 | 4G/5G | LoRa | 协议转换 协议:IEC 61850 / Modbus TCP / OPC UA 感知层 风机SCADA | 测风塔 | 升压站 | 气象站 | 电能表 数据:风速/风向/功率/电压/电流/温度 数据流向 用户交互 数据处理 数据传输 数据采集

这张图里,数据从下往上流。感知层采集原始数据,网络层负责传输,平台层做存储和计算,应用层展示给用户。每一层都用了不同的技术栈,互不干扰。这就是分层架构的精髓:高内聚、低耦合。

我的建议:刚开始做架构设计,别追求完美。先跑通一个最小可行版本,再逐步优化。我见过太多人,架构设计做了三个月,代码一行没写。结果需求一变,全白干了。


公众号:蓝海资料掘金营,微信deep3321