摘要:

  本人在2023年1月参与广东某公司委托我司开发的“虚拟电厂”项目,主要负责整体架构设计和中间件的选型,该项目为新型电力存储、电力调度、能源交易提供一整套的软件系统,包括设备接入、负载预测、邀约竞价、用户设备调控等功能。本项目以“虚拟电厂”项目为例,讨论基于构件的开发方法在本项目中的具体应用,主要包括构件获取、构件开发、构件组装三个阶段,在构件获取阶段通过对接现有系统、使用构件库、集成第三方软件来实现需求,在构件开发阶段使用多种设计模式来保证构件在后期的可复用性,在构件组装阶段使用了同步消息、异步消息来实现不同业务类型下构件的组合。实践证明,使用基于构件的开发方法可以有效增加构件在后期的可复用性、提高软件质量、加快项目开发效率,使得项目最终项目顺利交付,获得客户的一致好评。

背景:

  随着国家新能源战略的逐步推进,电力系统正在经历深刻的变化,原有的单项的电网供电模式,逐渐被一个更加复杂、互动式的电网模型所取代。此模型以广泛接入的新能源设备为主要特点,其次,用户侧的行为日益多样,为电网管理和调控带来了巨大挑战,为了应对这些问题,广东省与2021年7月发布《虚拟电厂实施细则》,另外有31个省市也在积极推进虚拟电厂落地。它作为电力调控的先进策略,聚合了大量分布式负载和储能设备,精确的预测负载在某时间段的用电情况,进行动态的电力调控,实现了对大量负载和储能设备的管理和优化,帮助电网在区域间实现消峰填谷,提高电网的灵活性和稳定性。
  目前我司拥有已经建成的物联网开发平台和类似功能开发经验,与2023年被甲方委托开发“虚拟电厂”项目,本项目组一共15人,架构组3人,我在项目中担任架构师的职务,主要负责整体架构设计和中间件选项,项目历时8个月,最终在2023年8月被成功验收。

过度:

  在架构设计初期我们就认识到基于构件的软件开发是一种解决复杂场景下,软件规模与复杂度的一种有效方法,强调通过可复用的构件来增加软件质量、提高开发效率、降低系统设计难度。本项目在基于构件的开发方法实施过程中,主要进行检索和提取构件、理解和评价构件、对构件进行修改、组装构件等活动。检索和提取构件的目的是寻找可复用的构件,提取构件主要有三种方法分别是刻面分类法、关键字分类法和超文本组织方式。理解和评价构件阶段主要是解决如何复用构件的问题。构件修改阶段是解决构件在使用时不是适配的问题,一般通过胶水代码来解决。构件组装阶段是通过顺序组装、层次化组装或者是叠加组装的方式将构件组装起来形成完整可用的系统。以下内容主要围绕构件获取、构件开发、构件组装来介绍基于构件的开发方法的具体实施方法和效果。

正文:

  形成构件库是基于构件开发软件的前提,我们对我司现有系统和项目进行功能整理,抽取一些共有的模块作为单独的组件,对内部操作进行封装,对外提供一致的标准化调用接口。在分析过程中发现,一些常用的模块例如设备管理服务、数据库服务可以直接进行复用,对于邀约竞价服务只需要少量改动就可以复用到新的系统中。由于我司没有大数据模型开发的经验,在短时间内开发出一个可以精确预测负载电情况和储能柜的放电情况的大数据模型难度较大,最后决定通过购买第三方服务的方式来支持当前业务,并与服务商协商确定使用SOAP进行交互,同时通过差分隐私功能避免原始数的泄露。对于一些无法找到合适构件的功能,则选择了自行开发新的构件,在开发构件的前充分考虑后期构件的复用性和扩展性,对于物模型转换功能使用了虚拟机中的解释器,利用规则和解释引擎对物模型的差异性进行统一转换,同时使用B/S架构开发了一个设备调控平台,来解决“设备分布广、设备厂商多、设备调控难”的问题。
  构件的优势体现在粗粒度的重用性,因此构件设计和开发的过程中,尽可能的将同一功能的不同表现封装到一个独立构件中,以便保持构件的高内聚、低耦合特性,本系统开发的构件就很好的遵循了这一原则。由于虚拟电厂所需聚合的负荷和储能设备类型较多,且同类型设备中各设备厂商的物模型不统一,如果使用硬编码方式则会降低软件的可复用性,导致后期的维护成本增加,因此选择了解释器的方式来实现。具体的做法如下,对各种类型的设备所使用的物模型字段进行高度抽象,对设备类型、设备能力和数据关系进行关键建模,制定不同设备的行业标准物模型,使用Json文件作为物模型转换配置文件,Json文件中体现设备名称、制造商、行业类型、字段版本、设备属性等数据结构,核心部分使用阿里巴巴公司开源的的FastJson与Java的反射机制动态生成Java对象,搭建出一套基于配置模版的解析器。配置文件的生成由设备厂商给出的设备字表转换成标准的Json配置文件,解释器支持Json配置文件热部署,这种方式将差异化的设备物模型直接转化成Java的可序列化对象,将设备对接的流程简化,后期物模型的更改不会对软件产生影响,仅需要增加或更新Json配置文件即可,最终使用多个行业物模型的 Json 配置文件规避了设备字段差异性带来的问题。
  系统在邀约竞价完成后会下发调控指令到指定的设备厂商,设备厂商使用统一的设备调控平台对设备进行削峰填谷控制。我在功能设计前,充分考虑现有技术的成熟度,发现目前的HTML5完全可以支撑客户端的实时交互需要,最终采用了B/S架构,项目中我们大量使用了缓存技术、WebSocket、Canvas,满足设备厂商需要实时运维、设备监控和接收调控派单的交互需求。我们将页面和处理逻辑存储在web服务器上,并增加了冗余备份,防止在出现异常情况时其他服务器能快速接管,其次维护和软件升级只需要更新服务器端即可,避免了因为升级带来的部署问题和兼容性问题,同时在安全性上也具有良好的保证。対于这些的新开发的构件,经过测试之后,我们将其按照企业目前的标准进行定义,形成相关的文档,录入到企业构件库中,以便复用于后续的项目。

结论:

  本项目与2023年8月完成验收和交付,这大半年的时间中,我们与甲方多次沟通,校准需求,也多次前往设备厂商进行实地调研,最终项目平稳落地,各功能组件运行良好,未有重大生产事故,项目组也在内部年度评审中获得了“创新驱动”奖项,系统目前留有1人运维和售后,总体维护工作量可控,系统运行稳定。项目不足之处也是存在,在架构设计上没有考虑到老旧的PC配置和用户系统的兼容问题,部分浏览器不支持HTML5,一定程度上阻碍了系统的推广,后期进过与少量问题客户的沟通,说服他们采购了新的PC,此问题得以顺利解决。

🌀路西法 的CSDN博客拥有更多美文等你来读。

文章作者: 路西法
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 以梦为马
架构师软考 论文 架构师 构件 系统架构师
喜欢就支持一下吧