Day29-11|8.3.2 阶段2——调查和分析:识别质量场景、敏感点与架构风险

一、教材定位

ATAM 的阶段2“调查和分析”是在阶段1建立共同认知之后,深入分析业务驱动因素、质量属性场景和架构决策。它不是泛泛地询问“架构有没有问题”,而是通过利益相关者参与、场景生成与排序、架构策略分析和风险识别,判断架构是否能够满足最重要的质量目标。阶段2的结果将直接影响后续权衡分析、风险汇总和评估结论。

二、阶段2的主要任务

阶段2可以概括为四项任务:收集并整理质量属性场景,确定场景优先级,分析架构对场景的响应,识别敏感点、权衡点和风险。调查是为了获得事实和需求,分析是为了建立场景与架构决策之间的关系。

任务 关键问题 主要输出
场景收集 不同利益相关者最关心什么 场景池
场景排序 哪些场景最重要 优先级列表
架构分析 架构如何响应场景 策略与影响
风险识别 哪些地方可能不满足 风险、敏感点、权衡点

三、质量属性场景的收集

场景应由多个利益相关者共同提出,而不是由架构师独自编写。业务人员提出业务价值和关键流程,用户提出体验和时效要求,开发人员提出变化与测试要求,运维人员提出故障和恢复要求,安全人员提出攻击和合规要求,管理者提出成本和交付约束。

收集场景时要鼓励参与者描述真实事件,而不是使用抽象形容词。例如“系统要可靠”可以进一步追问:什么故障会发生?发生在什么时间?影响什么业务?系统要怎样响应?允许多长时间恢复?数据能否丢失?通过追问,才能将愿望转换成可分析场景。

四、场景的分类与整理

场景可以分为一般场景、具体场景、变化场景和故障场景。一般场景提供质量属性方向,具体场景用于当前系统分析,变化场景用于评价可修改性和可扩展性,故障场景用于评价可用性和可靠性。

场景整理时要合并重复内容,澄清术语,补充缺失要素,标明来源、利益相关者、业务价值和初步优先级。不能因为多个参与者使用不同语言就简单当成不同场景,也不能把本质不同的场景强行合并。

五、场景排序

ATAM 通常要求利益相关者对场景进行排序,以便评估团队优先分析高价值、高风险和高影响场景。排序可以考虑业务重要性、发生概率、损失程度、质量属性优先级、验证难度和架构影响范围。

常见方法是让参与者分别选择最重要的场景,再汇总得到优先级;也可以使用高、中、低三级分类。排序的目的不是获得精确数学结果,而是形成共同的优先级认知。当业务负责人认为交易正确性最高,运维人员认为恢复时间最高,团队需要讨论两者的业务影响和依赖关系。

六、架构策略分析

针对优先级高的场景,评估团队要分析架构如何响应。架构策略包括模块划分、数据组织、通信方式、缓存、复制、事务、限流、冗余、权限、监控、备份和恢复等。分析时要沿着场景的刺激、处理路径、状态变化和异常路径走一遍。

例如针对“节点故障后业务五分钟内恢复”,不能只指出“部署集群”,还要分析健康检查如何判断故障,负载如何切换,会话如何处理,未完成请求如何处理,数据库是否同步,消息是否重复,恢复后如何校验,监控是否能够确认恢复完成。

七、敏感点

敏感点是对某一质量属性有显著影响的架构决策、参数或机制。它可以是缓存容量、数据库索引、线程池大小、复制延迟、服务拆分边界、消息持久化策略、认证方式或网络带宽。

敏感点不一定是风险。它表示某个因素变化可能显著影响质量属性。例如缓存命中率是性能敏感点,如果经过压测证明即使命中率下降仍能满足目标,它就不一定构成风险。但敏感点应被记录和监控,因为它是系统质量的关键杠杆。

八、权衡点

权衡点是同时影响两个或多个质量属性的架构决策。缓存既影响性能也影响一致性,异步通信既影响吞吐和耦合也影响实时性和可追踪性,多副本既影响可用性也影响成本和一致性,统一平台既影响复用和维护也影响灵活性和局部自治。

识别权衡点时要问:改善了什么,牺牲了什么,牺牲是否在业务可接受范围内,有没有补偿措施,如何监控和验证。权衡点不应被简单标记为好或坏,而要结合场景和优先级判断。

九、风险识别

风险是架构可能无法满足质量目标的不确定因素。典型风险包括性能目标缺少容量证据,外部依赖没有可用性承诺,数据库复制延迟不明确,安全边界没有清晰授权,异步流程没有幂等和补偿,配置变化不可审计,团队缺少关键技术能力,以及供应商版本即将停止支持。

