NFR:软件设计中的架构北极星

欢迎来到我们对软件架构中非功能性需求 (NFR) 的探索的最后一部分!在深入探索单个 NFR 之后,是时候了解它们如何共同指导架构决策,以及为什么选择主要和次要 NFR 是构建不断发展的系统过程中非常关键的一步。

那么,到目前为止我们研究了什么?

  1. 可扩展性:系统如何处理用户、数据和复杂性的增长。
  2. 可靠性:系统如何在各种条件下始终如一地满足用户期望。
  3. 可用性:确保系统在需要时可运行且可访问。
  4. 可维护性:系统随着时间的推移进行修改、修复或增强的难易程度。
  5. 可扩展性:系统如何适应新特性或修改而无需进行大规模重写。
  6. 可用性:系统架构如何支持直观、高效的用户体验。
  7. 安全性:系统如何保护数据、用户和自身免受威胁。
  8. 性能:系统如何提供速度和效率。
  9. 可测试性:通过设计建立信心。

为什么需要主要 NFR
每个重要的系统都有一个决定其成功的主导品质。想想 Netflix - 虽然他们关心安全性、可维护性和其他品质,但他们的主要 NFR 是可用性。他们以“服务不可用比服务不一致更糟糕”的原则而闻名。

当您面临架构权衡时,这一主要 NFR 将成为您的决定性因素。它是您在架构决策中的“决胜因素”,有助于协调团队的努力以实现共同目标。

次要 NFR 的作用
次要 NFR 是对主要 NFR 的补充,可在以下情况下提供额外指导:

  1. 主要 NFR 不会受到决策的显著影响
  2. 多种解决方案同样满足主要 NFR
  3. 你需要平衡相互冲突的顾虑
例如,如果您的主要 NFR 是可扩展性,则您可以选择安全性和可维护性作为次要 NFR,以确保您的扩展解决方案保持安全和可管理。


如何选择你的北极星 NFR
在选择主要和次要 NFR 时,请考虑以下因素:

  1. 商业背景
    • 您的核心业务主张是什么?
    • 如果失败了会对业务造成什么最重大的影响?
    • 您的用户最看重什么?
  • 系统特点️
    • 您的系统的性质是什么(面向用户、后端、数据处理)?
    • 您的系统的关键操作是什么?
    • 您不可协商的要求是什么?
  • 行业要求
    • 监管要求是什么?
    • 行业标准是什么?
    • 竞争对手优先考虑什么?

    常见的主要-次要 NFR 组合
    以下是基于系统类型的一些典型组合:

    1. 财务系统
      • 首要:安全
      • 次要:性能、可靠性
  • 电子商务平台
    • 首要:可用性
    • 次要:可扩展性、性能
  • 医疗保健系统
    • 首要:可靠性
    • 次要:安全性、可维护性
  • 社交媒体平台
    • 首要:可扩展性
    • 次要:性能、可用​​性


    对架构决策的影响
    让我们看看明确的主要和次要 NFR 如何影响决策:

    示例:消息处理系统
    主要 NFR:可扩展性 次要 NFR:可靠性、可维护性

    这种结合将导致如下决策:

    • 选择事件驱动架构而非整体架构
    • 实现异步处理
    • 使用分布式数据库
    • 实施断路器
    • 针对水平扩展进行设计

    权衡分析示例:
    选择数据库时:

    1. 选项 A:传统 RDBMS
      • 高一致性
      • 可扩展性有限
      • 维护更简单
  • 选项 B:分布式 NoSQL
    • 最终一致
    • 高度可扩展
    • 维护更加复杂
    由于可扩展性是主要的 NFR,尽管需要权衡维护成本,但选项 B 仍胜出,因为它更好地满足了主要目标。


    实际实施步骤

    1. 记录你的 NFR 层次结构
      • 明确说明主要和次要的 NFR
      • 解释选择背后的理由
      • 与所有利益相关者分享
  • 创建决策模板
    • 包括 NFR 影响分析
    • 根据 NFR 层次确定优先级
    • 记录权衡
  • 建立指标
    • 为每个优先级 NFR 定义成功标准
    • 设置监控和报告
    • 定期检讨及调整


    结论
    将 NFR 视为架构的北极星,可让决策更加清晰,并帮助您的团队朝着共同目标努力。虽然所有 NFR 都很重要,但明确优先事项有助于驾驭复杂的架构选择。