系统架构设计师论文

305 阅读1小时+

一、数智巡防项目

1e32d1df42cf44198600391b283761e3.png

二、数据融合管理 几大模块:项目管理、数据源管理(数据源类型:①数据库:MySQL、PostgreSQL、ORACLE、SQL Server、Mongo DB;②文件系统:FTP、SFTP;③网络及消息队列)、资源管理(脚本管理、UDF管理、GIS引擎管理(切片方案))、文件管理、运维中心(数据看板、运维监控、运维管理)、数据集成(瓦片数据接入、文件数据接入、数据库接入、任务编排)、数据开发(离线计算、实时计算、交互分析)、数据质量(规则列表、质量任务、质量报告)、资产管理(数据资产、数据安全、数据标准)、数据服务(服务概览、服务发布、服务订阅、共享参数)、数据处理工具

论基于DSSA的软件架构设计与应用

参考范文一

【摘要】
X年X月,本人所在的湖北省某市科技有限公司启动了统一门户与数据融合服务管理系统建设,该项目实现数据源管理、资产管理、项目管理、数据集成、数据质量等内部管理功能。在此项目中,我担任了架构师,负责项目总体架构设计工作。本文以该综合管理系统为例,主要论述了基于DSSA的软件架构设计与应用。领域分析阶段,以集团已有系统资源出发,综合分析新业务系统需求,获取集团各业务所共有的领域需求,整合产生领域模型;领域设计阶段,分析领域模型,设计出通用业务架构,达到高层次领域实现;领域实现阶段,根据领域模型和DSSA,一面从已有系统剥离,一边重头开发,产生领域共有可重用元素。最终项目顺利上线,运行平稳,获得了领导的高度认可。

【正文】
本人所在的某市科技有限公司已经建设了移动办公系统、财务系统、地图服务系统、数据管理等应用系统,但仍有部分业务缺乏信息化支撑,已建成的系统比较松散,主要是“竖井式”方式建设,系统与系统之间信息不共享以及信息与业务流程相脱节。针对这些问题,X年X月,经集团研发决定,启动集团综合管理系统建设,实现以下功能:一、实现数据管理、资产管理、服务管理等业务流程信息化,同时整合地图管理系统、业务管理系统、移动服务管理系统等已有信息资产,促进部门、子公司之间横向协同工作。二、建立统一共享的信息平台,利用数据报表平台为管理层提供决策信息支持,实现纵向管控。三、建立涵盖分布式文件存储、单点CAS登录、分布式事务支持、短信邮件通知、可控任务调度等服务的基础IT设施,提供高质量、可重用的平台服务。

在此项目中,我担任架构师一职,负责系统总体架构设计。通过分析,由于集团已有成熟的业务系统,且集团对于所有业务设计了一套通用的业务流程,且大致业务实体类似,因此采用基于DSSA的软件架构设计将大大加快系统的推进,并有助与提升代码质量,提高系统可靠性

在集团金融业务内部管控领域中,领域需求主要包括项目立项、项目尽调、项目方案调整、项目合同签订、项目投放、收付款、项目收尾等业务需求,每一项业主步骤均可能包括审批、材料审核等流程。领域模型由项目、尽调、合同、投放、收尾等一系列业务实体类组成,并且涵盖业务经理、审核人员、业务主管等角色,包括了项目立项、项目尽调等上述功能的用例图,对于复杂用例如项目调整,采用活动图详细描述整个过程,形成整体领域模型。基于层次系统架构风格设计DSSA,分为表现层、中间层、数据访问层三层架构,从融资租赁系统中抽离出领域共有部分,对其进行裁剪、抽象、细化、扩充,形成通用业务构件,实现各领域需求,包含项目、合同、投放各业务流程,特定业务开发时,以通用业务构件为基础,在此之上进行个性化扩展,实现快速开发。相应的支持环境或设施有,基于OSS的分布式存储机制、基于seata的分布式事务机制、支持多种方式的登录鉴权机制、访问控制机制、增删改查代码快速生成模块、基于activity的工作流机制、邮件短信通知模块等基础设施。

本文以集团综合管理系统为例,从领域分析、领域设计和领域实现三个活动出发详细阐述基于DSSA的软件架构设计与应用。

一、领域分析获取领域模型

集团已有包括融资租赁系统及基金管理系统在内的业务管理系统,且集团有一套基本的管控流程,所有业务流程均在此套流程上进行裁剪、细化、扩充实现。因此,通过与业务领域专家的探讨,我们决定从融资租赁系统中及集团综合管控流程入手,分析领域需求,获取领域模型。由集团基本管控流程分析得知,业务基本分为立项流程、尽调流程、合同审查用印流程、投放流程、收付款流程即合同执行流程以及合同收尾流程。另外根据融资租赁系统分析得知,各业务系统均有自己个性化需求,如租赁强调租赁物的价值,以及该租赁物抵押所带来的的风险。另外系统还包含文件共享、登录、数据访问控制、分布式事务等基础设施需求。以这些获取到的领域需求为基础,我们设计了包含项目、合同、投放等业务实体,包含立项、尽调、合同审查等流程,以及各公共基础设计的领域模型,全面表达了领域内的范围、特定元素及环境约束

二、领域设计获取DSSA。

通过参考融资租赁系统,我们决定采用层次架构风格设计系统,实现基于B/S系统的的表现层、中间层及数据层。从领域维度又分为基础设施层、通用业务层、特定业务层。基础设施层涵盖基于OSS的分布式存储机制、基于seata的分布式事务机制、登录鉴权机制、短信邮件通知服务等等基础设施,该层次的功能基本与具体业务无关,为其他所有业务的开发提供基础功能支持,便于快速开发,由于这些基础功能的大规模复用,经过实战的考验,又为系统的稳定运行提供保障。通用业务层涵盖集团整体管控流程,需做到通用,能够普遍适应其他特定业务,因此它是可配置的、可扩展的,通过配置调整参数,可以控制流程的流转,比如对于不需要投放流程的转贷,可以通过配置跳过投放,对于融担不走线上审批的业务,可以跳过审批,并转而上传文件来完成业务。对于每个业务实体,我们包括两个部分,一部分为通用实体部分,另一个是特定实体基类,对于特定业务,如果无法通过配置来实现,则通过继承基类扩展实现。这样,我们就得到了集团业务领域的DSSA。

三、领域实现获取可重用元素。

在得到领域模型和DSSA后,我们分析得知我们需要的领域可重用元素包括通用业务构件及分布式存储构件、分布式事务构件、登录鉴权构件、短信邮件通知构件、工作流构件等基础设施。由于集团已存在部分信息化系统,我们对遗留系统进行分析,确定了分布式存储构件、工作流构件、短信通知构件等基础构件可从融资租赁系统中提取获得,登录鉴权构件也通过提取并扩展登录方式得到。对于通用业务构件,提取出的代码由于与原系统具有非常大的耦合性,缺乏对于整个领域设计的高度抽象,因此我们决定仅做参考,对其进行重新设计实现。项目界面采用VUE框架实现,后端采用Spring MVC,基于spring cloud实现微服务架构,用mybatis实现ORM方式的数据访问层设计。实体数据分为基础数据和个性化数据,个性化数据由具体业务定制实现,然后在Dao层对其进行汇聚,产生具体的实体数据,在此基础上,service层对数据层下所发生的的事情完全透明,只需要按照预定去获取数据即可。以这样的方式,我们得到了大量的可重用元素,为后续的特定业务开发提供参考。

2021年9月,项目顺利上线,运行平稳,获得了领导和同事的一致好评。由于项目采用了基于DSSA的架构设计方法,项目上线时间大大早于预期,并且领域实现的可重用元素均由资深实现人员实现,因此质量情况较好,系统可靠性较高,也因为领域构件会被大规模复用,因此对这些构件的改动需要考虑之前的兼容性,并编写足够的单元测试测试保证质量,对这方面的重视也大大提高系统整体的质量。另外由于系统业务也在不断扩展、深化,因此领域模型、DSSA及领域可重用元素并不是一成不变的,也需要不断迭代自己,通过进化、调整以适应变化的需求,另外也通过自身能力的提高,不断地驱动着业务的扩展,如数据分析能力为业务的开展提供数据支撑。基于DSSA的软件设计方法也为后续新业务开展打下了坚实的基础。

参考范文二

