论软件架构评估 原文

返回主题详情 背诵模式

原文文件:论软件架构评估-线上商品交易与运营平台.md

# 论软件架构评估

## 摘要

2024 年 3 月,我参与了某互联网公司线上商品交易与运营平台的建设工作。该平台围绕公司线上交易业务的统一运营需要,实现了商品交易、库存协同和经营分析等工作的集中支撑。在该项目中,我担任系统架构设计师,主要负责总体架构设计、关键技术选型、模块划分、接口规范制定和核心方案评审工作。本文以该系统为例,主要论述软件架构评估在项目中的具体应用。在架构设计和评审过程中,我们围绕质量属性场景分析、效用树优先级排序、风险点与权衡点分析开展架构评估。实践证明,合理的软件架构评估能够帮助项目组提前识别风险,明确质量属性重点,提高方案的可实施性和系统上线后的稳定性。

## 正文

随着公司线上经营规模不断扩大,业务活动从单一的商品展示和订单处理,逐步延伸到活动运营、库存协同、售后服务和经营分析等多个环节,各项业务对信息系统连续、稳定支撑的要求也越来越高。该项目建设前,公司线上交易业务主要依靠原有单体系统和若干后台工具支撑,虽然能够满足早期业务需要,但随着活动数量、用户访问量和订单处理量持续增加,原系统在业务协同和运行效率方面逐渐难以适应发展要求。特别是在活动高峰期,交易请求集中到达,订单生成、支付确认、库存处理和状态查询等环节相互依赖,容易出现响应延迟和状态不一致的情况;运营人员也需要在多个后台之间反复核对活动配置和交易数据,影响了业务处理效率。为了提高线上交易处理效率,规范商品和订单管理流程,降低后续系统维护成本,公司决定建设统一的线上商品交易与运营平台。

本项目于 2024 年 3 月启动,历时 10 个月完成核心功能建设并上线运行,项目组共 21 人。系统采用前后端分离方式建设,服务端以 Java 技术体系为主,并结合网关、缓存、数据库、消息队列和定时任务等技术组件完成系统支撑。平台上线后,用户侧交易流程由统一入口承载,运营人员也可以通过后台集中维护商品活动信息,并统一监控交易和对账情况。我在项目中担任系统架构设计师,主要负责总体架构设计、关键技术选型、模块划分、接口规范制定和核心方案评审,历时 4 个月完成主要架构设计工作。由于该系统对性能、可用性和可修改性要求较高,软件架构评估成为架构设计阶段的重点工作之一。

在架构设计工作开始阶段,我认识到,软件架构评估是进行架构方案选择、质量属性验证和上线风险控制时需要重点考虑的内容。软件架构评估通常在架构设计形成后、详细设计开展前进行,主要围绕架构能否满足需求、质量属性是否得到体现、潜在风险是否可识别等方面进行分析。常见的软件架构评估技术包括质量属性场景、效用树、风险点、敏感点和权衡点等。本项目主要采用了质量属性场景分析、效用树优先级排序和风险点与权衡点分析。其中,质量属性场景分析把抽象要求转化为可讨论、可度量的场景;效用树优先级排序用于将质量属性分解到具体场景并确定关注重点;风险点与权衡点分析用于识别架构决策对系统运行和维护的影响。以下正文将重点描述这些措施的实施过程和应用效果。

在架构评审准备阶段,我们采用质量属性场景分析来明确性能、可用性和可修改性等评估对象。项目早期,业务人员常用“下单要快、系统要稳定、活动要容易配置”等语言描述质量要求,如果直接据此评估架构方案,容易停留在主观判断,难以形成可以验证的结论。为解决这一问题,我组织需求、开发、测试和运维人员,把关键质量要求整理为具体场景,并按照刺激源、刺激、环境、制品、响应和响应度量进行描述。具体做法是围绕活动高峰、支付回传、库存处理和规则调整等场景,明确受影响模块、系统响应和度量口径。以活动开始后用户集中提交订单为例,刺激源是普通用户,刺激是集中下单请求,环境是活动高峰,制品涉及统一网关、订单模块和库存模块,系统响应是完成限流、校验、库存处理和状态反馈,响应度量则关注主流程响应时间和异常订单恢复情况。通过这种场景化表达,项目组能够结合 Spring Cloud Gateway、Redis、RocketMQ 和 MySQL 等方案讨论架构是否支撑关键场景,避免了只凭经验判断架构优劣的问题。

