论基于架构的软件设计方法(ABSD)
试题一论基于架构的软件设计方法及应用
基于架构的软件设计(Architecture-Based Software Design,ABSD.方法以构成软件架构的商业、质量和功能需求等要素来驱动整个软件开发过程。ABSD是一个自顶向下,递归细化的软件开发方法,它以软件系统功能的分解为基础,通过选择架构风格实现质量和商业需求,并强调在架构设计过程中使用软件架构模板。采用ABSD方法,设计活动可以从项目总体功能框架明确后就开始,因此该方法特别适用于开发一些不能预先决定所有需求的软件系统,如软件产品线系统或长生命周期系统等,也可为需求不能在短时间内明确的软件项目提供指导。
请围绕“基于架构的软件开发方法及应用”论题,依次从以下三个方面进行论述。
1.概要叙述你参与开发的、采用ABSD方法的软件项目以及你在其中所承担的主要工作。
2.结合项目实际,详细说明采用ABSD方法进行软件开发时,需要经历哪些开发阶段?每个阶段包括哪些主要活动?
3.阐述你在软件开发的过程中都遇到了哪些实际问题及解决方法。
摘要:
2022年3月,我所在的公司决定研发一个基于云原生理念的“自动化运维管理平台”,由我担任该项目的架构师,负责需求追踪、架构设计和跟踪项目的整体进展,确保项目按时上线。在该项目的开始阶段,我决定采用基于架构的软件设计(ABSD)方法来完成整个软件的开发过程。ABSD是一个自顶向下,递归细化的软件开发方法,ABSD包含需求分析、体系结构设计、体系结构文档化、体系结构复审、体系结构实现、体系结构演化六个阶段,在项目的开发过程中,采用ABSD方法使得项目由整体分析到细节设计,递归细化,逐步进行,使得项目的进展有条不紊,最后该项目成功上线,投入使用。该项目于2024年6月完成,投入450万余元,上线至今,一直稳定运行,该项目投入使用之后,一方面实现了自动化部署(DEVOPS流程自动化),消除了传统工作中运维和和开发之间的壁垒,使得开发、测试可在平台根据需要按需部署,同时平台会对每次发布进行统计,监控发布质量,另一方面,也实现了高效运维,运维人员可在平台中查看所有的基础设施资源的使用情况,包含资源使用情况、成本分析、告警分析等,实现自动化运维,得到了用户的一致好评,大大提高了团队协作效率。
正文:
随着云原生技术的发展,企业也逐渐引入相关技术,在基础设施层,越来越多的企业开始购买云上服务器,如应用服务器企业可选择阿里云的ECS服务器,数据库服务器企业可选择阿里云的RDS,DNS服务企业可选择阿里云的域名解析,云上资源购买十分方便,在页面中点击几下即可购买成功,但在实际工作中,不能随意购买,需要结合企业成本和服务器资源使用情况来综合考量,避免资源浪费,所以对云上资源的成本、资源使用情况的可视化管理就很重要。同时,随着容器技术和微服务架构的发展,企业应用也都选择微服务架构,采用容器的方式部署在kubernets集群中,在这种情况下,应用的快速发布、容器资源管理、监控告警就显得尤为重要。
为了实现云上资源的可视化管理和基于云原生应用的快速发布,我所在的公司决定开发一个“自动化运维”系统,我们称之为云平台,并在2022年3月正式启动该项目的建设工作,我被任命为系统架构设计师,负责系统架构设计工作。该项目总投入450万元人民币,建设周期从2022年3月至2023年6月截止,历时15个月。该系统主要包括应用中心、发布中心、监控中心、成本中心、容器中心、权限管理和变更管理七大模块,应用中心是整个系统的数据中心,其他模块的功能都围绕“应用”来进行资源的展示和操作;发布中心以“应用”为单位,向用户提供应用的快速发布功能;监控中心以“应用”为单位,向用户提供应用的监控告警功能;成本中心以“应用”为单位,向用户展示每个应用的成本;容器中心以“应用”为单位,展示应用的相关容器资源;权限管理是对用户分类,使得不同的用户可看到不同的模块;变更管理主要对云上资源的变更进行管控,避免对云上资源的误操作导致系统故障。
在项目的整个过程,我们采用了基于架构的软件设计(ABSD)方法来完成整个项目的实施过程,下面从需求分析、体系结构设计、体系结构文档化、体系结构复审、体系结构实现、体系结构演化六个阶段来详细说明该项目的实施过程。
在需求分析阶段,主要包含需求获取、构件描述、需求评审。在该阶段,我们对该平台的需求进行了详细的分析,在需求分析过程,我们主要从公司的产品经理、开发、测试、运维、领导层等多角度进行分析,详细剖析每种角色的工作痛点和需求,最后整理出用例图、ER图等,并对需求进行复审,确保需求的准确性。
在体系结构设计阶段,主要包含产生架构模型、构件映射、描述构件之间的关系、产生架构和设计复审。在该阶段,首先根据需求设计架构模型,根据架构模型,进行构件的划分,我们主要将该平台划分为应用中心、发布中心、监控中心、容器中心、成本中心、权限管理等多个构件,并决定采用微服务的方式部署在kubernets 集群,并从多个视图来对其进行描述,包含逻辑视图、开发视图、进程视图、部署视图、同一场景来描述整体架构。
在体系结构文档化阶段,主要产生体系结构规格说明书和基于测试的体系结构需求质量说明书,对所有的架构说明和质量要求等整理成文档,详细记录说明。
在体系结构复审阶段,主要由用户代表和技术专家进行评审,在该阶段,我们主要采用了架构权衡分析法(ATAM)对软件架构进行评审,该方法是基于场景分析的方式,主要关注系统的性能、可用性、安全性、可用性四个质量属性,评估步骤按照场景和需求分析、架构视图和场景实现、属性构造和分析最后对整个架构进行评价和折中,在该阶段,我们仔细分析软件架构的敏感点、权衡点,在性能和安全性之间进行权衡,最后我们还是选择了安全性第一,因为云上基础设施是整个公司的基石,基础设施的稳定是公司提供业务的基础。
在体系结构实现阶段,主要包含构件实现、构件组装、测试验证。在该阶段,该系统主要采用前后端分离的方式来实现B/S架构,前端使用vue框架进行代码的开发,一方面由于vue是基于MVVM实现view和model层的双向数据绑定,同时vue的代码开发更接近于HTML,开发更易理解,即使不会写前端,也能快速上手,便于项目的后期维护。后端采用golang语言实现,一方面由于golang语言的高效性,另一方面由于云原生技术体系全部是基于golang语言开发,选择相同的语言便于接口的相互调用。
在架构演化阶段,主要包含需求分类、演化计划、构件更新、更新构件之间的关系、技术评审、测试验证、演化后计划。在该阶段,主要根据公司业务的发展和用户新需求的提出,对新功能的实现和后期运维。
经过近15个月的项目开发,“自动化运维系统”顺利投入使用,开发人员和测试人员可通过该系统实现应用发布的自动化,无需运维人员的协助,消除了运维和开发的固有壁垒;运维人员可通过该系统高效管理云上资源,实时查看云上资源的使用率和成本,减少资源浪费,提高资源使用率。当然,在本项目中还有一些不足之处,在进行云上资源成本统计时,最初我们通过阿里云的费用接口来拉取各个产品的成本,由于产品很多,写了很多逻辑,后来通过和阿里云的技术人员沟通,可以在阿里云平台上将所有产品的费用一键转储到oss中,直接通过oss的sdk即可快速查询所有产品的费用,后来我们开发人员快速修改下成本获取的逻辑,并没有对项目产生什么影响。由于架构合理且考虑周全,进展顺利,得到了公司技术人员的认可,大大提高了技术团队的协作效率。