论软件架构风格论文
摘要:
本人于2023年1月参与广东省某公司委托我司开发的“虚拟电厂”项目,主要负责系统整体架构设计和中间件选型。该项目为新型电力存储、电力调配、能源交易提供一套整体的软件系统。本文以虚拟电厂项目为例,主要讨论架构风格在本项目中的具体应用,主要包括如下,底层架构风格中采用了虚拟机风格中的解释器,由于接入的负载和储能设备类型多、各家厂商的物模型字段差异性大,使用解释器可以更好解决物模型字段不统一的问题。中间层主要解决数据在各模块之间的流转,采用了独立架构中的隐式调用,目的是为了降低系统设计复杂度,简化设计架构,提高可修改性。应用层我们采用了B/S的架构风格,能很好的解决系统“设备分布广、设备厂商多、设备调控难”等问题。实践证明,通过架构风格的应用有效的简化了系统架构设计,降低了系统耦合性,提高了系统稳定性和可维护性,最终项目成功上线,获得用户良好评价。
背景:
随着我国能源转型的推进,电力系统正经历深刻变化。原有的单向电力供应模式,正逐渐由一个更为复杂、互动式的电网模型所取代。此模型以分布式能源的广泛接入为特征,如风电、太阳能和商业储能柜等,此外,用户侧行为多样化,例如光伏发电和电动汽车充电的增加,使得电网管理变得更为复杂。为应对这些挑战,广东省于2021年7月发布《虚拟电厂实施细则》,另有31个省市积极推进虚拟电厂落地,它作为需求侧响应策略的先进形态,通过聚合分散的负载和储能设备,准确预测设备的消峰填谷能力,动态进行电力调配,实现了对这些资源的集中管理和优化,提高了电网的灵活性和可靠性。我司目前拥有现成的物联网平台和自研云存储能力,因此2023年1月被甲方委托建设虚拟电厂一体化项目。本项目组共15人包括架构组3人,我在项目中担任系统架构师的角色,主要负责系统架构设计和中间件选型,项目耗时8个月,项目整体与2023年8月被甲方验收通过,目前稳定运行中。
过渡:
在架构设计开始阶段,架构小组就清楚认识到架构风格是一种设计模式,能够提供抽象框架的模式,为我们提供了良好的重用设计经验和设计模版,极大的提高了我们项目的进度。架构小组讨论后得出如下建议:项目采用虚拟机风格、独立构建风格和B/S风格这三种常见的架构风格。虚拟机风格能够提供灵活的解释器引擎,无需硬编码,由规则和解释器负责差异化的规则解释。独立构建风格包括进程通信和隐式调用风格,为了简化设计、提高系统后期的可修改性,我们采用了隐式调用的方式,通过消息订阅的来实现数据在各模块之间的流动。B/S架构风格是基于浏览器和服务器的软件架构,主要使用https进行通信和交互,简化客户端的设计和实现,降低维护成本。以下内容将重点描述架构风格的实施过程和效果。
主体:
由于虚拟电厂所需聚合的负荷和储能设备类型较多,例如家用光伏、充电状桩、商业储能电站、二轮车换电柜等,且同类型设备中各设备厂商的数据字段不统一,这种软件编写难度高,代码维护和设备对接都占用大量人力。因此底层模块的重点是软件设计高度抽象、设备字段适配由配置文件来承担,降低后期设备接入和维护成本。具体的做法如下,对各种类型的设备所使用的物模型字段进行高度抽象,对设备类型、设备能力和数据关系进行关键建模,制定不同设备类型的行业标准字段,使用Json文件作为字段转换配置文件,Json文件中体现设备名称、制造商、行业类型、字段版本、行业标准字段等数据结构,核心部分使用阿里巴巴公司开源的的FastJson与Java的反射机制动态生成Java对象,搭建出一套基于配置模版的解析器。配置文件的生成由设备厂商给出的设备字表通过系统内置脚本转换成标准的Json配置文件,解释器支持Json配置文件热部署,这种方式将差异化的设备数据字段直接转化成Java的可序列化对象,将设备对接的流程简化,后期数据字段的更改不会对软件产生影响,仅需要增加或更新Json配置文件即可,最终使用多个行业标准字段的 Json 配置文件规避了设备字段差异性带来的巨大风险。
虚拟电厂项目涉及的用户管理、申报管理、结算管理、设备监控、智能计量、电力优化调度管理等,系统各个部分相互依赖,系统的灵活性和扩扩展性受限,应用系统的异步处理变得复杂,无法应对聚合设备的大批量数据传输,处理不当会使得后期迭代和维护变得困难。为此我们选择了阿里巴巴开源的RocketMQ作为连接中间件,此构件支持集群、负责均衡、独立部署、界面管理等能力。底层解释器解析出标准行业字段的对象化数据经过RocketMQ分发到订阅此消息的应用系统,主要包括设备监控、智能计量、电力优化调度等。这种多web应用的情况非常适合消息发布于订阅的机制,能够有效解决耦合问题、异步问题、负责均衡问题,同时消息队列的管理即可以基于配置文件的也可以使用界面配置,使用起来简单、清晰、友好,例如设备运行状态主题、设备业务数据主题、电力调控主题等消息队列分类清晰,可以随时修改主题结构和增加主题。总体来说基于消息中间件的架构设计能够让构件化思想得到很好的实施,使得数据流转在各个应用系统之间变得更加清晰,降低设计难度,便于后期二次开发和维护。
系统应用层我们主要采样了B/S的架构风格,主要考虑到接入的负载和储能设备分布性广且隶属于不同厂商,系统需要对设备上报数据进行集中化管理和分析,但是不能直接进行设备电力调控,设备调控权由各设备厂商持有,要求为各设备厂商提供同统一的运营客户端且需要支持后续的客户端维护工作,这为系统后期推广和运维代理巨大压力。我们采用B/S的架构风格能够很好的解决这些问题,并充分考虑现有技术的成熟度,目前的HTML5完全可以支撑客户端的实时交互需要。项目中我们大量使用了缓存技术、WebSocket、Canvas,满足设备厂商需要实时运维、设备监控和接收调控派单的交互需求。我们将页面和处理逻辑存储在web服务器上,并增加了冗余备份,防止在出现异常情况时其他服务器能快速接管,其次维护和软件升级只需要只需要更新服务器端即可,避免了因为升级带来的部署问题和兼容性问题,同时在安全性上也具有良好的保证,用户体验良好。
结论:
本项目与2023年8月完成验收和交付,这大半年的时间中,我们与甲方多次沟通,校准需求,也多次前往设备厂商进行实地调研,最终项目平稳落地,其中物模型的解释引擎工作良好,没有出现过性能问题,消息队列经过多次调优在吞吐量和数据延迟等指标上均超出项目需求。无部署的运营系统,在使用体验和实时设备调控上完全满足客户需求。客户在使用了我们开发的设备对接功能后给与了高度评价,帮助他们极大程度上降低了设备物模型字段对接的工作量。至今系统运行良好,未有重大生成事故,项目组也在内部年度评审中获得了“创新驱动”奖项,系统目前留有1人运维和售后,总体维护工作量可控,系统运行稳定。
不足之处也是存在,第一在架构设计上没有考虑到老旧的PC配置和用户系统的兼容问题,部分浏览器不支持 HTML5,一定程度上阻碍了系统的推广,后期进过与少量问题客户的沟通,说服他们采购了新的PC,此问题得以顺利解决。
🌀路西法 的CSDN博客拥有更多美文等你来读。