论软件架构风格

论软件架构风格

摘要

       2019年11月,我所在的软件公司承接了某保险集团下健康险服务实施管理系统的开发工作,本人有幸参与该项目,并担任系统架构师职务,主要负责软件架构设计和安全体系设计的工作。该项目是基于集团内网,为全国各省市地区分支机构的健康险专员提供7*24小时的不间断服务。在该系统中,笔者结合实际需求,从安全性、稳定性、可扩展性、开发和运维难度等多方面综合考虑,最终为系统选择了层次架构风格和面向对象架构风格。本文以该项目为例,结合具体的业务场景,论述软件架构风格在具体应用。在论述中首先介绍项目概况,包括功能性需求和非功能性需求等,然后针对当下流行的架构风格对比分析,介绍其各自特点,最后结合项目详细介绍层次架构风格和面向对象架构风格的实际应用,以及开发过程中遇到的问题和具体解决方案。经过项目组9个多月的努力,本系统已顺利开发完成,于2020年7月投入生产环境使用。自上线以来未出现重大故障,取得客户和公司领导的一致好评。实践证明,这种架构设计有效地降低了维护成本,提高了系统的安全性,可拓展性,可复用性和可移植性。

正文

       2019年11月,我所在的公司承接了某保险集团下健康险服务实施管理系统的开发工作,本人有幸参与该项目,并担任系统架构师职务,主要负责软件架构和安全体系设计的工作。本文结合作者的实践,以健康险服务实施管理系统为例,论述软件架构风格的具体应用。首先介绍本项目的概况,以及常用的软件架构风格有哪些,并且介绍其各自特点。然后针对笔者参与设计的系统所采用的的架构风格进行具体描述。最后结合项目实际实施情况,对该架构风格进行总体评价,对于设计中遇到的问题进行总结概述。

项目概况

       随着信息技术的蓬勃发展,保险行业使用传统的业务系统已无法满足日益增长的业务量,为集团中众多的健康险专员开发一个稳定、高效、便捷的线上办公的信息系统迫在眉睫。健康服务实施管理系统(Health Service Implementation Management System HSIMS),为企业健康险工作人员提供实时、高效、方便的线上办公服务,如此便利的2B业务系统间接的为健康险消费群体提供了更快更好的产品使用体验。HSIMS系统的建设,充分表现了健康险产品的整个生命周期,系统划分为产品管理、服务管理、协议管理、健康卡管理、供应商管理、服务实施管理、服务反馈管理等多个业务模块。在实际使用时,由健康险专员全程操作,根据岗位职能的不同各自负责不同的业务模块,从而达到高效稳健的业务协作,促进企业的进一步发展。限于篇幅,在此我们不再详细介绍各个模块的具体功能。

架构风格分类

       架构风格定义了用于描述系统的术语表和一组指导构建系统的规则,是系统组织方式的惯用模式,可以为我们的项目提供架构级的通用解决方案。这种架构级的软件重用可以极大提高我们的系统建设进程。软件系统开发中常用的软件架构风格有数据流风格,调用/返回风格,独立构件风格,虚拟机风格,仓库风格。在此笔者列举几类进行详细描述:

       数据流风格包括批处理序列和管道过滤器,其中,管道/过滤器架构风格定义每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这里构件被称为过滤器,连接件就是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入,以此完成一次数据处理。

       调用返回风格包括主程序/子程序、面向对象和层次架构,其中,层次架构风格的特点是每层使用下一层的提供的服务,同时为上一层提供自己的服务,只能见到与自己邻接的层。大的问题分解为若干个渐进的小问题,逐步解决,化整为零,降低系统复杂度。

       独立构架风格包括进程通信和事件驱动,其中事件驱动的架构风格中,构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中其他构件的过程,在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程。一个事件的触发就导致了另一个模块中的过程的调用,提高了系统可扩展性。

       虚拟机风格包括解释器和基于规则系统,该架构风格主要用于自定义规则或步骤,有良好的灵活性;仓库风格包括数据库系统、超文本系统和黑板系统,其以数据为中心,主要用于专家系统、语音识别等领域。

