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 架构选型建议
说了这么多,到底怎么选?我建议分三步走:
- 评估规模:风电场多少台风机?未来会不会扩容?
- 评估团队:团队多少人?有没有容器编排经验?
- 评估需求:业务逻辑复杂吗?需要频繁更新吗?
如果风机少于50台,团队小于10人,业务逻辑简单,我建议用单体架构。如果风机超过100台,团队有20人以上,业务逻辑复杂,可以考虑微服务架构。
还有一种折中方案:先做单体架构,等业务发展到一定规模,再逐步拆成微服务。这叫「演进式架构」。我在好几个项目里都这么干,效果不错。
2.4 系统架构图
下面这张图,是我画的风电场功率管理系统分层架构图。你可以看到数据从感知层一路流到应用层,每一层都有明确的职责。
这张图里,数据从下往上流。感知层采集原始数据,网络层负责传输,平台层做存储和计算,应用层展示给用户。每一层都用了不同的技术栈,互不干扰。这就是分层架构的精髓:高内聚、低耦合。
我的建议:刚开始做架构设计,别追求完美。先跑通一个最小可行版本,再逐步优化。我见过太多人,架构设计做了三个月,代码一行没写。结果需求一变,全白干了。
公众号:蓝海资料掘金营,微信deep3321