在架构方案比较阶段,我们采用效用树优先级排序来确定评估重点。该平台涉及用户交易、运营管理、支付协作和对账分析等业务,如果把所有质量属性放在同一层面讨论,不但评审时间难以控制,也容易忽视影响上线成败的关键场景。为解决这一问题,我组织项目组以系统总体质量目标为根节点,将性能、可用性、可修改性和安全性作为主要质量属性,再向下分解为活动高峰下单、外部支付延迟、活动规则变更、异常订单追溯等场景,并从业务重要性和实现风险两个角度排序。以活动高峰下单场景为例,该场景与用户体验、交易成功率和库存准确性直接相关,因此被列为重点评估对象。围绕该场景,项目组重点审查了网关限流、Redis 热点缓存、RocketMQ 异步处理和数据库写入压力,并使用 JMeter 和 SkyWalking 验证链路响应情况。通过效用树排序,架构评估从泛泛讨论转变为围绕重点质量属性展开,项目资源也能够优先投入到交易主链路的方案验证中。

在评估结论形成阶段,我们采用风险点与权衡点分析来检查架构决策的影响。架构设计并不是把技术组件简单叠加到系统中,每一项决策都会带来收益和代价。如果只看到缓存提高性能、消息队列削峰、服务拆分便于扩展,就可能忽视数据一致性、链路追踪和运维复杂度等问题。为解决这一问题,我在核心方案评审中要求项目组记录关键决策对应的收益、风险和缓解措施。以库存处理方案为例,项目组原计划在用户下单时直接访问数据库完成库存扣减,这种方式逻辑简单,但在活动高峰期容易造成数据库压力集中。评估后,我们采用 Redis 承担热点库存预占,订单状态变化通过 RocketMQ 通知库存和支付相关模块,MySQL 保存交易结果并作为对账依据。该方案提高了交易链路承载能力,但也带来了短时间数据不一致风险,因此我们补充了幂等控制、消息重试、xxl-job 补偿任务和异常订单复核机制。通过这种风险和权衡分析,项目组没有把架构评估停留在优点描述上,而是提前识别了关键风险,并为上线后的运行维护准备了可执行的处理措施。

整个项目于 2025 年 1 月完成核心功能上线,在公司业务线推广使用。系统上线后,先后支撑了多次业务活动和交易高峰,业务流程能够正常开展,运营和客服人员也能够通过统一平台完成日常处理工作。上线运行期间,系统未发生重大生产事故,少量异常数据能够通过补偿任务和人工复核及时处理,维护工作量处于可控范围。经过一段时间运行,该平台基本满足了线上交易和运营管理需要,提高了业务处理效率,并得到了业务部门认可。项目实践说明,软件架构评估不是附加性的文档工作,而是连接质量属性、架构决策和项目风险的重要环节。

在总结项目经验的同时,我也看到本项目仍然存在一些不足。受项目周期影响,架构评估更多集中在交易主链路和活动高峰场景,对运营报表、客服查询和外部支付异常的场景沉淀还不够充分;同时,部分风险分析结论没有及时整理为团队统一的评审资产。针对这些问题,我们计划继续完善质量属性场景库,把性能、可用性、可修改性和数据一致性等要求纳入常态化架构评审,并结合监控数据持续校准评估结论。通过本项目实践,我认识到,系统架构设计不能只关注方案是否先进,更要通过系统化评估判断方案是否适合项目目标、团队能力和运行环境,只有这样才能设计出稳定、易维护并具备持续演进能力的软件系统。