【摘要】
去年三月份,我所在的公司启动国网电力用户用电信息采集系统项目,我被任命为项目负责人。国网电力用户用电信息采集系统是国家电网公司坚强智能电网建设的一部分。由于公司之前为南网(主要是广东省)开发过类似用电信息采集系统,且公司准备在电力行业做强做大,我提出了采用DSSA技术来研发国网用电信息采集系统,得到公司领导层的一致赞同。

  由于项目功能实现上具有明显的阶段性,我决定采用演化方式来实现DSSA及完成应用产品开发。一是对原有系统、文档及国网用电信息系统功能规范进行分析,完成DSSA;二是对原有系统进行部件提取,做为核心资源的公共部件;三是加强对核心资源的管理,方便研发工程师查找部件及扩展部件。

  经过近一年的努力,终于完成了公司用电信息采集系统核心资源的建立,也完成了国网电力用户用电信息采集系统项目。
【正文】
去年三月份,我所在的公司启动国网电力用户用电信息采集系统项目,我被任命为项目负责人。国网电力用户用电信息采集系统是国家电网公司坚强智能电网建设的一部分。公司之前开发过广东电网公司计量营销一体化系统,类似于用电信息采集系统。

  我对广东电网公司计量营销一体化系统的功能规范和国网电力用户用电信息采集系统的功能规范进行分析,发现除了系统内各自的通信协议不同外,其它的功能需求大体上相同。整个采集系统都是分三层实现,主站层,采集终端层和电能表层。由于电能表已经规范化了,有专门的表计生产厂家,这一层不需要投入资源进行研发。从公司目前现状来看,主站层投入研发工作量较少,一是主站的开发中模块化做得比较好;二是用户的需求基本一致。国网用电信息采集系统仅需要在广东电网公司计量营销一体化系统主站进行界面调整和支持国网用电信息采集系统通信协议即可达到要求。

  根据之前开发的经验,用电信息采集系统开发的重点是采集终端的开发。因为采集终端需要安装到现场,而现场的用电环境各异,能够到达的远程信道也不同。采集终端可维护性低或可靠性低,则会产生大量的维护工作,影响公司品牌及利润。根据用电信息采集系统的要求,采集终端分为集中抄表终端、专变采集终端和公变采集终端。广东电网公司计量营销一体化系统的采集终端大体上也分为上述三类:低压集抄终端、负荷管理终端、配变监测终端。通过对采集终端的功能要求进行分析,可以看出它们归属于一个产品家族。我在项目组启动会议上提议采用DSSA技术进行采集终端产品的研发,建立公司用电信息采集系统核心资源,同时将计量营销一体化系统的采集终端也归结到产品家族中。

  众所周知,DSSA(特定领域软件架构)就是在一个特定的问题领域中支持一组应用的开发,这些应用形成产品家族。DSSA是软件重用的一种手段,它由领域模型、参考需求、参考架构组成重用元素。

  用电信息采集系统各终端基本需求都是对外接的电能表或测量点的读数进行采集,稍做处理后通过GPRS/CDMA信道远程传输给采集系统主站端。采集终端的功能模块一般包括测量点采集模块,表计规约模块,现场总线模块,PPP拨号模块,主站命令模块,本地维护模块,程序升级模块,数据存储模块,交流采样模块,负荷控制模块等等。

  由于采集终端在现场使用的特殊性,它的非功能性要求主要集中在可靠性、可修改性和易用性。现场用电环境复杂,信道各异,要求采集终端具有高可靠性。由于市场上的电能表支持的规约各异及现场总线发展快速,要求采集终端可扩展性强,能快速支持新的表计规约和现场总线,且支持远程升级操作。由于在现场施工时多是由工程队进行安装,工程队人员的素质高低不齐,要求采集终端在本地操作具有一定的智能化,且要求调试简单。

  根据以上分析,采集终端软件架构采用分层设计比较合适。分层设计的软件可修改性和可扩展性比较好。由于分层开发,将关注点分离到各层,将系统的复杂度分到各层中,相应可靠性也可以得到提高。

  在用电信息采集系统研发中,我决定采用演化方式进行开发。

  首先对原有系统、文档及国网用电信息系统功能规范进行分析,完成DSSA。在项目启始阶段,我对计量营销一体化系统及用户需求文档及设计文档进行分析,将用户需求用EXCEL表格列出来。然后再对国网用电信息采集系统的功能规范进行分析,用同样的方式列出用户需求,需求比对后发现它们之间的功能要求大体上是一样的。但由于通信协议不同,会导致一些功能在实现上有差别,如主从终端连接功能,用电信息采集系统采用一条命令完成主从终端的所有通信,而计量营销一体化系统分成建链、传输、断链三条命令来实现。于是我决定将基础业务模块做成通用的模块,根据不同的参数来初始化模块,或各具体产品自己适配模块。按照这个需求,我对核心资源进行分层设计。

  总体上,核心资源分成三层,由低到高依次是:基础资源层,基础业务层,扩展业务层。基础资源层包括多进程框架,GUI系统,系统API和驱动封装,虚拟通道模块等等。由于采集终端的操作系统是LINUX,而且通讯口资源比较多,采用一个进程管理一个通讯口,单一管理便于维护,因此提供多进程框架,方便应用开发时的进程增加。对系统API和驱动进行封装,方便以后代码的移植。基础业务层主要包括用电信息采集系统的各个基础功能模块,有现场总线模块、表计规约模块、测量点采集模块、交流采样模块、负荷控制模块等等。扩展业务层主要对基础业务层中的各个模块进行参数化和适配,以适应本系统的需要。根据目前的情况,扩展业务层主要有计量营销一体化系统部件包和国网用电信息采集系统部件包。

  其次对原有系统进行部件提取,做为核心资源的公共部件。计量营销一体化系统的采集终端在研发时由于没有采用组件开发技术,各功能模块和应用层耦合较强,在提取公共部件时需要对应用层解耦。各个具体的功能都有相应的控制参数,而控制参数可以由主站命令模块进行读写,将控制参数管理模块做成中介者模式,很好地实现了各功能模块的解耦。如PPP拨号模块,和应用层的拨号参数读写命令耦合在一起,通过参数管理模块将主站命令模块和PPP拨号模块解耦。

  在对计量营销一体化系统的采集终端进行部件提取过程中,每完成一个部件的提取,则对原采集终端软件系统进行重构,并完成集成测试和确认测试。这样可以始终端保持原采集终端软件系统可行,成为第一个验证部件的产品。

  最后加强对核心资源的管理,方便研发工程师查找部件及扩展部件。到了开发的后期,核心资源库的公共组件慢慢多起来了,同时由于在扩展业务层对很多基础部件进行了参数化和功能扩展,很多部件在标识和功能上都差异不大,出现了有点混淆的问题。为了更好地管理,我建立了WIKI服务器,采用WIKI服务器进行组件管理,在WIKI服务器上对组件的标识、功能、接口及与相关组件的差别等等进行了描述。研发工程师输入相关的关键字就能找到匹配的组件及每个组件详细的说明,方便研发工程师使用。

  随着用电信息采集系统核心资源库的建立,国网用电信息采集系统项目的功能也逐渐完善起来。采集终端软件系统在今年8月份通过了国家电网电力科学研究院的全功能测试,这对全体项目组成员是一个振奋人心的好消息,说明我们的努力得到了认可。

论软件开发过程RUP及其应用论文

参考范文一

在某公司的综合信息管理系统中, 我们全面采用基于RUP的软件过程, X综合管理信息系统是一个大型信息管理系统,其中包含运行管理、设备管理、安全管理、图形开票、生产技术管理、行政管理、人事管理、班组建设、学习培训、系统维护等十多个模块.不仅如此, 系统还要与现有的某些监控设备接口, 从中获取数据. 系统能对水电厂实行全民的运行管理,能及时对系统的信息作统计分析处理,能给管理者提供及时准确的数据, 对水电厂的运行决策提供必要的依据

在项目的初试阶段,我们主要建立项目的软件规模和边界条件, 明确用户的需求,形成规格说明书,作为验收标准. 同时, 估计了整个项目的总体成本和进度,评估了潜在的风险,作出了具有20%资源预留的项目计划.最后,根据客户需求,我们选择了RationalRose2000作为分析和建模工具、Project2000作为项目管理工具、系统开发工具采用VisualStudio6.0, 后台数据库管理系统采用MSSQLServer7.0

在项目的细化阶段, 我们根据实际需求,选择了B/S和C/S混合的异构软件体系结构.对一些关键性的算法,制作了探索型的原型.并在此基础上,为构建阶段制订了详细的迭代计划.在构件的选择方面,我们决定采用已有构件(我们曾经开发过X信息管理系统),对构件库中没有的构件,则重新开发

