golang,  软考架构师高级

论软件系统架构评估及其应用

对于软件系统,尤其是大规模复杂软件系统而言,软件系统架构对于确保最终系统的质量具有十分重要的意义。在系统架构设计结束后,为保证架构设计的合理性、完整性和针对性,保证系统质量,降低成本及投资风险,需要对设计好的系统架构进行评估。架构评估是软件开发过程中的重要环节。

请围绕“论软件系统架构评估及其应用”论题,依次从以下三个方面进行论述。

1.概要叙述你所参与管理或开发的软件项目,以及你在其中所承担的主要工作。

2.详细阐述有哪些不同的软件系统架构评估方法,并从评估目标、质量属性和评估活动等方面论述其区别。

3.详细说明你所参与的软件开发项目中,使用了哪种评估方法,具体实施过程和效果如何。

摘要:

2022年3月,我负责了某公司基于云原生理念的“自动化运维系统”的建设项目,由我担任系统架构设计师,负责系统架构设计工作,在该项目的实施过程中,我深刻的体会到架构评估的重要性。架构评估方法主要有架构权衡分析方法(ATAM)和基于场景的软件架构分析方法(SAAM),由于该项目在需求分析后主要关注系统的性能、安全性、可修改性、可用性,需要在多个质量属性之间进行评价和折中,所以我们选择了架构权衡分析方法(ATAM)作为我们的架构评估方案,将系统需求整理为质量属性效用树,综合分析后,完善架构方案,选择合适的架构设计。该项目总投入近450万,历时15个月,于2023年6月交付至今,不仅帮助运维人员高效、安全的管理云上应用和后端服务器资源,同时帮助开发和测试人员实现应用的快速迭代和测试,大大提升了团队之间的协作效率,消除了运维和开发之间的壁垒,得到了用户的一致好评。事实证明架构权衡分析方法(ATAM)能够帮助我们选择合适的系统架构方案,设计出优秀的系统。

正文:

随着云原生技术的发展,企业也逐渐引入相关技术,在基础设施层,越来越多的企业开始购买云上服务器,如应用服务器企业可选择阿里云的ECS服务器,数据库服务器企业可选择阿里云的RDS,DNS服务企业可选择阿里云的域名解析,云上资源购买十分方便,在页面中点击几下即可购买成功,但在实际工作中,不能随意购买,需要结合企业成本和服务器资源使用情况来综合考量,避免资源浪费,所以对云上资源的成本、资源使用情况的可视化管理就很重要。同时,随着容器技术和微服务架构的发展,企业应用也都选择微服务架构,采用容器的方式部署在kubernets集群中,在这种情况下,应用的快速发布、容器资源管理、监控告警就显得尤为重要。

为了实现云上资源的可视化管理和基于云原生应用的快速发布,我所在的公司决定开发一个“自动化运维”系统,我们称之为云平台,并在2022年3月正式启动该项目的建设工作,我被任命为系统架构设计师,负责系统架构设计工作。该项目总投入450万元人民币,建设周期从2022年3月至2023年6月截止,历时15个月。该系统主要包括应用中心、发布中心、监控中心、成本中心、容器中心、权限管理和变更管理七大模块,应用中心是整个系统的数据中心,其他模块的功能都围绕“应用”来进行资源的展示和操作;发布中心以“应用”为单位,向用户提供应用的快速发布功能;监控中心以“应用”为单位,向用户提供应用的监控告警功能;成本中心以“应用”为单位,向用户展示每个应用的成本;容器中心以“应用”为单位,展示应用的相关容器资源;权限管理是对用户分类,使得不同的用户可看到不同的模块;变更管理主要对云上资源的变更进行管控,避免对云上资源的误操作导致系统故障。

在架构设计阶段,我发现有多种架构方案可实现该系统的功能,为了选择合适的架构方案,架构评估是必须的,架构评估方法主要有架构权衡分析方法(ATAM)和基于场景的软件架构分析方法(SAAM),下面分别从目标、质量属性、和评估活动分别介绍这两种架构评估方法。

