一、题目
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。体系结构风格反应了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
请围绕“论软件架构风格”论题,依次从以下三个方面进行论述。
1. 概要叙述你参与分析和设计的软件系统开发项目以及你所担任的主要工作。
2. 软件系统开发中常用的软件架构风格有哪些?详细阐述每种风格的具体含义。
3. 详细说明你所参与分析和设计的软件系统是采用什么软件架构风格的,并分析采用该架构风格设计的原因。
二、答题思路
三、范文
本人于2016年1月参与浙江省某市公交集团“新能源车辆数据远程监管系统”,该项目核心目标是实现整车传感器数据共享和有效流转,在该项目组中我担任系统架构师岗位。本文将主要阐述项目中主要应用的三种架构风格,其中包括解释器架构风格、隐式调用风格、B/S架构设计风格,这些架构风格非常适合解决不同层次的问题域。底层的是整车数据的差异性、以及复杂多样的数据协议等一系列难题,我们使用解释器架构风格,这一风格的突出特点便是良好灵活性,它巧妙的解决了整车间传感器数据协议巨大差异。中间层关于构件的架构设计我们采用了隐式调用风格指导架构设计工作,进一步减低耦合度,让系统架构更加清晰。最后是应用系统设计我们主要采用B/S架构风格,能够解决系统推广难、维护难等行业性问题。【摘要】
随着国家十三五计划中-能源战略的深入和推广,该市公交集团自2016年1月起全面停止采购燃油机公交车,规划到2020年纯电公交车采购占比必须在70%以上,同时配套将车联网方面的系统建设列为建设重点。不管从新能源营运车辆补贴监管、安全监控或者公交公司自身的营运和机护需求,都要求有新的车联网系统对他们进行全方位的支持,而我司是该公交的主要仪表与can模块产品的主要供应商,全市4000多台车中有3000多辆是我司的产品,我司不仅掌握熟悉该公交整车数据而且在车联网底层can数据有非常明显的领域知识优势,因此2016年1月我司被该市公交集团委托建设公交集团车联网一体化项目,该项目的主要核心难点有整车数据通讯的巨大差异性、系统业务涉及面广、系统推广与维护性的难度把控这三大难题。本项目组全体成员共有27人(不含业主方),我在项目中为担任系统架构师职务,架构小组共4人,我主要职责负责整体架构设计与中间件选型,该项目建设过程持续了7个月,2016年8月顺利通过验收。【项目背景】
架构风格是一组设计原则,是能够提供抽象框架模式,通常是特定领域的通用解决方案,能够提高软件设计的重用,在我们的领域虚拟机风格与独立构件风格、B/S是最常用的。虚拟机风格包含了解释器架构风格与基于规则系统,解释器架构风格能够提供灵活的解析引擎,这类风格非常适用于复杂流程的适应性处理。独立构件风格包括进程通讯风格与隐式调用风格,进程通讯风格强调构件间通过连接件进行通讯,而隐式调用风格支持通过消息订阅和发布触发监听监控和信息交互,独立构件风格的应用能够较大的减低系统耦合度,提高架构的可修改性,B/S架构风格是基于浏览器和服务器的软件架构,它主要使用http协议进行通信和交互,极大的简化客户端的工作,客户终端极易推广和维护.【过渡点题】
底层架构我们使用解释器风格来满足整车数据兼容性需求。解释器风格是虚拟机风格中的一种,具备良好的灵活性,在本项目中我们的架构设计需要面临超过4000台车共86种不同can数据协议的适配和融合,为了支持不同整车厂的不同通讯报文,在编写解释器架构的使用,我们对can数据结构进行了抽象,can数据的每一帧包含12byte,其中CanID占用前4个字节中的29个位,can数据部分占用后8个字节,我们将can协议中的ID和数据进行可建模和算法构建,将协议标识(自定义)最为一个根节点,以canid作为根节点下的叶子节点,使用XML的数据结构映射成了有整车协议链-数据帧-数据字节-数据位这4层的数据结构,核心的代码采用jdom.jar与java的反射机制动态生成java对象,搭建一套可以基于可变模板的解释器,协议模板可以根据公交公司提供的整车协议制作,支持协议模板热部署,这个模板能够将串行直接映射成java的可序列化对象,将协议的复杂度简化。最终将可修改性转移到了配置文件中,那么在后期整车品牌和批次增加的情况下字需要增加协议映射XML文件即可,不需要改动代码。提高了可修改性,规避了can数据巨大差异带来的困扰。【正文】
中间层,我们使用独立构件风格中的隐式调用来简化构件间的交互复杂度,减低系统耦合度。主要的实现手段是,我们采用了一个开源的消息中间件作为可用构件,这个构件式apache基金会下的核心开源项目activemq,它是一款消息服务器,其性能和稳定性久经考验,由于存在多个业务应用如运营指挥调度、自动化机护、新能源电池安全监控等,这种多web应用的情况不适合采用进程通讯方式,因此采用activemq发布与订阅的机制,能够有效解决耦合问题,不同的主题消息对应不同的订阅动作,而且我们使用的spring框架,完全基于配置能够非常好的管理消息队列,其中整车安全主题、运营调度主题、机护维修主题存在于不同队列,由三个不同的web应用系统监听,基于消息中间件的架构设计能够让系统的构件化思路得到良好实施,即使设计的业务面广也不会带来高耦合度。【正文】
应用系统层,我们主要采用B/S的架构风格,主要用于解决公交推广难、维护难得问题,由于大型的公交集团下属有多个公交公司,他们之间是走企业内网,无法通过远程调试完成客户端安装或者调试,并且各个公交公司非常分散,距离也非常的远,前期推广与后期维护更新客户端存在极大的不便,这块没有解决好会带来进度的拖延和成本的增加。现在的html标准已经上升到了html5,一些如本地缓存、websocket等新特性让浏览器与客户端具备了一样优秀的性能,有改动只要改动服务器即可。采用b/s架构的另外能够从将业务系统风格的较为独立,如系统配置权限业务系统规划等,我们采用了单点登录和门户集成等技术让应用的分类变得更加清晰。采用了这种架构风格只要有浏览器即可访问系统不需要任何夸户端安装、即使有后期修改也只需要更新服务器版本不需要更新客户端,规避了客户端故障率高等项目风险。【正文】
解释器风格让我们的项目中轻松兼容不同整车的数据协议其中包括宇通、中车、比亚迪客车等多家整车厂的协议,而且几乎不用耗费任何额外的开发量,协议维护也非常方便,这方面的响应能力得到了业主的肯定。基于隐式调用的架构风格,让数据底层的解析和各个应用能够达到状态监控和数据定制等优点,这给架构带来高内聚低耦合的内在质量,让我们的架构能够适应较大的需求变动,改动快、易扩展。基于B/S架构就是推广快,实时快,系统更新即可完成,不用更新客户端,例如如界面上需要优化,改一下Javascript脚本就可以看到效果。【结尾-过渡】
整个项目历经7个多月,与2016年8月完成验收,至今也已经运行1年多了,除了几次网络调整导致的短时间服务暂停外,还未有重大的生产事故,项目组现在留1个开发人员和1个售后在维护,系统的维护量是可控的,系统运行也比较稳定。【结尾-运行效果】
不足之处,在推广过程中我们忽略了个别分公司PC的配置,他们的PC因为需要兼容老的应用软件客户端而不敢升级这些老旧的PC机还处于XP系统,其浏览器根本不支持html5,这些也导致了部分的系统使用障碍,我们的处理方式只能建议他们更换电脑。【结尾-不足】