在项目的构建阶段,我们的主要任务是完成新构件的开发和测试,集成所有构件,进行集成测试.在这一阶段,我们采用并行开发方式,大大地提高了开发效率.

在项目的交付阶段,我们把经过集成测试的软件制作安装盘,安装在水电厂,接受实际环境的测试,然后对有关用户和维护人员进行培训和指导.

在以上各阶段结束时,我们都进行了阶段技术评审.在评审中,我们不但按要求邀请了客户代表,还邀请了第三方专家参与评审.

由于全面采用了基于RUP的软件过程,规范了管理和开发流程,有效地控制了资源,该项目在没有预留资源的情况下顺利完成.在系统运行期间,根据水电厂的要求和我公司的商业战略,我们又对该软件进行了三次进化过程,最终由软件项目过渡到一个产品.现在,该软件产品已经在全国多个水电站使用,用户反映良好.

论软件开发模型及应用

软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发过程包括需求、设计、编码和测试等阶段,有时也包括维护阶段。软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要任务和活动,用来作为软件项目工作的基础。对于不同的软件项目,针对应用需求、项目复杂程度、规模等不同要求,可以采用不同的开发模型,并采用相应的人员组织策略、管理方法、工具和环境。

请围绕“软件开发模型及应用”论题,依次从以下三个方面进行论述。

1.简要叙述你参与的软件开发项目以及你所承担的主要工作。

2.列举出几种典型的软件开发模型,并概要论述每种软件开发模型的主要思想和技术特点。

3.根据你所参与的项目中使用的软件开发模型,具体阐述使用方法和实施效果。

参考范文一

摘要部分:

2022年2月,我所在公司承担了深圳北未来城市应用场景项目平台的开发工作,我有幸作为该项目的技术负责人参与整个开发过程,并负责了该项目的需求分析与系统设计的工作。该系统主要包括北站、地下管线、消防等业务功能模块。 本文以深圳北未来城市应用场景项目平台为例,主要论述了统一过程开发模型在该项目中的具体应用。在初始阶段,我们建立了业务模型并且确立项目的边界;在细化阶段,主要对需求流程进行补充和完善;在构建阶段,主要是开发构件和应用程序功能,并将其集成为产品。整个项目历时10个月开发完成,到目前运行稳定。实践证明,这种开发模型有效的提高了开发效率,降低了开发成本和项目风险。

【注意:实际写作中相关项目情况应介绍清楚,摘要字数(包括标点符号)一般写到300到320字】

正文部分:

目前由于更迫切需要解决等一系列亟待解决的问题。【项目背景内容可分2段写,第1段简要说明下项目来龙去脉】

XX年XX月,我所在公司承担了XXX平台的开发工作,我有幸作为该项目的技术负责人,参与整个开发过程,并负责了该项目的需求分析与系统设计的工作。该系统主要功能为智能展现深圳北站室内外三维场景、实时资产数据采集分析、消防管控、地下管网等。因此,如何能够让项目开发顺利进行,选择一种合适的开发模型组织开发显得至关重要的。【第2段对系统整体情况进行细致介绍,项目背景第1、2段内容可以写到400到450字】

当前主流的开发模型主要有瀑布模型,演化模型,螺旋模型,统一过程(UP),敏捷开发模型等。其中,瀑布模型,是一种严格遵循软件生命周期各阶段的固定顺序,一个阶段完成再进入另一个阶段。适合于业务需求比较明确且很少变更的项目。演化模型,是从初始的模型中逐渐演化为最终软件产品,是一种“渐进式”原型法。适合于用户需求不明确的项目,且软件完善周期较长。螺旋模型,是一种结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。适用于项目规模庞大,复杂且高风险的项目,由于流程复杂,增加了大量成本和时间消耗;敏捷方法,是一种以人为核心、迭代、循序渐进的开发方法。适用于小规模软件或者小团队开发;统一过程(UP),一个通用过程框架,适合于各种应用领域、组织类型、性能水平、项目规模的项目;采用了强大的UML建模语言,能够在团队中形成统一规范和模板,同时有很多成熟商业软件提供整个开发周期的相关支持,可以极大的降低开发和管理成本,提高开发效率。因此,我们选择采用统一过程(UP)开发模型。

基于统一过程(UP)的软件项目一般分为初始阶段,细化阶段,构建阶段和交付阶段四个阶段。本文主要着重从前3个阶段具体论述统一过程开发模型在该项目中的具体应用。

首先,初始阶段,我们主要为整个系统建立业务模型并确立项目的边界。由于深圳北项目很多业务流程基本相同,通过调研分析和整理,并利用UML工具PowerDesigner对系统业务模型进行梳理,识别出与系统交互外部实体,譬如,日常需要使用养老管理平台的老人,护工,主管和管理员,还有需要进行接口对接的医院设备和信息系统和各种医疗厂商的穿戴设备等,并利用PowerDesinger建立相关类结构图和数据库结构的概念模型。同时,还有这些实体如何与系统进行交互的各种流程,为了整理的更加准确和清晰,其间,我们与各个养老机构进行了反复沟通和确认,最终定义出尽量符合养老机构业务规范的通用流程,这样既满足了各种机构的业务要求,又能给成长中的养老机构提供更好的借鉴参考的空间,最后利用PowerDesigner的建立相关用例图和时序图,并整理相关的设计文档,以备后续系统设计使用。同时,我们对各个机构一些特殊需求进行了梳理评估,对其中暂时无法实现或者实现成本较高的,加入到风险列表,跟用户最后再进行协商和确认,有些进行调整变化,有些直接放到后续项目升级中加以实现。

其次,细化阶段,主要是基于初始阶段确定下来的需求流程进行补充和完善,同时,淘汰业务中风险最高的元素。识别出主要功能和一些重要的非功能需求,做出最佳的决策。我们基于初始阶段的成果,对实体进行进一步的梳理,譬如,剔除无用的实体类,抽象合并和留下真正需要的实体类,同时根据业务需要补充类之间的关系。我们对业务用例也进行进一步梳理,譬如,在养老管理平台中,我认为养老档案的管理是整个平台的主线,贯穿始终,不仅仅在机构版中重要,在未来扩展的社区版中也需要,所以项目在进行概念设计时我们对养老档案数据结构的进行扩展性设计,充分考虑到以后系统的扩展需要。根据系统业务功能需要,我们评估哪些构件需要自研,哪些是需要采用第三方的。譬如,一些业务组件,基于我们原有构件库进行升级和改造,可以直接使用,我们就采取自研,这样既可以提高开发效率,又节省项目成本。而譬如一些基于视频通信的功能,由于自研的成本和本身团队能力限制,所以采用第三方的构件来实现。由于养老管理平台是需要支持IOS和Andriod平台两种平台的手机和PAD,所以,为了减少后期开发和维护的成本,对通信接口格式规范进行了统一的设计,同时,也在架构层面上降低项目的开发风险。

最后,构建阶段,主要是开发所有剩余的构件和应用程序功能,把这些构件集成为产品。由于XX平台分为机构版和社区版,同时包括PC端,移动手机端和PAD端程序设计。我们采用了基于组件的方式进行具体功能的构建,譬如,我们设计开发了通用登录模块,统一的权限管理模块,养老档案管理模块,工作查询模块,日志管理模块等。同时,我把团队又根据业务分为机构业务组和社区业务组,主要进行具体业务功能的开发;组件架构组,主要对通用构件进行封装和集成;移动业务组,主要进行移动端开发。由于采用了组件进行开发,既降低开发的风险和后续维护的成本,同时提高开发效率,项目推进过程中取得了不错的效果。由于涉及到全国几十家养老机构,同时,软件的产品质量是以一个企业生存的基础,我们在测试环境也进行充分的工作,譬如,在开发内部进行单元测试,系统模块进行功能测试;同时,由于涉及浏览器和移动端,在各种版本兼容性上也进行了充分的测试;最后,考虑到用户体验,还对系统进行充分的压力和性能测试。

整个项目历时10个月开发完成,最终于月完成交付,到目前运行稳定。通过在生产环境一段时间的使用,用户普遍反馈良好。但同时,也存在一些的不足,例如,在细化阶段没有充分考虑到各养老机构关于业务上区别,缺少了灵活的配置策略,在后期开发完成后无法统一调整,只能在临时为存在差异的机构进行代码层面的修改。以后在这种问题上准备结合原型法的一些思想进行调整,尽量减少类似问题的出现。