层次风格的具体应用

       在项目启动初期,我们架构组通过开会研讨,列举了HSIMS所需实现的非功能性需求,例如安全性、可修改性、可用性等,然后结合复杂的健康险业务,以及开发和维护的难,最终决定采用层次架构风格和面向对象架构风格。首先采用层次架构风格,将整个系统进行层次划分,共分为五个层次,分别是:表示层、网关层、应用层、服务层和数据层。这样可以充分解决模块之间的耦合性,提升系统可修改性,可扩充性;并且通过层次划分指定了上层结构仅能调用下层服务,下层服务也只能服务于上层结构,以此保证系统的安全性。对于复杂的保险业务需求,我们采用面向对象的架构风格,通过对象的关系可以很好地将健康险概念与数据模型进行映射,充分实现代码的复用,提升系统的可修改性。下面笔者将具体介绍层次结构下的具体应用

       表示层负责代表业务的视图展示,例如核心系统的前端页面、手机APP、H5页面等,通过访问下层网关接口的API进行业务逻辑的交互,从而将数据的变化展示给用户,实现前后端分离部署。

       网关层主要负责用户鉴权、路由转发、流量控制等功能,并且还可以将应用层共有的头部校验提取到网关层利用过滤器的方式实现,一方面可以提高系统的可修改性,减少代码冗余;另一方面可以提高系统的安全性。对于错误请求甚至非法请求可以直接在网关层拦截,对于合法的请求便会根据请求路径转发到下一层(应用层)进行处理。

       应用层主要负责对不同的请求进行服务编排与调用。通过顺序地访问下层服务(服务层)进行业务逻辑的处理,然后进行简单的数据整合完成整个请求的响应。在该层次利用订制的服务调用链,充分实现服务层代码块的复用,降低业务逻辑的耦合性,大大提高系统的可扩展性。

       服务层负责核心的业务逻辑处理,为应用层提供服务支持,通过面向对象的架构风格简化了业务逻辑的复杂性。在该层次中,根据业务逻辑的定义,将各个业务流程的处理尽可能的剥离成单独的服务闭环,并且将公共的服务模块统一提取。充分做到高内聚、低耦合。然后由应用层订制好的服务链,顺序地调用服务层不同的业务模块,从而完成本次请求。

       数据层作为最底层的概念,仅服务于唯一上层,服务层,通过面向对象的架构风格,将复杂的业务概念映射到具体的数据模型上,利用集成的数据层框架完成应用系统到数据库系统的数据持久化操作,为数据的一致性、安全性提供有力保障。

遇到的问题及解决方案

       在系统开发到中期,由于复杂的健康险业务处理再加上层次结构的调用弊端,性能瓶颈逐渐暴露,针对这个问题,经过架构组开会讨论制定了以下三点解决方案:

       首先,针对数据库访问的性能优化,笔者决定使用主从复制的模式实现数据库的读写分离,降低数据库服务器的IO消耗,后期还可以针对服务器做横向扩展。同时增加缓存数据库作为应用系统与数据库系统的中间件,对于业务系统常用到的码表、地址表、配置表等基础信息可以预先缓存到缓存数据库中,进一步提高了数据访问效率。

       其次,对各层次单独部署,采用服务端负载均衡,通过加权最小轮询算法进行请求的分发。可以有效提升服务节点的利用率,通过对不同节点的加权也可以充分的利用高性能的服务器节点。

       最后,引入代码审查工具,针对影响性能的问题点着重排查,及时整改异常代码块。同时,定期组织代码审查会议,为开发人员普及优质代码编写的规范,尤其对于数据层的开发需要重点培训,同样的SQL语句因为写法的不同可能导致执行效率差很多。

       经过项目组9个多月的共同努力,本系统已顺利开发完成,于2020年7月投入生产环境使用。自上线以来未出现重大故障,对于开发阶段担心的性能问题,在及时采取方案处理后也达到了用户期望的效果,取得客户和公司领导的一致好评。实践证明,这种架构设计有效地降低了开发和维护成本,提高了系统的安全性,稳定性,可复用性和可扩展性。通过该项目的设计和开发,笔者也充分认识到,抛开业务支撑空谈架构好坏都是对信息技术的不尊重,没有最完美的架构只有最合适的架构。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aikes902

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值