Administrator
发布于 2025-05-09 / 1 阅读
0
0

架构风格

2020年6月,我参加了风险洞察系统的开发,在该项目中我担任系统架构师。该系统为民警提供人员在辖区内的实时动态,为辖区提供安保全方位的软件支撑。本文结合该项目的实践,以风险洞察系统为例,主要讨论架构风格在项目中的具体应用。在人员车辆模块中、风险预警模块中、区域任务模块中使用到了相应的架构风格。使用批处理风格将数据以整体的方式传递,这种方式把大量的添加操作用excel的方式导入,解决了用户易操作的问题。使用解释器风格通过自定义用户配置的规则以工作流引擎执行任务,使得系统中活动创建审核签收处置流程更为灵活。使用隐式调用风格的方式解决了系统对接多个设备厂商预警的问题,通过MQ消息队列方式使各个系统解耦。最终项目成功上线,获得用户一致好评。

随着节假日和重大活动的人流量增多,派出所需要在人流量大的区域进行对人员、车辆的管控,掌握区域内人员及车辆的实时轨迹,对于标签人员进行对应的预案和措施管理,为区域提供保障。我司此承建了该项目的开发,风险洞察项目,能够对标签人员关注工作对象进入辖区及时发现、在辖区内风险行为及时关注、离开辖区及时掌握去向的目标。深度挖掘辖区内未掌握潜在工作对象,智能分析潜在风险隐患,风险线索深度研判,进而为民警提供情报线索,使民警能够精准的掌握辖区内所在对象的轨迹,对于不同的标签人员进行相应的预案,执行对应的措施,使辖区内的安保得到有效的支撑。我在项目中担任架构师,负责系统的架构以及中间件的选型。项目使用的Java语言开发,前端使用的是vue技术框架,后端使用的是springboot、mybatis等技术框架栈,项目采用前后端分离的模式开发,Nginx代理服务器做负载均衡。项目的模块分为活动配置、区域配置、管控对象、推送信息、风险预警、预案配置、线索研判、全息档案、情行闭环、系统保障等。整个项目共耗时6个月,2020年12月顺利通过验收。

软件体系架构风格是描述某一特定领域中系统组织方式的贯用模式,可以指导如何将各个模块和子系统有效地组织成一个完整的系统,架构风格可以为我们的项目提供通用的解决方案,能够提高软件的重用性、也可对系统功能的模块解耦。常用的架构风格有数据流风格:批处理、管道过滤器风格;调用返回风格:主程序/子程序、层次风格面向对象风格;独立构件风格:进程通信、事件驱动;虚拟机风格:解释器、规则系统;仓库风格:数据库系统、黑板系统、超文本系统阐述以下在项目中具体使用到的架构风格含义:数据流批处理风格对大量整体数据有效的处理,以整体的方式传递,无需用户交互,简化了用户的操作。虚拟机解释器风格,通常包含一个完成解释工作的解释引擎,能够处理复杂的流程。独立构件风格包括进程通信、隐式调用风格,为了对接多个系统的复杂性,采用了隐式调用风格,通过消息中间件的方式于多个系统进行对接,此模式不仅降低了系统的复杂性也降低了系统的耦合度还使得系统可维护性变好。以下正文将重点描述分析采用软件架构风格的实施过程和效果。

使用批处理风格对来满足对系统的数据导入导出需求。在人员录入、车辆录入模块中,需要用户手手工录入人员和车辆的信息,人员和车辆在页面中表单的字段太多,一个一个的录入非常耗时间,针对此类问题,经过分析后,需要简化用户重复录入表单的数据,让用户可以一次性把大量的数据录入到系统中,数据流批处理的风格可以很好的解决。实施过程如下:让用户把需要录入的人员和车辆信息录入到表格中,然后通过excel整体把数据导入到系统中,使系统自动批处理表格的人员和车辆信息,无需用户在进行操作。同时表单的验证功能也可放在程序中处理,系统读取excel的数据然后进行业务逻辑的验证,将不合规的数据标识出来,同时把不合规的数据原因写到对应的行数据中,以便用户对数据进行修改。用户要看录入数据信息,则通过系统把用户录入的数据从数据库中查询出来,批量写入到excel中,以供用户下载查看。通过使用批处理风格简化了用户的操作性,使得功能更加易用。

虚拟机解释器风格通过工作流引擎来执行一些列任务完成OA需求。区域管控子系统有一个OA审批需求,每个区管辖自己的任务,操作员创建区域任务,审核员审批区域任务,处置员对区域任务的预警进行处置,针对于这样的需求场景,经过分析以后,可以通过解释器风格解决。首先我们分析出了此需求的整个流程,其次分析出每个环节对应的单位组织,然后分析出每个角色,然后进行人员配置。完成以上步骤之后还需要一个工作流引擎来执行对应的任务。在工作流引擎中,我们经过技术选型以后,选用了activity工作流引擎框架来解决此类场景。具体实施如下:activity工作流引擎中自带了用户和组织表,然后将组织的信息和人员的信息导入到工作流引擎表中,其次在根据每个环节要执行的任务画出流程图。然后将其部署到工作流引擎中。通过以上自定义的配置方式使得每个流程经过工作流引擎自动执行每个环节的任务,若某个环节需要重新添加或删除人员,只需要修改对应的表即可。通过解释器风格,使得流程配置更加灵活也使得程序更加易维护。

使用独立构建风格中的隐式调用来对接多个子系统,使系统耦合,降低了系统的复杂性。风险预警子系统需要对接多个厂家的设备数据,接入数据以后,根据经纬度和区域任务的预警规则进行预警。一共有13个厂家,每个厂家的设备数据文档不统一,经过对每个厂家设备的数据流量进行计算以后,每天有500W的数据量。若使用http接口方式来,工作量极大,数据吞吐也低,我们采用消息中间件rabbitmq的方式来对接。项目使用的是springboot技术来整合rabbitmq消息中间件。首先抽象出预警数据所需要的字段,然后创建一个消息队列,该消息队列的Topic使用xxx#yj的匹配规则来接入消息,每个厂家对该消息服务器建立连接,然后路由规则使用厂家缩写#yj的方式把消息发送至队列中。若在对接其他厂家的数据,则只需要把根据Topic的路由规则进行数据发送即可。基于消息中间件的架构设计给系统的性能也带来提升、也使得系统耦合度降低,在维护方面只需要在消费数据的模块中修改代码即可,也提高了维护性。

在项目中通过对架构风格的实施,解决了不同场景的问题,最终项目于2020年12月完成验收,运行期间系统很稳定,系统支撑了上百个活动,对民警的日常活动做出了有效的支撑,也抓捕了若干违法违规人员。期间由于区域人流量的增加,消息队列的数据越来越来越多导致消息挤压,消费者速度处理跟不上问题,后来对消息队列中间件增加了集群的数量分担消息的挤压,同时对代码进行优化,使用多线程对业务进行优化处理,经过调优以后,项目至今还未有重大的生产事故,系统的维护量是可控的,系统运行也比较稳定。

通过以上对架构风格的使用,很好的解决了工作中的问题,但也有不足之处,由于使用解释器风格,后期业务流程多,工作流引擎性能下降,后来我们分析以后,对数据库做了调优,以及业务上的调优。经过此次架构风格的实施后,我深刻体会到了架构风格是软件开发过程中的重要环节,丰富了很多架构风格方面的知识,同时发现了自身的一些缺点,学如逆水行舟,不进则退,仍需要加强自身的修炼,利用工作之余多学习新的理论知识,努力将自己的架构知识扩大提高,并应用到项目实践中,为公司的腾飞尽一份力量。


评论