【新东网技术大咖带您走进软件架构设计】软件架构设计那点事儿
发布时间: 2016-11-18 12:04:02
文/郑实 通信研发部
新东网自2001年成立以来,掌握大数据、云计算、通信、物联网及区块链等信息技术,拥有一支逾16年经验的强大IT团队。为沉淀企业技术实力,继续发挥行业优势,《东网快讯》特邀新东网技术大咖带您走进这些先进信息技术,揭秘新东网16年来的技术成果,每周五发布。
计算系统的软件构架是指该系统的一个或多个结构,它由软件组件、组件的外部可见特性以及这些组件之间的关系组成。
系统架构设计一般分为三个阶段
第一阶段:架构分析即架构准备阶段
本阶段是架构实践中最常见的短板,这一阶段的目的是分析业务需求和约束背后的衍生需求、发现遗漏需求、确定关键功能、确定关键质量、权衡质量属性之间的矛盾关系。
系统架构设计失败的原因,最常见的有以下几个:
1. 遗漏至关重要的架构影响因素(失败率约50%);
2. 不能驯服频繁变化的需求(失败率约40%);
3. 不能覆盖架构各方面(失败率约30%);
4. 不能验证架构并作出调整(失败率约40%);
这些导致业主方得不到真正满足他们需求的系统,因此我们在架构准备阶段要确定系统关键质量和关键功能。
确定关键质量有以下五大原则:
1. 考虑多方涉众
业主方不仅关注功能,同时也需要质量。业主方关注的质量可能包括易用性、性能、持续可用性、稳定性和健壮性等。业主方不一定是最终用户,比如电信网上营业厅系统的客户是电信公司,但最终用户可能是终端用户或系统配置员,他们所关注的质量属性可能并不一致。
2. 检查性思维
随时检查各个质量属性,判定每一项是否确实算得上“关键质量”,从而防止遗漏关键需求。
3. 识别矛盾+划定优先级;
4. 严格程度符合领域与规模特点;
5. 关键质量属性个数根据项目、产品、平台不同而不同。
确定关键功能要区分出核心功能、必做功能、高风险功能、独特功能。关键功能子集的确定不存在所谓的标准答案,关键功能所占比例应灵活确定,大概占20%~30%。
第二阶段:架构分割即概要架构阶段
本阶段是大型系统成败关键,根据重大需求,确定概要架构。概要架构要满足“架构=组件+交互”的基本定义,对高层组件的“职责”进行笼统界定,并给出高层组件的相互关系,不应涉及接口细节。实际上,架构设计的驱动力是“功能+质量+约束”,概要架构阶段根据重大需求、特殊需求、高风险需求形成稳定的高层架构设计成果。
概要架构可分为3个步骤:
1. 基于关键功能(而不是对所有功能)、借助鲁棒图(而不是序列图)进行初步设计;
2. 综合初步设计确定高层分割;
3. 考虑非功能性需求做出相应决策,非功能性需求包括可用性、安全性、性能、易用性、可修改性、可测试性等,架构设计更应该关注非功能性需求,考虑非功能性需求要趁早。
第三阶段:架构划分即细化架构阶段
本阶段是团队大规模并行开发基础阶段,要细化架构设计,关注不同视图。在概念架构阶段输出系统解决方案,但是方案并不等同于架构。方案是“项目+需求+架构”的总览,方案包含一定的架构内容,但是架构设计的工作还远未完成,还需细化架构。
细化架构与概念架构是存在差异的。
在细化架构中,接口占据非常核心的地位,而概念架构并不关心明确的接口定义(只有抽象的组件和抽象的交互机制)。
细化架构重视通过子系统和模块来分割整个系统,并且子系统往往有明确的接口;而概念架构中只有抽象的组件,这些组件没有接口。
细化架构基于接口编程、消息机制或远程方法调用进行实在的交互;而概念架构的交互是“概念化”的,如“A层使用B层服务”。
细化架构包括逻辑架构、物理架构、运行架构、开发架构、数据架构。
最后在架构设计过程中要持续贯穿关注非功能需求,包括可用性、安全性、性能、易用性、可修改性、可测试性等,架构设计应该关注非功能性需求,更要提前关注非功能性需求。它是一个系统是否可用、好用的关键,也是一个系统架构设计是否成功的关键。