系统架构设计师论文-论软件体系结构的演化
摘要
本文以我参与的某公司“鞋业上云”项目为例,论述了软件体系结构演化方法及其遵循的原则。该项目的目标是构建某鞋厂以运动鞋产品为主的线上电子商城,实现该鞋子企业以线下营销为主转为以线上营销为主的战略目标。包括线上抢购,支付,线下配送,防伪溯源等一系列电子商务功能。在此项目中,我作为系统架构师及主要管理人员,主导了该项目的系统架构设计师等工作。经过实践认为:为了适应用户的新需求、业务环境和运行环境的变化等,软件架构需要不断地进行自身的演化。常见的演化原则有:模块独立演化原则、影响和复杂性可控原则、有利于重构和重用原则、适应新技术和新环境原则。在项目中同时遵从多个原则,保证了业主方对于各项目功能和质量指标的实现,项目获取了成功。
正文
近年来,随着互联网科技的发展,中国电子商务发展迅速,变得和我们日常生活息息相关,也受到了越来越多的企业关注。2023年下半年,某著名的鞋业公司决定发展电子商务商城及线上促销业务,发起了“鞋业上云项目”,实现线上抢购、支付、线下配送、防伪溯源的电子商务功能。该项目投资了3000万,计划6个月完成,并对项目进行公开的招标,我司成功中标。为此2023年10月,我作为该项目的系统架构师,全面负责鞋业上云的项目的架构设计工作,并在项目所以迭代版本中,遵从多个演化原则,实践了软件体系结构演化过程,得到了项目组成员和公司高层的认可。下面重点阐述我在本项目中关于体系结构演化方法的实践。
软件架构的演化和维护的目的,就是为了使软件能适应环境的变化而进行的纠错性修改和完善性修改。软件架构的演化和维护过程是一个不断迭代的过程,通过演化和维护,软件架构逐步得到完善,以满足用户的需求。需要注意的是体系结构的演化需要遵从常用的演化原则,才能避免演化过程中出现的问题。常见的体系结构演化原则如下所示:
1、模块独立演化原则,影响和复杂性可控原则。软件中的各模块(相同制品的模块,如java的某个类或包)自身的演化最好相互独立,或者至少保证对其他模块的影响比较小或影响范围比较小。一个模块如果发生变更,其给其他模块带来的影响要在可控范围内,也就是影响范围可预测,从而进一步保障软件的复杂性在可控范围。
2、有利于重构和重用原则。架构演化要遵从有利于重构原则,使得演化之后的软件架构更便于重构。架构演化最好能维持,甚至提高整体架构的可重用性。
3、适应新技术或新环境原则。软件要独立于特定的技术手段,这样才能够让软件运行于不同平台,架构演化的软件版本比较容易适应于硬件环境与软件环境。
在项目之初,我充分认识到该项目的特点和挑战,由于业主方是一个广受欢迎的运动鞋品牌,可以预见到电子商城APP一旦发布,会引来海量用户的关注,因此业主方要求软件功能必须满足线上下单、支付、物料、溯源、防伪等多种完整业务链功能。由于业务流程链路长、涉及单位多,功能种类繁多、需求变化快、关系到金融体系及风险,因此选择正确的演化方法,遵从常用的演化原则,对于商城平台未来发展建设具有极大的保障作用,架构组经过充分的讨论和调研,决定综合采用多种技术方案,来正确遵从常用的演化原则,确保未来的软件架构版本演化的原则,下文将分别详述项目组为了遵从演化原则所采用的实践方案。
一、业务系统服务化,实现各业务模块独立,来遵从模块独立原则、影响和复杂度可控原则。公司内的各部门可能都有自己的一套系统,并且各自使用了独立的编程语言、运行环境等,如果不做服务化改造,集成这些业务系统会造成很大的耦合性,如果其中一个业务系统实施演化,则会引起周边所有系统做适应性修正。为了能够以解耦的方式有效集成公司各内部的业务系统,由我牵头、各部门配合一起将所有部门业务系统构建成webservice。由于webservice的自包含特点,业务自身采用原来的编程语言,而代码风格、运维特征几乎可以不用改变,业务组织部门也无需调整,仅仅是在原有的基础上扩展了网络HTTP的端口,这样多个业务系统互相的调用,可以采用标准的HTTP协议来交换数据,因此各业务系统可以独立进行体系结构的演化,从而不会影响其他业务系统,降低了演化带来的影响范围。由于标准的网络协议“分隔”了业务模块,因此从架构整体上来看,降低了演化带来的影响范围。由业务系统内部,不会造成“复杂度外溢”,业务系统的服务化,为后面的架构演化打下了坚实的基础。
二、采用分层的架构设计,来遵循有利于重构和重用的原则。分层式体系结构是一种最常见的架构设计方法,能有效地使设计简化,使设计的系统和结构清晰,便于提高重构和重用能力和产品维护能力。在架构设计时,我将整个系统分为表现层,接入层,应用层,存储层,来分别实现不同的系统功能,而每层之间均采用标准协议进行通信。这样每一层都可以分配给不同的团队去负责,独立进行演化设计、实现和部署。例如前端开发团队负责表现层,他们可以由一开始的原始html+css+js的代码结构独自演变成后期的VUE 3.0框架的运用。基础运维团队管理接入层,可以在接入层从一开始的单节点nginx web服务,独自演化成后期的A10硬件负载均衡作为接入点,逐步承担起高并发的接入方案;各业务部门负责应用层,在各自实现服务化的基础上,采用dubbo来管理各个业务系统的服务发现、服务注册,如前文所述,可以实现独自演化;DBA团队负责数据层,从一开始类型单一的mysql单节点数据库,独立演化为后期多类型数据库组成的分布式数据库,并提供数据库代理服务,向应用层屏蔽了数据存储层的异构性,实现了分片透明性,实现了应用层和数据层的解耦。如此分层设计就会带来各层内部可以采用符合自身特点的演化过程,甚至重构也只会把影响局限在该层之内,更带来了冲用的优点。
三、采用虚拟机架构风格,遵从适应新技术、新环境原则。虚拟机体系结构风格是基本思想是人为构建一个运行环境,在这个环境之上,可以解析与运行自定义的一些语言,这样来增加架构的灵活性,来适应运行环境的改变,以及兼容新技术的运用。该项目在架构设计之初,考虑到未来运行环境可能的变化,我决定采用虚拟机架构风格,增加了与操作系统交互的基础构建,封装了与操作系统交互的所有操作。各业务模块必须适应该构建,才能与操作系统进行交互。由于未雨绸缪,架构设计比较完善,在项目上线之后的一年里,在几乎对架构毫无修改的前提下,商城系统成功适配了国产龙芯CPU搭载的龙芯Loongnix基础版操作系统,达成了响应国家“去IOE”的要求。
由于遵从了体系结构的演化原则,保证了商城平台的架构设计及演化,贯穿了需求、设计、开发、运维所有工作流程,以及后续的每一个版本迭代,强有力的保证了商城在线业务的开展。平台上线以来得到了运动鞋行业的持续关注,由于架构每次演化升级都会带来质的提升,得到了甲方高度认可。之后系统架构也将继续优化并升级扩展机房规模,在最近几年的双11和618等秒杀活动场景下,经受了并发的性能考验。这也充分说明了在建设长生命周期的信息系统时,要正确实践体系结构演化的原则,才能持续保证信息系统演化的质量。
