那么,到目前为止我们研究了什么?
- 可扩展性:系统如何处理用户、数据和复杂性的增长。
- 可靠性:系统如何在各种条件下始终如一地满足用户期望。
- 可用性:确保系统在需要时可运行且可访问。
- 可维护性:系统随着时间的推移进行修改、修复或增强的难易程度。
- 可扩展性:系统如何适应新特性或修改而无需进行大规模重写。
- 可用性:系统架构如何支持直观、高效的用户体验。
- 安全性:系统如何保护数据、用户和自身免受威胁。
- 性能:系统如何提供速度和效率。
- 可测试性:通过设计建立信心。
为什么需要主要 NFR
每个重要的系统都有一个决定其成功的主导品质。想想 Netflix - 虽然他们关心安全性、可维护性和其他品质,但他们的主要 NFR 是可用性。他们以“服务不可用比服务不一致更糟糕”的原则而闻名。
当您面临架构权衡时,这一主要 NFR 将成为您的决定性因素。它是您在架构决策中的“决胜因素”,有助于协调团队的努力以实现共同目标。
次要 NFR 的作用
次要 NFR 是对主要 NFR 的补充,可在以下情况下提供额外指导:
- 主要 NFR 不会受到决策的显著影响
- 多种解决方案同样满足主要 NFR
- 你需要平衡相互冲突的顾虑
如何选择你的北极星 NFR
在选择主要和次要 NFR 时,请考虑以下因素:
- 商业背景
- 您的核心业务主张是什么?
- 如果失败了会对业务造成什么最重大的影响?
- 您的用户最看重什么?
- 您的系统的性质是什么(面向用户、后端、数据处理)?
- 您的系统的关键操作是什么?
- 您不可协商的要求是什么?
- 监管要求是什么?
- 行业标准是什么?
- 竞争对手优先考虑什么?
常见的主要-次要 NFR 组合
以下是基于系统类型的一些典型组合:
- 财务系统
- 首要:安全
- 次要:性能、可靠性
- 首要:可用性
- 次要:可扩展性、性能
- 首要:可靠性
- 次要:安全性、可维护性
- 首要:可扩展性
- 次要:性能、可用性
对架构决策的影响
让我们看看明确的主要和次要 NFR 如何影响决策:
示例:消息处理系统
主要 NFR:可扩展性 次要 NFR:可靠性、可维护性
这种结合将导致如下决策:
- 选择事件驱动架构而非整体架构
- 实现异步处理
- 使用分布式数据库
- 实施断路器
- 针对水平扩展进行设计
权衡分析示例:
选择数据库时:
- 选项 A:传统 RDBMS
- 高一致性
- 可扩展性有限
- 维护更简单
- 最终一致
- 高度可扩展
- 维护更加复杂
实际实施步骤
- 记录你的 NFR 层次结构
- 明确说明主要和次要的 NFR
- 解释选择背后的理由
- 与所有利益相关者分享
- 包括 NFR 影响分析
- 根据 NFR 层次确定优先级
- 记录权衡
- 为每个优先级 NFR 定义成功标准
- 设置监控和报告
- 定期检讨及调整
结论
将 NFR 视为架构的北极星,可让决策更加清晰,并帮助您的团队朝着共同目标努力。虽然所有 NFR 都很重要,但明确优先事项有助于驾驭复杂的架构选择。