实践证明,这种开发模型的选择有效降低了开发成本和项目风险,提高了团队开发效率。XX平台是一个通用的管理平台,接下来,作为项目的技术负责人,我会总结现阶段的经验教训,在后续系统升级完善中,不断思考和改进统一过程的方法在项目中的应用,充分发挥统一过程开发模型的更大作用,为公司创造效益的同时,也能够为客户开发出更稳定更高效的系统。

最新“系统架构设计师”论文范文——论微服务架构及其应用

摘要:

我所在的公司是国内主要的几家地图公司之一,作为一个地图公司应当在当前这种时代背景下承担起城市3D智能化、促进金融服务实体经济、进一步扩大对外开放、深化金融供给侧结构性改革和推动经济高质量发展等重大战略部署过程中的新任务、新挑战。因此,2018年5月,公司决定在我们目前已有系统构件的基础上建设一站式互联网大数据征信平台,提供实时在线的大数据征信产品服务,重点服务于银行、保险、互联网金融、供应链金融、消费金融等多种商业场景。在该项目中,公司任命我为系统架构师兼研发负责人,负责项目的架构评审、改造设计及实现。最后,在我们公司多个部门同事的良好配合下,该项目已经在2019年4月底完成系统上线,到目前为止已经经过多次小版本迭代更新,得到了公司领导、各部门同事以及客户的一致认可。本文作者结合实际经验,以该项目为例,讨论微服务架构及其应用,包括微服务的基本概念及特点,如何从单体架构迁移到微服务架构,以及在实现微服务架构的过程中遇到的问题及其解决方案等等。

正文:

近年来,互联网行业发展迅速,同时伴随着公司组织、业务的不断扩张,需求的快速变化以及用户量的不断增加,公司目前已有的几个采用了单体架构的信用和风控方面的项目已经无法适应业务的高速迭代,各个项目中都存在模块间耦合严重,新需求变更困难等问题。因此,在这种背景下,公司决定在目前内部已有系统构件的基础上建设全新的互联网大数据征信平台,在整合原有业务系统的基础上开发满足用户新需求的一站式解决方案。

我带领研发部门的同事经过一段时间的架构考察和评估,最终决定采用微服务架构建设新系统。2018年5月,该系统正式开工研发,我被任命为系统架构师兼研发负责人,主要负责系统架构设计实现以及把控项目进度、技术难点攻关等方面的工作。在这个项目中,系统主要提供信用报告、信用评分、用户画像、信用风险监控、智能建模分析、社会信用体系建设等主要业务模块,在实际使用时,用户可根据实际情况的需要将上述模块自由组合,限于篇幅,在此我们不再详细介绍各个模块的具体功能。

微服务的目的是充分拆分庞大臃肿的系统,以促进敏捷开发和部署。在这个一站式互联网大数据征信平台项目的管理和开发中,我们按照功能需求将系统划分为用户中心、信用评分报告、信用风险监控、机器学习建模分析、社会信用体系建设5个微服务,同时将项目研发人员划分为5个小组。在项目开发过程中,首先我负责收集来至客户和公司各部门的所有需求,然后召开需求评审会议,跟项目组同事一起评审需求的优先级和工作量,在需求评审结束后将之安排给各个小组研发,各小组组长向我汇报工作同时全权负责他所在小组的研发进度、代码质量等方面的工作。在这个项目中,原则上每个小组负责一个组件的完整生命周期,从开发,到测试,再到运维以及后续迭代升级。最后,各个服务组件通过RESTful HTTP协议和消息路由功能进行服务组装。

传统的单体软件架构在构建部署和扩展伸缩方面有很大的局限性,传统的单体架构一般分为客户端界面、数据库、服务端应用三个部分。系统中任何程序的变更都需要整个应用重新构建和部署新版本。另外传统的单体软件架构在进行水平扩展时也只能整个系统扩展,而不能针对某一个功能模块进行扩展。而微服务架构恰好可以完美地解决传统单体架构所遇到的种种问题。微服务架构将系统以组件化的方式分解为多个服务,服务之间相对独立,单个服务功能的改变只需要重新构建部署相应的服务即可。与单体架构相比,微服务架构有如下的特点:

一,通过服务实现组件化。由于单个微服务实现简单,能够聚焦于一个指定的业务功能或业务需求,每个服务对外提供统一的轻量级REST接口,实现组件化。

二,功能明确,易于理解。微服务能够更好被一个开发人员理解、修改和维护,这样小团队可以更关注自己的工作成果,便于管理。

三,围绕业务功能构件开发团队。如果采用微服务架构,需要围绕业务功能来构件开发团队,这样更符合企业的分工与组织结构,避免出现一个开发团队负责维护多个系统服务的情况。

四,支持多种开发语言与多种平台。不同的微服务能使用不同的语言进行开发,运行在不同的操作系统平台上,服务之间通过标准的REST接口和统一的轻量级JSON数据格式进行交互与协作。

五,基础设施自动化。微服务强调以灵活的方式集成自动部署,通过CI持续集成工具实现基础设施自动化,所以一般微服务都离不开DevOps。

六,故障处理设计。微服务架构所带来的一个后果是必须考虑每个服务的失败容错机制。因此微服务非常重视建立架构及业务相关指标的实时监控和日志机制。

七,演进式迭代。微服务应用更注重快速更新,因此系统的功能会随着时间不断变化和演进。

在微服务架构下,我们选择RESTful HTTP协议进行通讯。每个微服务都统一对外提供REST服务。无论前端调用后端服务还是后端之间的服务调用都统一走REST接口,同时使用JSON数据格式进行交互与协作,这样微服务架构就可以支持各种异构系统服务间的交互。

在技术选型上,由于我们原有构件大多采用SpringMVC架构开发,因此我最终选择基于Spring Cloud服务框架做微服务架构,服务框架的选择也决定了后续的服务注册与发现选型、服务负载均衡选型、以及服务容错选型等等。

服务的注册与发现,服务之间需要创建一种服务发现机制,用于帮助服务之间互相感知彼此的存在。服务启动时会将自身的服务信息注册到注册中心,并订阅自己需要消费的服务。

负载均衡是服务高可用的保证手段,为了保证高可用,每一个微服务都需要部署多个服务实例来提供服务。我们主要支持随机、轮询、最少链接数的策略将来自网络的请求分配给内部中的多个服务器。

服务容错采用快速失败,失效切换的策略。如果连续失败多次则直接熔断,不再发起调用。这样可以避免一个服务异常拖垮所有依赖于他的服务。

在微服务实践中,我们主要遇到三个问题,一运维开销及成本增加,因为每个微服务需独立运行,还可能采用多种语言环境,这将导致资源开销大;二代部分码重复,某些底层功能需要被多个服务所用;第三个问题是难以可视化及全面测试,在动态环境下服务间的交互可能会产生一些无法预料的异常。因此,首先服务划分应尽量合理,不要划分太细太多,其次采用公共模块的方式提供底层服务,再次微服务可通过监控发现生产环境的异常,进而快速回滚,弥补可测性不足的问题。

通过项目实践证明,实施微服务架构收益会大于成本。在拥抱微服务之前,也需要认清它所带来的挑战。需要避免为了“微服务”而“微服务”。对传统企业而言,开始时可以考虑引入部分合适的微服务架构原则,对已有系统进行改造或新建微服务应用,逐步探索及积累微服务架构经验,而非全盘实施微服务架构。

最后,虽然项目在开发过程遇到了很多问题,但是在我们整个团队的齐心协力之下,问题都得到很好的解决,达到了项目的预期目标,得到了公司领导、各部门同事以及客户的一致好评。我也将在后续的工作实践中不断地学习,提高自身素质和能力,带领技术团队为公司提供更高质量的技术服务,为业务保驾护航。

论软件系统架构风格

解析:

软件系统开发中常用的软件架构风格包括:

  1. 管道/过滤器

在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流

  1. 数据抽象和面向对象

这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中

  1. 基于事件的隐式调用

  2. 分层系统

  3. 仓库系统及知识库

在仓库风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存储上执行。若构件控制共享数据,则仓库是一传统型数据库。若中央数据结构的当前状态触发进程执行的选择,则仓库是一黑板系统。黑板系统:主要由三部分组成:①知识源,知识源中包含独立的、与应用程序相关的知识,知识源之间不直接进行通信,它们之间的交互只通过黑板来完成;②黑板数据结构:黑板数据是按照与应用程序相关的层次来组织的解决问题的数据,知识源通过不断地改变黑板数据来解决问题;③控制:控制完全由黑板的状态驱动,黑板状态的改变决定使用的特定知识

  1. C2风格

