系统架构10大架构特征 - zonito


想象一下你正在买一辆车。您需要其中的哪些基本功能?车辆应该将人从 A 点运送到 B 点。但我们还要检查的是安全性、舒适性、可维护性、易于维修或更好的里程。您也可以寻找电动版本或更快的速度。为什么?为了限制在提供主要功能时可能发生的意外。
同样,就像汽车、摩托车或房屋一样,软件也有其非功能性需求,称为“架构特征”。无论是网站、移动设备还是桌面应用程序;它应该具有一组质量属性以满足最终用户的需求。

架构特性/非功能性要求
简而言之,功能需求定义了系统应该做什么,例如在汽车的情况下,将人从 A 带到 B,而非功能需求则定义了系统应该如何。
这是 NFR 的整体备忘单:

这 10 大建筑特征涵盖了大型项目的大部分方面。您不需要在项目中容纳所有内容;挑选最重要的并将其淘汰。本文不是为这些 NFR 提供解决方案,而是让您了解在设计系统时需要考虑哪些方面。让我们了解它们中的每一个:

可扩展性:
随着用户或请求数量的增加,系统执行和操作的能力。可扩展性可以通过机器的水平或垂直缩放或简单地附加 AutoScalingGroup 来实现。
流量模式:了解系统的流量模式。生成尽可能多的机器并不具有成本效益,即使它没有得到充分利用。

  • 昼夜模式:特定区域的流量在早上增加,晚上减少。
  • 全球/地区:地区性应用程序的大量使用。
  • Thundering Herd:许多用户都在请求资源,但只有少数机器可用于服务突发流量。这些可能发生在高峰期或人口稠密地区。

弹性:能够快速生成一些机器来处理流量的爆发,并在需求减少时优雅地收缩。
延迟:尽快处理请求的能力。这还包括优化算法和在用户附近复制系统以减少请求的往返。谷歌搜索平均需要 400 毫秒。

可用性(可靠性)
它以正常运行时间的百分比来衡量,并定义了系统正常运行和工作的时间比例。可用性受系统错误、基础设施问题、恶意攻击和系统负载的影响。

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

可扩展性
可扩展性衡量扩展系统的能力以及实现扩展所需的工作量。扩展可以通过添加新功能或修改现有功能来实现。该原理在不损害当前系统功能的情况下提供增强功能。

  • 模块化/可重用性:可重用性与可扩展性一起,允许将技术转移到另一个项目,开发和维护时间更短,可靠性和一致性得到增强。
  • 可插拔性:能够轻松插入其他组件,例如微内核架构。

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

弹性
系统可以优雅地处理意外和恶意故障并从中恢复。检测故障并快速有效地恢复对于保持弹性是必要的。
可恢复性:准备过程和功能使您能够在意外更改后将服务恢复到初始运行状态。意外更改包括应用程序的软删除或硬删除或错误配置。

  • 灾难恢复:灾难恢复 (DR) 包含旨在防止或最大程度减少灾难性事件(从设备故障和局部停电到网络攻击、民事紧急情况、刑事或军事攻击以及自然灾害)导致的数据丢失和业务中断的最佳实践。

设计模式:
  • 隔板:将应用程序的元素隔离到池中,以便如果一个失败,其他元素将继续运行。
  • 断路器:处理连接到远程服务或资源时可能需要不同时间才能修复的故障。
  • 领导者选举:通过选举一个实例作为负责管理其他实例的领导者来协调分布式应用程序中协作任务实例的集合所执行的操作。

可使用性
可使用性可以描述为系统为其用户提供条件以安全、有效和高效地执行任务同时享受体验的能力。它是特定消费者可以使用软件在量化的使用环境中以有效性、效率和满意度实现量化目标的程度。

  • 可访问性:使具有最广泛特征和功能的人可以使用该软件。这包括耳聋、盲人、色盲等用户。
  • 易学性:用户如何轻松地学习如何使用该软件?
  • API 合同:对于内部团队,了解 API 合同有助于轻松插入任何系统。

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

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

安全
软件保护信息和数据的程度,以便人们或其他产品或系统具有与其授权类型和级别相适应的数据访问程度。这一系列特征包括机密性(数据只能被授权访问的人访问)、完整性(软件防止对软件或信息的未经授权的访问或修改)、不可否认性(可以证明已经发生的行为或事件)、问责制(是否可以跟踪用户的用户行为)和真实性(验证用户的身份)。

可审计性:审计跟踪跟踪系统活动,以便在发生安全漏洞时,可以确定漏洞的机制和程度。远程存储只能附加的审计跟踪可以防止入侵者掩盖他们的踪迹。

合法性:

  • 合规性:遵守 GDPR、CCPA、SOC2、PIPL 或 FedRamp 等数据保护法律。
  • 隐私:能够对内部公司员工隐藏交易(加密交易,因此即使是 DBA 和网络架构师也看不到它们)。

身份验证:确保用户真实身份的安全要求。

授权:确保用户只能访问应用程序中的某些功能(按用例、子系统、网页、业务规则、字段级别等)的安全要求。

耐用性
耐用性是软件可服务性的解决能力,能够在较长时间内满足用户的需求。

  • 复制:涉及共享信息以确保冗余资源之间的一致性,以提高可靠性、容错性或可访问性。
  • 容错:它是使系统能够在其某些组件中的一个或多个故障发生故障的情况下继续正确运行的属性。
  • 可存档性:数据是否需要在一段时间后存档或删除?(例如,客户帐户将在三个月后被删除或标记为过时并存档在辅助数据库中以供将来访问。)

敏捷
在描述当代软件方法时,它已成为当今的流行语。一个助理敏捷团队可能是一个方便的团队,能够对变化做出适当的回应。修改是软件开发高度丰富的。
可维护性:应用更改和增强系统有多容易?— 表示开发人员可以修改软件以改进、纠正或使其适应环境和需求变化的有效性和效率程度。

  • 可测试性:开发人员和其他人测试软件的难易程度
  • 易于开发:开发人员可以在不引入缺陷或降低现有产品质量的情况下修改软件的程度

可部署性:提交部署时间后将代码投入生产的时间。
  • 可安装性:易于在所有必要平台上安装系统。
  • 可升级性:能够轻松/快速地从该应用程序/解决方案的先前版本升级到服务器和客户端上的较新版本。
  • 可移植性:系统是否需要在多个平台上运行?(例如,前端是否需要针对 Oracle 和 SAP DB 运行?

可配置性:最终用户可以轻松更改软件配置的各个方面(通过可用界面)。
  • 兼容性:产品、系统或组件在共享相同硬件或软件环境的同时与其他产品、设计或成员交换信息并执行其所需功能的程度。

结论
现在,您已经熟悉了 NFR 或架构特征,您可能会想哪一个会适合您的项目需求。或者可能是每个项目都需要它们。那么如何在您的项目中继续采用这些特征呢?
一旦你得到了功能需求,试着找出系统中可能给主要功能增加障碍的瓶颈。以及如何找到瓶颈?尝试回答几个这样的问题:

  • 系统会在 100M / 1B 用户群中执行吗?
  • 我的系统会处理 10,000 个并发请求吗?
  • 我是否以安全的方式处理数据?
  • 我可以在不影响现有工作功能的情况下轻松添加更多功能吗?
  • 还有很多…