基于场景的软件架构分析方法(SAAM)的目标是基于多个场景及场景交互的评估,来对软件架构进行分析,SAAM最初关注的质量属性是可修改行,后来扩充为可移植性和可扩充性,SAAM的评估活动包含场景开发、单个场景评估、场景交互评估、体系结构描述、总体评估。架构权衡分析方法(ATAM)的目标是对多个质量属性进行评价和折中,对软件系统架构进行评估,ATAM关注的质量属性包含性能、可修改性、安全性、可用性,ATAM的评估活动包含场景和需求分析、架构视图和场景实现、属性模型构造和开发、最后是评价和折中。

由于ATAM主要关注性能、安全性、可修改行、可用性,这四个质量属性正是我们项目关注的重点,所以我选择了ATAM作为该项目的架构评估方案。ATAM架构评估方案包含四个阶段,主要为描述和介绍阶段、调查和分析阶段、测试阶段和报告阶段,下面我将从这四阶段分别介绍该项目的架构评估过程。

在描述和介绍阶段,作为该项目的架构设计师,首先由我向大家介绍架构权衡分析方法(ATAM)的目标、关注的质量属性和评估活动,让大家了解该评估方法的运作流程。然后由我公司的“自动化运维系统”的产品负责人介绍该项目的业务动机、关键业务需求(包含开发、运维、测试、产品)方的主要痛点,确保大家了解该系统的主要目标,最后由我来介绍“自动化运维系统”的架构设计,介绍平台涉及的各方用户包含开发、运维、测试、产品的交互方式和技术方案等。

在调查和分析阶段,对开发、运维、测试、产品各方提出的需求进行分类整理,生成质量属性效用树,如开发、测试、产品不能操作云上的基础设施资源,这些基础设施的增删改只有运维人员有权操作,这归类为安全性。基础设施中一台服务器或集群宕机,不能导致整个业务瘫痪,这归类于可用性。系统在后期迭代过程中,要容易增加新功能,这归类于可修改性。该系统支持公司技术人员100人同时进行应用的发布,这归类于性能。

经过调查多方需求,收集了上百个场景,根据重要性对这些场景设置了权重,初步分析后,我们发现大多数场景的权重都集中于安全性和可用性,由于该系统是公司内部人员使用,技术人员有大约2000人左右,并发量也不会很大,所以性能的权重相对较低。但是安全性和可用性权重很高,因为基础设施的稳定是整个公司业务的基石。

在测试阶段,根据质量属性的优先级来验证我们架构方案的合理性。针对安全性,首先通过权限管理模块,控制开发、测试、运维只能看到指定的模块,同时后端接口采用token验证,只有登陆的用户才有权访问后端借口,由于运维人员具有最高权限,为了基础设施的文档,在变更管理模块,我们对运维人员对基础设施的变更进行管控,每次变更要提交申请,还需要有另外一位运维工程师进行确认,确认变更过程安全后才能采取措施。针对可用性,由于系统应用部署在kubernets集群中,我们部署了两套kubernets集群,当一套集群故障时,另一套集群能够提供服务,同时应用节点使用kubernets集群的deployment资源,当应用发布升级时,确保新版的应用发布成功后才会删除旧版的应用,大大提升了系统的安全性。

在报告阶段,我们将评估过程和评估结果汇总成文档,文档内容包含质量属性效应树、质量属性权重、风险点评估、权衡点决策、会议记录等。

经过近15个月的项目开发,“自动化运维系统”顺利投入使用,开发人员和测试人员可通过该系统实现应用发布的自动化,无需运维人员的协助,消除了运维和开发的固有壁垒;运维人员可通过该系统高效管理云上资源,实时查看云上资源的使用率和成本,减少资源浪费,提高资源使用率。当然,在本项目中还有一些不足之处,在进行云上资源成本统计时,最初我们通过阿里云的费用接口来拉取各个产品的成本,由于产品很多,写了很多逻辑,后来通过和阿里云的技术人员沟通,可以在阿里云平台上将所有产品的费用一键转储到oss中,直接通过oss的sdk即可快速查询所有产品的费用,后来我们开发人员快速修改下成本获取的逻辑,并没有对项目产生什么影响。由于架构合理且考虑周全,进展顺利,得到了公司技术人员的认可,大大提高了技术团队的协作效率。

留言

您的邮箱地址不会被公开。 必填项已用 * 标注

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。