C2体系结构风格可以概括为,通过连接件绑定在一起按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:

系统中的构件和连接件都有一个顶部和底部;构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;一个连接件可以和任意数目的其他构件和连接件连接;当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部

  1. 客户/服务器风格

C/S体系结构由三个主要部分组成:数据库服务器、客户应用程序和网络

  1. 三层C/S结构风格

  2. 浏览器/服务器风格

摘要:

本人于2023年1月参与四川省某市政府机构“数智巡防“项目,该系统为某市各个分局派出所提供多种警情数据统计、巡点巡线管理等软件功能,在该项目组中我担任系统架构师岗位,主要负责整体架构设计与中间件选型.本文以该数智巡防项目为例,主要讨论了软件架构风格在该项目中的具体应用。底层架构风格我们采用了虚拟机风格中的解释器,因巡点打卡设备有多种不同的数据协议,使用解释器风格可以满足打卡设备内的数据协议兼容性需求;中间层关于应用层的数据流转我们采用了独立构件风格中的隐式调用,这种风格主要用于减低系统间耦合度、简化软件架构,提高可修改性方面的架构属性;应用系统层我们采用了B/S的架构风格,统一解决警情管理难题,包括推广难、维护难问题。最终项目成功上线,获得用户一致好评。

正文:

随着国家十三五计划中-能源战略的深入和推广,该市公交集团自2016年1月起全面停止采购燃油机公交车,规划到2020年纯电公交车采购占比必须在70%以上,同时配套将车联网方面的系统建设被列为工作重点。不管从新能源营运车辆补贴监管、安全监控或者公交公司自身的营运和机护需求,都要求有新的车联网系统对他们进行全方位的支持,而我司是该公交的主要仪表与can模块产品的主要供应商,全市4000多台车中有3000多辆是我司的产品,我司不仅掌握熟悉该公交整车数据而且在车联网底层can数据有非常明显的领域知识优势,因此2016年1月我司被该市公交集团委托建设公交集团车联网一体化项目。本项目组全体成员共有27人(不含业主方),我在项目中为担任系统架构师职务,架构小组共7人,我主要职责负责整体架构设计与中间件选型,4月份完成架构工作,整个项目共耗时了7个月,2016年8月顺利通过验收。

在架构工作开始阶段,我们便意识到,架构风格是一组设计原则,是能够提供抽象框架模式,可以为我们的项目提供通用解决方案的,这种能够极大提高软件设计的重用的方法加快我们的建设进程,因此在我司总工程师的建议下,我们使用了虚拟机风格、独立构件风格以及B/S架构风格这三种较常用风格。虚拟机风格中的解释器架构风格能够提供灵活的解析引擎,这类风格非常适用于复杂流程的处理。独立构件风格包括进程通讯风格与隐式调用风格,我们为了简化架构复杂度采用了隐式调用风格,通过消息订阅和发布控制系统间信息交互,不仅能减低系统耦合度,而且还提高架构的可修改性。B/S架构风格是基于浏览器和服务器的软件架构,它主要使用http协议进行通信和交互,简化客户端的工作,最终减低了系统推广和维护的难度,以下正文将重点描述架构风格的实施过程和效果。

底层架构我们使用解释器风格来满足整车数据协议兼容性需求。解释器风格是虚拟机风格中的一种,具备良好的灵活性在本项目中我们的架构设计需要兼容好86种不同can数据协议,一般来说这种软件编写难度非常高,代码维护难度压力也很大因此这个解释器的设计任务便很明确了,软件设计需要高度抽象、协议的适配由配置文件来承担。具体的做法如下,我们对各个车厂的can数据结构进行了高度抽象,由于can数据由很多数据帧组成,每个数据帧容量固定并且标识和数据有明确规定因此我们将can协议中的ID和数据进行关系建模,将整体协议标识做为一个根节点,以canid作为根节点下的叶子节点,使用XML的数据结构映射成了有整车协议链-数据帧-数据字节-数据位这4层的数据结构,核心的代码采用jdomjar与java的反射机制动态生成java对象,搭建一套可以基于可变模板的解释器,协议模板的产生可以由公交公司提供的excel协议文档进行转换得到,解释器支持协议模板热部署,这种可以将透传二进制数据直接映射成java的可序列化对象,将数据协议的复杂度简化后期数据协议更改不会对软件产生影响,仅仅更改协议模板文件即可,最终我们使用了86个协议描述文件便兼容了这些复杂的can数据协议,规避了can数据巨大差异带来的技术风险。

中间层我们使用独立构件风格中的隐式调用来简化构件间的交互复杂度,降低系统耦合度。主要的实现手段是我们采用了一个开源的消息中间件作为连接构件,这个构件是apache基金会下的核心开源项目activemq,它是一款消息服务器,其性能和稳定性久经考验。由上文提到的解释器解析出对象化数据经过activemq分发到各个订阅此消息的应用系统,这些应用系统包括运营指挥调度、自动化机护、新能源电池安全监控等,这种多web应用的情况非常适合采用消息发布与消息订阅的机制,能够有效解决耦合问题,我们在编码的过程中发现只要采用这种风格的web应用,整个迭代过程效率极高,错误率降低,而且我们使用的spring框架,消息队列的管理完全基于配置,清晰简单,维护性良好,例如整车安全主题、运营调度主题、机护维修主题等消息队列分类清晰,可以随时修改其结构也能够随时增其他主题的消息队列,不同的web系统监听的队列也可以随时变换组合,基于消息中间件的架构设计能够让系统的构件化思路得到良好实施,总体来说这种架构风格带来了非常清晰的数据流转架构,简化了编码难度,减低本项目的二次开发的难度。

应用系统层我们主要采用B/S的架构风格,主要用于解决公交推广难、维护难得问题。公交行业有一个明显的特点,公交子公司分布在全市各个地区,路途很远,且都是内网通讯,车联网络也是走的APN专网,一般是无法远程支持的,这给我们的系统推广以及后期维护带来了很大难题,我们可以想象如果使用C/S架构,更新客户端一旦遇到问题很可能需要全市各个站点跑一遍。这让我们在系统推广和维护方面面临较大压力。我们采用的B/5架构风格能够解决这个难题,并充分考量可现在的相关技术成熟度,例如现在的html5完全能够实现以前客户端的功能,项目中我们使用了大量的前端缓存技术与websocket技术,能够满足公交用户实时性交互等需求。这种风格中页面和逻辑处理存储在web服务器上,维护和软件升级只要更新服务器端即可,及时生效,用户体验较好,例如界面上需要优化,改一下Javascript脚本或者CSS文件就可以马上看到效果了。

项目于2016年8月完成验收,这1年内共经历了2次大批量新购公交车辆接入,这几次接入过程平稳顺利,其中协议解释器软件性能没有出现过问题,消息中间件的性能经过多次调优吞吐量也接近了硬盘IO极限,满足当前的消息交互总量,另外由于我们的项目多次紧急状态下能够快速适应can协议变动,得到过业主的邮件表扬。除了业主机房几次突发性的网络故障外,项目至今还未有重大的生产事故,项目组现在留1个开发人员和1个售后在维护,系统的维护量是可控的,系统运行也比较稳定。

不足之处有两个方面,第一在架构设计的过程中我们忽略PC配置,个别PC因为需要兼容老的应用软件不允许系统升级,这些电脑系统老旧,其浏览器不支持html5,导致了系统推广黯碍。第二在系统容灾方面还有待改善。针对第一种问题,我们通过技术研讨会说服可业主新购PC,采用两台机器同时使用方式解决。针对第二种问题我方采用了服务器冗余和心跳监测等策略,在一台服务暂停的情况下,另外一台服务接管,以增加可用性.

论基于构件的软件开发方法及其应用

基于构件的软件开发(Component-Based Software Development,CBSD)是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径

请围绕“基于构件的软件开发方法及其应用”论题,依次从以下三个方面进行论述

  1. 概要叙述你参与管理和开发的软件项目,以及你在其中所承担的主要工作
  2. 详细论述基于构件的软件开发方法的主要过程
  3. 结合你具体参与管理和开发的实际项目,请说明具体实施过程以及碰到的主要问题

解析:

二、CBSD方法使得软件开发不再一切从头开发,开发的过程就是构件组装的过程,维护的过程就是构件升级、替换和扩充的过程,其优点是提高了软件开发的效率;构件可由一方定义其规格说明,被另一方实现,然后供给第三方使用,CBSD允许多个项目同时开发,降低了费用,提高了可维护性,可实现分布提交软件产品

