摘要:

  2023年1月本人参加了我司开发的“虚拟电厂”项目,主要负责架构评估和中间件的选型,本项目为设备管理、能源交易、电网削峰填谷提供一整套的软件方案。本文以虚拟电厂项目为例,主要讨论对层次式架构方法在项目中的应用,主要包括表现层、业务逻辑层、数据访问层和数据层的开发,表现层通过B/S框架,开发了设备调控平台用于设备实时运维;业务逻辑层主要中实现了物模型引擎、邀约竞价、智能负载预测、消息分发等功能来满足业务需求;数据访问层中使用MyBatis和标准化API调用来简化数据库操作;数据层中考虑到设备量和数据量问题将设备关系型数据和业务非关系型数据分别进行了存储。该系统上线后,整体表现出色,受到客户一直好评。

背景:

  随着国家新能源产业的逐步推进,电力系统正在经历深刻的变革,原有单项、线性的供电模式,正在被一种更为复杂、互动式的电网模型所取代,这种模型以广泛接入的新能源设备为特征,其次用户侧的用电行为也日益多样,这给电网管理和调控代理了巨大挑战,为了应对这些问题广东省在2021年7月发布了《虚拟电厂实施细则》,另外有31个省市也在积极推进虚拟电厂落地。它作为电力调控的先进形态,聚合了大量储能和用电设备,可以很好的预测设备在某时间段的用电情况,通过动态调控实现对储能和用电设备的集中管理和优化,能够在区间电网很好的实现消峰填谷,提高了电网的灵活性和稳定性。
  项目主要功能包括设备管理服务、智能测算服务、邀约竞价服务、设备调控服务,项目组共12人,架构组2人,我作为本系统的架构师主要负责整体架构评估和中间件的选型,项目历史8个月,最终项目顺利交付,截止目前系统平稳运行。

过度:

  在项目开发前期,我就认识到层次式架构是一种常用的架构形式,旨在将软件系统划分为相互独立、功能单一的层,每一层为上传提供服务,并作为下一层的客户,这样的设计使得系统逻辑清晰,有利于后期代码的维护和扩展。本项目在实施过程中将软件系统划分为表现层、业务逻辑层、数据访问层、数据层,表现层主要负责与用户进行交互,接收用户的输入并将信息通过可视化方式呈现给用户;业务逻辑层主要是负责复杂业务逻辑的处理和执行,作为表现层和数据层之间的桥梁;数据访问层负责与数据库或其他数据存储进行交互,提供了数据库操作的抽象方式,使业务逻辑层无需直接处理SQL或其他数据存储机制;数据层是架构中的最底层,负责存储和管理应用程序使用的数据。以下内容将围绕层级式架构风格中的各层次论述实施方法和效果。

主体:

  表示层使用了ExtJS框架构建一个零客户端的设备调控平台用于对设备进行削峰填谷控制。方案设计前充分考虑现有技术的成熟度,将JS与HTML5结合使用可以实现跨平台的前端效果,无论是在PC端还是在Android、IOS、WP平台都可以良好运行,ExtJS自带丰富的组件库,提供了多套可直接使用的界面风格包,开发者可直接使用也可以扩展开发自定义界面风格。表示层使用Ajax与应用层进行数据交互,数据格式选择JSON,易于人阅读和理解,同时通过大量使用了缓存技术、WebSocket技术来满足设备厂商需要实时设备运维、邀约竞价和接收调控派单的交互需求。我们将页面和处理逻辑存储在web服务器上,维护和软件升级只需要更新服务器端即可,避免了因为升级带来的部署问题和兼容性问题。
  业务逻辑层是整个软件系统的核心部分,其中实现了不同的业务服务,主要包括的服务有物模型转换服务、邀约竞价服务、智能负载预测服务和设备管理服务,系统各个部分相互依赖,系统的灵活性和扩展性受限,应用系统的异步处理变得复杂,处理不当会使得后期迭代和维护变得困难。为此我们选择了阿里巴巴开源的RocketMQ作为连接中间件,此构件支持集群、负责均衡、独立部署、界面管理等能力。设备上报的数据经过RocketMQ分发到订阅此消息的应用系统,主要包括设备监控、智能负载预测、电力优化调度等,能够有效解决耦合问题、异步问题、负责均衡问题,同时消息队列的管理即可以基于配置文件的也可以使用界面配置,使用起来简单、清晰、友好,例如设备运行状态主题、设备业务数据主题、电力调控主题等消息队列分类清晰,可以随时修改主题结构和增加主题。总体来说基于消息中间件使得数据流转在各个应用系统之间变得更加清晰,降低设计难度,便于后期二次开发和维护。
  为了使系统能够支持MySQL数据库并在未来可以方便的扩展到更多数据库平台,我们在数据访问层使用Mybatis来进行数据库的管理,一旦建立了模型与MySQL数据库表的映射关系,Mybatis提供的映射机制就可以高效的组合查询条件,快速的进行信息检索和聚合。对于Lindorm 数据库,则是在数据访问层定义了数据访问接口,并为每个接口实现具体的数据访问对象类,通过使用Spring完成对象管理、依赖注入以及数据访问。最终实现通过数据访问层屏蔽数据库平台的差异性,在更换数据库平台时,只需通过开发和配置对应的数据访问层,其他各层代码均无需修改。
 数据层是整个软件系统的基础,在IoT设备场景下关系型数据和非关系型数据同时存在,并且虚拟电厂具有设备量大、设备种类多、数据高频写入等特点,如果将所有的数据都存储在关系型的数据库中,在设备并发量大的情况下会影响系统性能,为此在系统设计时选择MySQL用来存储设备注册等结构化数据,而对于设备上报的业务数据一般都是非关系型化数据,我们选择了阿里巴巴的高可靠性的分布式数据库Lindorm来进行数据存储,通过区分数类型进行存储实现对设备历史数据的快速聚合和分析,满足设备数据高速写入。数据层同时将MySQL和Lindorm中的数据通过阿里巴巴的DataWorks平台将数据进行基本的ETL,之后同步到MaxCompute中进行离线存储,并进行模型计算。

结论:

  本项目在2023年8月顺利交付,在这个大半年的时间里,我们多次与客户进行沟通,进行需求校准,也是实地前往客户现场进行调研,最终项目平稳落地。目前项目中物模型转换引擎工作良好,没有出现性能问题,消息队列中间件通过多次调优后在吞吐量和性能上均超出项目目标需求,零客户端的设备调控平台,降低了后期维护成本,同时在实时性上完全满足客户需求,系统整体工作良好,客户基于了高度评价,本项目在公司内部的年度评优中也获得了“金牌项目”的荣誉。
  但是本项目在实施的过程中也存在不足之处,在架构设计前期没有考虑到客户遗留系统使用的PC环境中的浏览器不支持HTML5,这为用户使用带来了阻碍,好在这种客户极少,在与客户沟通后客户采购了新的PC用于部署当前项目系统,此问题得以解决。同时在项目开发过程中由于开发人员分隔2地,项目前期进度缓慢,后期通过每日视频站会的方式进行项目进度和问题的同步,项目得以快速推进,在项目交付期前完成项目的全部功能和测试。

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

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