风险登记应包含描述、来源、影响、概率、暴露条件、缓解措施、验证方式、责任人和状态。风险不是越多越好,关键是明确哪些风险可能导致重大返工或生产事故。

十、阶段2的调查方法

调查可以采用访谈、工作坊、问卷、架构走查、数据分析、故障复盘、原型试验和代码与配置检查。访谈适合发现隐性需求和历史经验;工作坊适合让多个角色共同排序和权衡;数据分析适合验证实际负载和故障;原型适合解决技术不确定性。

调查过程中要区分事实、意见和假设。事实可以由文档、日志和测试支持;意见需要说明来源和依据;假设需要列为待验证事项。否则评估结论容易被个人经验或部门立场影响。

十一、阶段2的分析记录

分析记录可以使用“场景—架构策略—敏感点—权衡点—风险—验证证据”的表格:

场景 架构策略 敏感点 权衡点 风险 证据
峰值查询 缓存、读扩展 命中率、连接池 性能与一致性 缓存失效后数据库过载 压测
节点故障 多实例、健康检查 切换时间 可用性与成本 数据库仍是单点 演练
新增规则 策略和插件 扩展点契约 灵活性与复杂度 插件质量不可控 原型
越权访问 细粒度授权、审计 权限缓存 安全与性能 权限撤销延迟 安全测试

这种记录能够让后续复评快速定位问题,也能为论文提供清晰的架构实践素材。

十二、案例分析:物流平台调查和分析

某物流平台需要支持订单、运输、仓储、轨迹和结算。阶段1演示后,阶段2组织业务、运维和开发人员提出场景。业务方最关心订单状态准确和轨迹及时,运维关心高峰和外部承运商故障,开发关心新增承运商和规则变化。

场景排序后,优先分析高峰下订单受理、承运商接口中断、轨迹重复上报、新增承运商协议和结算数据一致性。分析发现,订单状态服务、轨迹事件处理和结算账务之间存在强依赖;轨迹采用事件接入,但缺少幂等键和乱序处理;承运商适配器可扩展,但接口错误语义不统一;结算数据直接读取订单库,存在边界耦合。

评估团队把轨迹事件ID、设备时间和接收时间作为关键数据,增加去重和乱序处理;通过适配器统一承运商协议和错误模型;将结算所需事实通过版本化事件提供,减少直接读库;对外部接口设置超时、重试、熔断和人工补偿。最终形成风险清单和原型验证计划,而不是在阶段2直接修改所有代码。

十三、常见错误

第一,只邀请架构和开发人员,忽略业务、运维和安全角色。第二,收集大量场景却没有排序,导致评估失去重点。第三,把技术方案当成场景,直接说“使用消息队列”,却没有说明要解决什么刺激和响应。第四,发现问题但不区分敏感点、权衡点和风险。第五,没有记录验证证据和责任人,后续无法跟踪。

十四、练习题

题1

阶段2为什么需要对场景排序?

参考答案

评估时间和资源有限,不可能对所有场景同等深入。排序可以优先分析业务价值高、风险大、影响范围广或难以逆转的场景,形成共同认知并提高评估效率。

题2

如何区分敏感点、权衡点和风险?

参考答案

敏感点是显著影响某个质量属性的决策或参数;权衡点是同时影响多个质量属性的决策;风险是可能导致质量目标无法满足的不确定因素。一个架构因素可以同时属于敏感点和权衡点,也可能在缺少证据时构成风险。

题3

为什么调查阶段要区分事实、意见和假设?

参考答案

事实有资料或测试支持,意见反映参与者判断,假设是尚未证实的前提。区分三者可以避免把个人观点当作结论,并能为假设安排后续验证,提升评估可信度。

十五、论文写作素材

论文中可写“在 ATAM 调查和分析阶段,我组织不同利益相关者收集质量属性场景,按业务影响和风险排序,逐项分析架构响应策略。通过表格识别缓存命中率、复制延迟和接口契约等敏感点,识别性能与一致性、可用性与成本之间的权衡点,并将外部依赖、容量不足和故障补偿缺失登记为风险。对关键风险安排压测、原型和故障演练,形成可追踪的评估证据。”

十六、今日复盘

阶段2的主线是:收集场景、排序场景、分析策略、识别敏感点、发现权衡、登记风险、安排验证。答题时不要停留在“开展调查”,要写清调查对象、分析方法、风险分类和输出证据。