CBSD方法由软件的需求分析和定义、架构设计、构件库的建立、应用软件构建、测试和发布五个阶段组成

  1. 需求分析和定义:在这阶段需要重点说明系统跟曾经开发过的其他系统类似,具有大量可复用的成熟构件。
  2. 架构设计:结合实际项目,根据上一阶段获得的需求和定义提出架构模型
  3. 构件库的建立:这是本论文主题的重点。构件的获得有四个途径:
  • 从现有构件中获得符合要求的构件,直接使用或作适应性修改,得到可复用的构件
  • 通过遗留工程(Legacy Engineering),将具有潜在复用价值的构件提取出来,得到可复用的构件
  • 从市场上购买现成的商业构件,即COTS(Commercial Off-The-Shell)构件
  • 开发新的符合要求的构件

而构件库的检索方法有3种:

  1. 基于关键字的检索
  2. 刻面检索法
  3. 超文本检索法

应用软件构建:构建过程主要是构件的组装过程,而大致有三种技术

  • 基于功能的组装技术。基于功能的组装技术采用子程序调用和参数传递的方式将构件组装起来。它要求库中的构件以子程序/过程/函数的形式出现,并且接口说明必须清晰。当使用这种组装技术进行软件开发时,开发人员首先要对新系统进行功能分解,将系统分解为强内聚、松耦合的功能模块;然后根据各模块的功能需求提取构件,进行适应性修改后,再挂接到上述功能分解框架中
  • 基于数据的组装技术。基于数据的组装技术首先根据当前软件问题的核心数据结构设计出一个框架,然后根据框架中各节点的需求提取构件并进行适应性修改,再将构件逐个分配至框架中的适当位置。此后,构件的组装方式仍然是传统的子程序调用与参数传递。这种组装技术也要求库中构件以子程序形式出现,但它所依赖的软件设计方法不再是功能分解,而是面向数据的设计方法,例如,Jackson系统开发方法
  • 面向对象的组装技术。由于封装和继承特征,面向对象方法比其他软件开发方法更适合支持软件复用。在面向对象的软件开发方法中,如果从类库中检索出来的基类能够完全满足新系统的需求,则可以直接应用,否则,必须以基类为父类,生成相应的子类,以满足新系统的需求

测试和发布:可以是一个增量和迭代的过程

可能遇到的问题包括:构件不适配;连接子不适配;从遗留工程中抽取的构件性能不满足;购买现成的商业构件无法完美匹配等

论软件维护方法及其应用

软件维护是指在软件交付使用后,直至软件被淘汰的整个事件范围内,为了改正错误或满足新的需求而修改软件的活动。在软件系统运行过程中,软件需要维护的原因是多种多样的,根据维护的原因不同,可以将软件维护分为改正性维护、适应性维护、完善性维护和预防性维护。在维护的过程中,也需要对软件的可维护性进行度量。在软件外部,一般采用MTTR来度量软件的可维护性;在软件内部,可以通过度量软件的复杂性来间接度量软件的可维护性。

据统计,软件维护阶段占整个软件生命周期60%以上的时间。因此,分析影响软件维护的因素,度量和提高软件的可维护性,就显得十分重要。

请围绕“软件维护方法及其应用”论题,依次从以下三个方面进行论述

  1. 概要叙述你参与管理和开发的软件项目,以及你在其中所承担的主要工作
  2. 详细论述影响软件维护工作的因素有哪些
  3. 结合你具体参与管理和开发的实际项目,说明在具体维护过程中,如何度量软件的可维护性,说明具体的软件维护工作类型

论基于架构的评估方法

摘要:

        2020年3月,本人所在的公司为集团下属某能源公司开发了一套工业互联网系统。该系统主要负责采集工业设备的遥测、遥信数据,再经大数据做实时或离线计算等分析,以达到工业设备智能运维的目的。我在项目中主要担任架构师角色,主要负责系统架构设计相关的工作。本文以该系统为例,主要论述了ATAM架构评估方法在该项目中的具体应用。首先,通过参考某云的工业互联网系统和该能源公司业务人员收集场景与需求;其次,结合收集的场景和需求,通过评估小组会议描述架构视图和场景实现;最后,通过评估小组会议确定系统质量属性,分析并构造属性模型,并对其中的一些权衡点做折中。通过以上架构评估的实施过程,最终项目顺利上线,获得了公司领导和用户公司的一致好评。

正文:

        随着工业互联网近年来的快速发展,很多电气、能源、电力等传统行业,也都纷纷开始打造工业互联网平台,以实现工业设备数据上云。在云端即可实时掌握设备的具体情况,还可以通过大数据做深度的数据分析和挖掘。进而提升产品的质量和市场竞争力。也正是基于这样的背景下,2020年3月,我们集团下属某能源公司也要为自己的产品如大型变频设备、储能设备打造综合能源服务工业互联网系统。

        该系统主要就是为了采集各种不同设备上报上来的数据,并对其进行解析、结构化,然后存储到数据仓库中,再进一步做数据的分析和挖掘,最终实现这些工业设备智能运维的目的。该系统的主要模块与功能有用户权限管理、物模型管理、产品管理、设备管理、固件管理、物联网卡管理、工单管理、采集并处理设备端上报的数据等等。另外,项目还集成了云之树、鎏云物联两家物联网卡代理商接口以便及时了解SIM卡流量和到期时间等情况,集成了高德地图做设备地图,集成了阿里云短信和友盟推送做消息通知。项目的开发、测试、产品经理等角色合计40余人,耗时十个月。我在项目中担任架构师角色,负责系统的整体架构设计工作。

        架构评估是软件开发过程中的非常重要的一个环节,在软件架构评估中我们通常关注的质量属性包括性能、可用性、安全性、可修改性等。性能是指系统的响应能力,即要多长时间才能对某个事件做出响应或者在某段时间内系统所能处理的事件的个数;可用性是指系统正常运行的时间比例,经常用两次故障之间的时间长度或出现故障时系统能够恢复正常的速度来表示;安全性是指系统能够向合法用户提供服务的同时可以阻止非授权用户访问的企图或拒绝服务的能力;可修改性是指系统能够快速地以较高的性能价格比对系统进行变更的能力,通常以某些具体的变更为基准,通过评估这些变更的代价衡量可修改性。

        为了更好的对我们系统的以上这些质量属性做评估和折中,我们使用了基于场景的评估方法-ATAM方法,下面将结合该项目的评估实践过程说明该评估方法我们是如何实施的。

        第一阶段,场景和需求收集。针对功能场景与需求的收集,主要是通过多次与该能源公司的领导与业务人员开需求会议收集而来。比如,在系统上需要看到每个工业设备的实时数据、故障报警的具体断面数据以供运维人员分析使用。另外,我们还参考了某云上相对成熟的工业互联网系统的功能与实现,从中提取了一些工业互联网应用的共性需求场景。比如,工业互联网系统包含的产品管理、设备管理、固件升级管理等需求都是共性需求,工业设备边缘网关与系统的通信场景、边缘网关固件升级过程场景等等都是共性场景。针对质量属性的场景与需求收集,主要也是来自于该能源公司业务人员,比如系统设备的实时数据请求时间延迟不能大于500毫秒、系统发生故障时需要在半小时内恢复正常、对已有功能的扩展修改调整需要在5天内完成、系统可以检测用户恶意行为并予以人工干预处理等等。

        第二阶段,架构视图与场景实现。在这个阶段,我们由多方人员包含产品、技术、业务人员、业务领导等组成了架构评估小组。首先,对ATAM的评估方法做了详细的介绍,让小组内成员都了解了整个ATAM评估的过程。然后,我作为架构师,对我们的架构视图做了详细的描述,主要包括我们所使用的系统架构为微服务架构,以及我们的架构可以如何实现之前收集的场景与需求。比如,针对产品管理、设备管理、物联网卡管理等系统基础功能,我们有一个专门的控制台微服务提供这些管理功能的增删改查操作;针对数据采集和通信的场景,我们有一个专门的数据采集处理服务;针对页面设备实时数据的展示的需求,我们有专门的websocket微服务,接收kafka的实时数据直接发给前端,也有专门的实时微服务,通过读取redis里的实时数据给前端展示。

        第三阶段,属性模型构造、分析与折中。经过评估小组多次会议之后,我们对单一的质量场景做了分析。性能方面,如设备的实时数据请求响应延迟不能大于500毫秒,设备历史数据的请求要求在2s以内响应;可用性方面,如系统出现故障时要求能在半小时内恢复正常;安全性方面,如系统可以检测用户恶意行为并予以人工干预处理;可修改性方面,如针对已有功能模块的扩展修改调整需要在5天内完成开发、测试、上线。除了单一场景的分析外,我们还对一些存在冲突的场景做了分析,如接口权限控制的控制粒度对系统的安全性和性能将产生影响,为了提升系统安全性,我们牺牲了少部分性能确保了每个接口统一做了接口权限验证。之后,我们输出了质量属性效用树,并对质量场景做了优先级排序,总体而言,对性能与安全性要求是最高的,其次依次是可用性、可修改性。

        该系统经过了以上的架构评估过程,所以在开发阶段都很顺利,同时也让该系统整体的安全性、可用性、性能等等方面都达到了设计的要求。系统在2020年12月已正式上线,之后陆续接入了该能源公司的很多工业设备,有高压变频设备、储能设备、消弧设备等,到目前为止大半年时间接入的工业设备就已经达到了200多台,每天设备上报的数据量也达到了三千多万条。另外,系统运行也相对稳定,并未出过重大故障,还受到了公司领导和用户的一致好评。

        但是还是存在一些不足之处,比如,采集处理模块,使用了Grooovy脚本做动态解析,而Groovy脚本很复杂,只有技术人员可编写修改,而且修改错误会导致使用该脚本的所有解析失效,针对这个问题我们后续还需要支持编辑脚本的时候做模拟解析测试以保证脚本的有效性,具体的做法是,在生效该解析脚本之前,必须先做模拟解析验证,即通过真实的数据做预解析,如果解析未报错,并且解析的数据是完整的则认为模拟解析通过,此时才可真正生效新解析脚本。所以,该系统其实还有很大的提升空间,我们后续会不断对系统进行演化,让该系统越来越好,力争在能源工业互联网领域能闯出一片天。

