企业架构十大非功能性需求


功能需求定义了系统应该做什么。就汽车而言,这意味着将一个人从 A 地带到 B 地;而非功能性需求规定了系统应该是什么样子。

1. 可伸缩性
可扩展性是指系统随着用户或请求数量的增加而执行和操作的能力。这可以通过机器的水平或垂直缩放或附加 AutoScalingGroup 功能来实现。
在将可扩展性构建到系统中时需要考虑以下三个方面:

  • 流量模式:了解系统的流量模式。由于利用率不足,产生尽可能多的机器并不划算。以下是三个示例模式:
    • 昼间:特定区域的流量在早上增加,晚上减少。
    • 全球/区域:应用程序在特定区域的大量使用。
    • 雷群:许多用户请求资源,但只有少数机器可以服务突发流量。这种情况可能发生在高峰时段或人口稠密的地区。
  • 弹性:这涉及快速生成一些机器来处理流量突发并在需求减少时优雅收缩的能力。
  • 延迟:这是系统尽快处理请求的能力。这还包括优化算法并使用边缘计算在用户附近复制系统,以减少请求的往返时间。

2. 可用性
可用性以正常运行时间的百分比来衡量,并定义系统正常运行的时间比例。可用性受到系统错误、基础设施问题、恶意攻击和系统负载的影响。需要考虑的事项包括:

  • 部署标记:部署应用程序组件的多个独立副本,包括数据存储。
  • Geodes:将后端服务部署到一组地理节点中,每个地理节点可以服务任何区域的任何客户端请求。

3、可扩展性
可扩展性衡量扩展系统的能力以及实现扩展所需的工作量。可以通过添加新功能或修改现有功能来进行扩展。该原则在不损害当前系统功能的情况下提供了增强功能。在构建可扩展性时,请考虑:

  • 模块化和可重用性:可重用性与可扩展性相结合,允许将技术转移到另一个项目,从而减少开发和维护时间,并增强可靠性和一致性。
  • 可插拔性:这是轻松插入其他组件的能力,例如微内核架构。

4. 一致性
一致性保证每次读取都返回最近的写入。这意味着操作执行后,所有节点上的数据都是一致的,因此所有客户端无论连接到哪个节点,都会同时看到相同的数据。一致性提高了数据的新鲜度。

5. 弹性
系统可以优雅地处理意外和恶意故障并从中恢复。检测故障并快速有效地恢复对于保持弹性是必要的。设计弹性架构时要考虑的主要因素是:

  • 可恢复性:这是使服务在意外更改后能够返回到初始功能状态的准备过程和功能。意外更改包括软删除或硬删除或应用程序配置错误。
    • 灾难恢复:灾难恢复 (DR) 包括旨在防止或最大程度地减少灾难性事件(从设备故障和局部停电到网络攻击、民事紧急情况、刑事或军事攻击以及自然灾害)造成的数据丢失和业务中断的最佳实践。

以下是您可以实施的一些灾难恢复设计模式,以在架构中构建弹性:
  • Bulkhead:这种模式将应用程序的元素隔离到池中,这样如果其中一个失败,其他元素将继续运行。
  • 断路器:此模式处理连接到远程服务或资源时可能需要不同时间才能修复的故障。
  • 领导者选举: 此模式通过选举一个实例作为负责管理其他实例的领导者来协调分布式应用程序中一组协作任务实例执行的操作。

6. 可用性
可用性是系统使用户在享受体验的同时安全、有效和高效地执行任务的能力。它是指特定消费者在量化的使用环境中使用软件以有效性、效率和满意度实现量化目标的程度。相关因素包括:

  • 辅助功能:使具有最广泛特征和能力的人可以使用该软件,包括耳聋、失明、色盲等的用户。
  • 易学性:使软件易于用户学习。
  • API 合约:内部团队需要了解 API 合约以帮助他们插入任何系统。

7. 可观察性
可观察性是收集有关程序执行、模块内部状态以及组件之间通信的数据的能力。为了提高可观察性,请使用各种日志记录和跟踪技术和工具,包括以下内容:

  • 日志记录:每个请求中都会生成不同类型的日志,例如事件日志、事务日志、消息日志和服务器日志。
  • 警报和监控:准备监控仪表板、创建服务级别指标 (SLI) 并设置关键警报。
  • 分层支持:为 1 级和 2 级支持设置待命支持流程。L1 支持包括与客户互动。L2 支持管理 L1 升级的票证并帮助排除故障。L3 是最后一道支持线,通常由解决技术问题的开发团队组成。

8. 安全
安全性是软件保护信息和数据的程度,以便人们、其他产品或系统能够访问适合其授权类型和级别的数据。该特性系列包括以下五个属性:

  • 保密性:只有获得授权的人员才能访问数据。
  • 完整性:软件可防止未经授权的访问或修改软件或信息。
  • 不可否认性:证明行动或事件是否已经发生。
  • 问责制:跟踪用户操作。
  • 真实性:证明用户的身份。

其他安全要求包括:
  • 可审计性:审计跟踪跟踪系统活动,以便在发生安全漏洞时,您可以确定漏洞的机制和程度。远程存储审计跟踪(只能附加审计跟踪)可以防止入侵者掩盖其踪迹。
  • 合法性:这涉及遵守法律或其他行业要求。
    • 合规性:遵守 GDPR、CCPA、SOC2、PIPL 或 FedRamp 等数据保护法
    • 隐私:能够对公司内部员工隐藏交易,例如对交易进行加密,以便数据库管理员和网络架构师也无法看到它们
  • 身份验证:安全要求确保用户的真实身份。
  • 授权:安全要求确保用户只能访问应用程序中的某些功能(按用例、子系统、网页、业务规则、字段级别等)。

9. 耐用性
耐久性涉及软件的可服务性以及在较长时间内满足用户需求的能力。需要考虑的事项包括:

  • 复制:共享信息以确保冗余资源之间的一致性,从而提高可靠性、容错性或可访问性。
  • 容错:这使得系统在某些组件出现一个或多个故障时能够继续正常运行。
  • 可归档性:管理数据在一段时间后是否需要归档或删除。例如,客户帐户将在三个月后被删除或标记为过时并存档在辅助数据库中以供将来访问。

10.敏捷性
敏捷是一种使团队能够快速响应变化的软件方法。软件开发就是修改,因此敏捷性是一个关键的 NFR。关键因素包括:

  • 可维护性:应用更改和增强系统有多容易?可维护性代表开发人员可以有效且高效地修改软件以改进、纠正或使其适应环境和需求变化的程度。
    • 可测试性:开发人员和其他人测试软件的容易程度如何?
    • 易于开发:开发人员能否在不引入缺陷或降低现有产品质量的情况下修改软件?
  • 可部署性:这是将代码投入生产所需的时间。
    • 可安装性: 在所有必要平台上的系统安装有多容易?
    • 可升级性: 在服务器和客户端上从应用程序或解决方案的先前版本升级到新版本的速度和容易程度如何?
    • 可移植性:系统是否需要在多个平台上运行?
  • 可配置性:最终用户更改软件配置的各个方面(通过可用的界面)有多容易?
  • 兼容性:产品、系统或组件在共享相同的硬件或软件环境时与其他产品、设计或成员交换信息并执行其所需功能的能力如何?