论基于架构的软件开发方法(ABSD)及其应用

摘要:

        2020年3月,本人所在的公司为集团下属某能源公司开发了一套工业互联网系统。该系统主要负责采集大型工业设备的遥测、遥信数据,再经大数据做实时或离线计算等分析,以达到工业设备智能运维的目的。我在项目中主要担任架构师角色,主要负责系统架构设计相关的工作。本文将以该系统为例,论述基于架构的软件开发方法在项目中的应用。首先,在架构需求阶段,通过参考某云与一些开源的物联网平台再结合业务方需求梳理出系统具体需求;其次,在架构复审阶段,采用基于场景的评估方法保障了项目的质量;最后,在架构演化阶段,灵活运用腾讯出品的TAPD来管理与控制需求的变动。使用了基于架构的软件设计方法,项目最终顺利上线,获得了公司领导层和用户的一致好评。

正文:

        随着工业互联网近年来的快速发展,很多电气、能源、电力等传统行业,也都纷纷开始打造工业互联网平台,以实现工业设备数据上云,在云端即可实时掌握设备的具体情况,真正实现设备智能运维。还可以通过大数据做深度的数据分析和挖掘,进而提升产品的质量和市场竞争力。

        2020年3月,我们集团下属某能源公司也要打造一套工业互联网系统,而我们集团研究院刚好承担了该系统的开发建设工作。该系统主要是为了采集各种工业设备的遥测、遥信数据,并对其进行解析、结构化,然后存储到数据仓库中,再进一步做数据的分析和挖掘,最终实现工业设备智能运维的目的。该系统的主要功能模块有用户权限模块、产品模块、设备模块、固件升级模块、物联网卡模块、工单模块、采集处理模块等等。另外,系统还集成了云之树、鎏云物联两家物联网卡代理商接口以便及时了解物联网卡流量和到期时间等情况,集成了阿里云短信和友盟推送做消息通知。项目的开发、测试、产品经理等角色合计30余人,耗时10个月。我在项目中主要担任架构师角色,主要负责系统架构设计相关的工作。

        在做系统架构设计时,我们经常会使用基于架构的软件设计方法(ABSD),该方法主要需要经历以下六个阶段:架构需求、架构设计、架构文档化、架构复审、架构实现、架构演化。在架构需求阶段,主要包含需求获取、标识构件、需求评审等活动,其中标识构件还可再细分为生成类图、对类图进行分组、把类打包成构件,这些活动之间往往会存在多次循环,才会形成最终的需求;在架构设计阶段,主要包含提出架构模型、映射构件、分析构件相互作用、产生架构、设计评审等活动,审计评审之后可能还会重新对构件映射做出调整,所以其中的活动也存在重复多次的情形;在架构文档化阶段,主要是对架构设计阶段的成果进行分析和整理后形成文档;在架构复审阶段,主要目标是标识潜在的风险,及早发现架构设计中的不足和错误;在架构实现阶段,包含的主要活动有分析与设计、构件实现、构件组装、系统测试等;在架构演化阶段,主要包含需求变动归类、架构演化计划、构件变动、变更构件的相互作用、构件组装与测试、技术评审等活动。

        在使用基于架构的软件设计方法时,我们在架构需求、架构复审、架构演化阶段,确实也遇到了一些问题。下面将结合我们项目中遇到的具体问题及我们的解决方案做进一步的阐述。

        架构需求阶段,通过参考某云与一些开源的物联网平台再结合业务方需求梳理出系统具体需求。由于我们我打造的物联网系统,业务方并不是非常清楚底层设备数据如何上云、上云需要什么支持等等,所以业务方对于底层具体功能并不能给出很好的建议。基于此原因,我们除了参考业务方提出的需求之外,还需要根据物联网系统常有的特性去进一步整理并细化功能需求。对于物联网平台,刚开始我们也没有非常深入的了解,所以我们想到了去参考某云的物联网平台、同时也去参考了一些开源的物联网平台的功能。最终,我们整理出了系统的整体功能需求和质量属性需求等。比如,数据采集处理模块、固件升级模块的需求、产品管理模块中的物模型管理等,我们更多的是直接参考了某云和物联网开源系统中的功能需求;又如,设备模块的管理需求、用户权限模块需求、工单模块需求等等,基本都是直接来自于业务方直接提出的需求。这些需求经过多次需求评审,业务方也经过了确认,最终形成了完整的架构需求。

        架构复审阶段,采用基于场景的评估方法保障了项目的质量。在架构复审阶段,我们要评估我们的架构是否能满足我们的功能需求和质量属性需求,所以我们采用了基于场景的架构评估方法-ATAM方法。首先是场景和需求收集,主要通过多次与该能源公司领导与业务人员开需求会议收集而来,同时某些场景也参考了某云物联网平台和一些开源的物联网平台。其次是架构视图与场景实现,我们由多方人员包含产品、技术、业务人员、业务领导等组成架构评估小组,之后对ATAM的评估方法做了详细的介绍,让小组内成员都了解了整个ATAM评估的过程,再对我们的架构视图做了详细的描述,主要包括我们所使用的系统架构为微服务架构以及我们为何使用微服务架构,还描述了我们的架构可以如何实现之前收集的场景与需求。最后是属性模型构造与分析、折中,经过评估小组多次会议之后,我们对单一的质量场景做了分析,针对多场景交互的权衡点做了折中,最终输出了质量效用树,也分析出了其中的风险点、敏感点、权衡点等。

        架构演化阶段,灵活运用腾讯出品的TAPD来管理与控制需求的变动。在架构演化阶段,刚开始需求变动频繁是很正常的事情,而有些需求的变动可能影响的构件是多个,如果没有对这些需求做归类记录跟踪,变动的需求最终能否落实会变的非常不可控。所以,管理好需求变动就非常有必要了。此时,我们使用了腾讯出品的TAPD平台,在该平台,我们项目维护了一个需求池,需求池里都是用户提出的需求,然后我们几周会有一次迭代,每次迭代其实就是一个架构演化计划,而每一次迭代都会从需求池里拿出比较紧急重要的需求放到迭代中。放入迭代中的同时,会先对需求进行归类打标签,其中一类标签就是归属构件,已有的构件我们已提前维护成了字典,标签里直接勾选即可。同时,我们也会把需求具体负责人填上,这就做到了需求到具体责任人。每一次架构演化之后,我们都会开一次会议针对演化过程做复盘,主要是复盘其中做的好的点与不好的点,好的在项目后续演化会继续推广,而不好的在后续演化中要逐步调整优化。

        该系统因为使用了基于架构的软件开发方法,所以在开发阶段都很顺利,同时也让该系统的可扩展性、重用性等等方面都达到了设计的要求。系统在2020年12月已正式上线,系统上线后也已经做了多轮演化,同时也陆续接入了该能源公司的很多工业设备,有高压变频设备、储能设备、消弧设备等,到目前为止大半年时间接入的工业设备就已经达到了200多台,每天设备上报的数据量也达到了三千多万条。另外,系统运行也相对稳定,并未出过重大故障,还受到了公司领导和用户的一致好评。

        但是还是存在一些不足之处,比如,采集处理模块,使用了Grooovy脚本做动态解析,而Groovy脚本很复杂,只有技术人员可编写修改,而且修改错误会导致使用该脚本的所有解析失效,针对这个问题我们后续还需要支持编辑脚本的时候做模拟解析测试以保证脚本的有效性。所以,该系统其实还有很大的提升空间,我们后续会不断对系统进行演化,让该系统越来越好,力争在能源工业互联网领域能闯出一片天。

论软件系统架构风格

摘要:

        2020年3月,本人所在的公司为集团下属某能源公司开发了一套工业互联网系统。该系统主要负责采集大型工业设备的遥测、遥信数据,再经大数据做实时或离线计算等分析,以达到工业设备智能运维的目的。我在项目中主要担任架构师角色,主要负责系统架构设计相关的工作。本文将以该系统为例,论述架构风格在项目中的具体应用。首先,通过采用面向对象的架构风格,抽象出了很多的对象和行为如用户、产品、设备、物联网卡、产品创建与发布、设备创建投入与退出等;其次,采用了事件驱动,保证了工单状态的变更的同时也能及时通知到相关用户;最后,采用了解释器风格,让系统可以解析不同报文格式的采集数据。使用适合系统的架构风格,让项目最终顺利上线,获得了公司领导层和用户的一致好评。

正文:

        随着工业互联网近年来的快速发展,很多电气、能源、电力等传统行业,也都纷纷开始打造工业互联网平台,以实现工业设备数据上云,在云端即可实时掌握设备的具体情况,真正实现设备智能运维。还可以通过大数据做深度的数据分析和挖掘,进而提升产品的质量和市场竞争力。

        2020年3月,我们集团下属某能源公司也要打造一套工业互联网系统,而我们集团研究院刚好承担了该系统的开发建设工作。该系统主要是为了采集各种工业设备的遥测、遥信数据,并对其进行解析、结构化,然后存储到数据仓库中,再进一步做数据的分析和挖掘,最终实现工业设备智能运维的目的。该系统的主要功能模块有用户权限模块、产品模块、设备模块、固件升级模块、物联网卡模块、工单模块、采集处理模块等等。另外,系统还集成了云之树、鎏云物联两家物联网卡代理商接口以便及时了解物联网卡流量和到期时间等情况,集成了阿里云短信和友盟推送做消息通知。项目的开发、测试、产品经理等角色合计30余人,耗时10个月。我在项目中主要担任架构师角色,主要负责系统架构设计相关的工作。

        在做软件架构设计的时候,为了提高系统的复用性和提升开发效率,我们通常会采用一些架构风格。我们经常采用的架构风格主要有:数据流风格、调用返回风格、独立构件风格、虚拟机风格、仓库风格。数据流风格将前一步处理的结果作为后一步的输入内容,主要包含批处理序列与管道-过滤器两种风格,批处理序列强调的是大量整体的数据一起处理,而管道过滤器强调的是流式数据的处理;调用返回风格主要包含主程序/子程序、面向对象风格、层次结构三种风格,主程序/子程序是面向过程的调用,面向对象风格主要是对象方法的调用,层次结构则是层与层的方法调用;独立构件风格强调的是构件之间不直接交互从而降低系统的耦合性,主要包含进程通信与事件驱动两种风格;虚拟机风格的特点是可以灵活的自定义场景,主要包含解释器风格与规则系统,而规则系统其实是在解释器的基础之上增加了经验规则;仓库风格强调的是以数据为中心,主要包含数据库系统、黑板系统、超文本系统三种风格。

        以上五大类经典的架构风格,并非在系统中都要全部用上,而是根据系统的具体情况选择合适的架构风格。所在,该系统中就选用了其中三种架构风格:面向对象架构风格、事件驱动和解释器架构风格。下面将结合该系统描述这三种架构风格是如何实施的。

        第一,面向对象架构风格。该风格要求我们在前期要尽可能的识别出系统中的对象和相关的行为信息,所以,我们一开始就根据系统的需求,对系统中所包含的对象和行为做了识别。首先,我们根据项目需求,识别并抽象出了很多的对象,如用户、产品、设备、物联网卡、OTA固件、物模型、工单、故障记录、报警记录等。另外,还抽象出了对象的行为,如产品的创建、产品的编辑、产品物模型配置、产品采集配置、产品解析脚本配置、产品发布、产品下线、设备创建、设备编辑、设备投入、设备退出、设备升级固件、设备更新配置、设备关联物联网卡等等。然后,所有的交互,基本都是对象对另一个对象的方法调用,如设备升级固件需要获取固件信息则是设备对象调用了OTA固件对象获取到了固件的信息、设备关联物联网卡获取物联网卡信息时也是通过设备对象去调用物联网卡对象的方法、写入故障报警记录时需要调用设备对象的方法查询设备信息等等。

        第二,事件驱动架构风格。由于该系统的主要目的是要做智能运维,所以,系统的工单的状态变更信息、设备故障报警信息等都需要及时的通知到系统的各类用户,此时我们就使用了事件驱动的风格。如当系统的工单状态从待派单变成已分配区域需要通知到区域经理,从已分配区域变成已派单需要通知到运维人员等等。而通知为了确保高到达率,同时使用了短信通知与友盟推送。其中工单状态变更过程并不需要关心通知情况,这刚好满足我们事件驱动风格的特点。所以为了解耦工单状态变更与通知的过程,我们引入了消息中间件,工单的状态变更事件直接发到消息中间件,通知推送处理模块通过订阅工单的状态变化给系统的各类用户推送APP消息和发送短信通知。另外,当设备产生了故障信息、报警信息时,我们除了要把这些记录写入数据库之外,还会把这些故障、报警信息推到消息中间件,然后通知推送处理模块通过订阅这些故障报警信息,通知到相应的运维人员。

        第三,解释器架构风格。因为该系统采集到设备上报的报文要支持二进制、json等格式,而报文的具体内容参数都不是固定的,针对不同的设备可能会有所不同,所以这就要求系统可以根据具体的设备类型解析出上报的遥测遥信信息。而虚拟机风格中的解释器风格刚好能满足我们的要求,该风格的优点是可以灵活的应对自定义的场景。我们使用了Groovy脚本方式来解析报文,具体做法是将采集的遥测、遥信报文数据附带上设备的必要信息,传入到封装好的数据解析器中,而解析器主要是使用Groovy脚本进行解析并将解析后的固定格式的报文数据返回,至此,报文解析工作就此完成。这种方式,对产品的Groovy脚本的维护要求很高,因为Groovy脚本的复杂度很高,只有专业技术人员才能编写,所以针对这个问题,我们根据现有的几种报文格式,编写了多个报文模板,在产品里维护Groovy脚本只需要选择其中的模板即可,即使后续有添加脚本基本都是我们技术人员参考现有的Groovy脚本去添加Groovy脚本。

        该系统因为使用了以上三种架构风格,所以在开发阶段都很顺利,同时也让该系统的可扩展性、松耦合性、重用性、可修改性等等方面都达到了设计的要求。系统在2020年12月已正式上线,系统上线后,陆续接入了该能源公司的很多工业设备,有高压变频设备、储能设备、消弧设备等,到目前为止大半年时间接入的工业设备就已经达到了200多台,每天设备上报的数据量也达到了三千多万条。另外,系统运行也相对稳定,并未出过重大故障,还受到了公司领导和用户的一致好评。

        虽然,使用架构风格的实践效果显著,但是还是存在一些不足之处,比如,我们所选用的解释器风格,由于Groovy脚本很复杂,只有技术人员可编写修改,而且修改错误会导致使用该脚本的所有解析失效,另外由于使用了Groovy脚本也牺牲了部分的性能,针对后期数据量越来越大可能会有一定的影响。所以,该系统其实还有很大的提升空间,我们后续会不断对系统进行演化,让该系统越来越好,力争在能源工业互联网领域能闯出一片天。