ISO25010标准中对于架构特点也被称为 NFR(非功能需求)、质量属性有所描述。
这些特性是隐式的、贯穿各领域,是架构师在字里行间能看出来的特点。主要有以下21大特性。
性能
“性能是指响应能力:响应特定事件所需的时间,或给定时间间隔内处理的事件数”。性能可以有以下指标:延迟 、吞吐量、可用容量、可调度的利用率等。提高性能,首先我们要了解影响性能的因素:需求、硬件、软件。
我们需要控制需求,为此我们可以使用队列、节流和背压机制。通过改进算法,我们可以减少资源需求。通过设置最大响应时间(超时)和某种优先级,我们可以进一步控制需求。可以使用垂直缩放来获得更好的响应时间。提高性能的另一种方法是并发。还需要注意阿姆达尔定律。
可靠性
可靠意味着质量或性能始终如一,且能够被信任。可靠性可以用平均故障间隔时间(MTBF)来表示,可靠性 =exp(-t/MTBF)。用一些软件指标衡量复杂度和代码覆盖率,以了解可靠性的边缘情况。适应度函数也可用于度量可靠性。未解决问题的数量、成功的构建和部署的数量也是一些可用指标。ISO-9001 是衡量可靠性的另一种方法。
可用性
表示可用系统时间与总工作时间的比率。这是可靠性之上的另一层。它是系统掩盖或修复特定阈值(例如时间间隔)内故障的能力。可用性可以表示为
MTBF= 平均无故障时间;MTTR= 平均修复时间
于是我们计算出下表:
弹性(容错性)
弹性指的是系统遇到问题时可以降级(而非中断服务),等待问题修复完成,表示的是系统在遇到严重故障时的持续运行能力。为实现弹性,需要提前设置防御机制(断路器模式)。弹性有时被称为容错性 。弹性系统指的是可以适应压力并持续运行的系统。
可信赖性
它包括可靠性 、可用性 、弹性 、可持续性 (可用性 / 弹性的比值)、可恢复性 (弹性函数)和 稳健性 (可靠性函数)。我们应该始终将它们视为一个整体。
可伸缩性
它是系统在重负载下在可接受的阈值内的执行能力。它分为手动和自动可伸缩性两种,后者也叫 灵活性 。当负载突增时,系统会做出反应并水平缩放(添加 / 删除更多实例)。
安全性
它实际上是许多特点的集合:机密性 是指系统保护用户数据安全的能力;完整性 是保护外部资源免遭篡改的能力;身份验证 允许用户访问系统;授权 则告诉用户可以访问系统的哪些部分。授权通常使用 RBAC、ACL 或 ABAC 来实现。不可否认性 保证了消息的发送者不能否认自己发送了消息,并且接收者也不能否认自己接收了消息。
互操作性
它表示系统与外部系统通信的能力。合约接口是互操作性中最重要的概念,其涵盖了通信的所有方面,包括错误处理。
最好的策略是使用企业集成模式。如果用到多个通信协议,这种策略就是最佳方法。
可调整性
也称为 可变性 ,其描述了系统变化的难易程度。一般来说它是一个隐含的特征。变化是软件世界中唯一确定的事物。但不能将整个系统都设计为可变组件。因此我们需要找到那些变化概率很高的部分。
可部署性
所有系统都应封装在某种工件中,可以是 war、jar、ear、apk、dll、gem 等。它们被部署在能够运行它们的环境中。由于 docker 的进化,现在我们可以在一台机器上拥有多个环境。可部署性是一种将代码转换为客户可用产品的机制。
可测试性
在所有系统中它都是一个重要特征。我们必须确保构建的系统尊重了客户的需求。复杂的系统很难测试。以微服务架构为例,我们有很多独立开发的活动部件。这个特征经常会让步给其他特征。为了使系统可测试,我们需要能控制每个组件的输入和输出。
简单性
这条特征是很难实现的。一切都是权衡取舍,而大多数情况下这一条都会被牺牲掉。但如果我们需要在有限的时间内快速构建某些东西,那么就应该优先考虑简单性。但请注意,实现目标之后,我们不应丢掉所有东西。不要与 PoC(概念验证)或某种 R&D 混淆。可重用性 在这里也很重要。
可移植性
指的是系统从一个操作系统移植到另一个的能力,它会影响编程语言的选择。
一个显而易见的选项就是容器化、docker。一个 docker 引擎能够运行多个隐藏了实现细节的 docker 容器。
易用性
谈到易用性时通常会提到 可配置性 ,即用户自定义系统的能力。还有本地化,它指的是系统支持多种标准的能力,一般是通过用户体验(UX)实现的。可访问性 是另一个易用性特征。 可支持性帮助页面或者 24×7 技术支持。
可扩展性
它是描述系统对即插即用组件需求程度的特征。对于使用内核架构的系统来说,这是很重要的特征。Eclipse Platform 和 OSGI 标准就是经典的例子。
抗脆弱性
它是系统应对压力、冲击、波动、噪声、错误、故障或攻击的能力。
可升级性
它是指系统无缝升级自身的能力。对于非 Web 产品(例如 App Store 和 Google Play),这很容易实现,因为它们的升级能力是嵌入到 OS 中的;涉及到 Web 应用时,事情就麻烦多了。
合规性
不管我们需要的是哪种第三方工具和框架,都应该得到它们的合法授权。在欧盟,《GDPR》已成为强制规定,因此我们需要确保系统符合其规定。还要考虑一些 ISO 标准,公司可能需要遵循某些流程才能符合它们的要求。
成本
这可能是最重要的架构特点。一切都有成本,虚拟的、还是现实的都一样。任何成本都可以换算成金钱。
帮助客户控制成本是我们的责任。我们需要区分单纯的成本和投资,并让客户相信投资是划算的。测试是必要的投资,快速前进的唯一方法就是正确前进。代码质量是另一项投资。好的代码将带来更好的测试,提高稳健性、可维护性、可调整性等。
可存档性
指系统保留历史数据记录的能力。在数据是一等公民的系统中(例如财务系统),这个特征非常重要。数据绝不会删除,而只会归档,这主要是考虑到法律要求。可归档性是对可审计性的支持。
这是支持重构历史的系统特征。我们必须记录所有关键操作(尤其是在安全场景中),以便重现问题并从错误中学习经验。我们也可以将这些记录用作法律依据。记录每个关键操作并集中存放这些记录。可以使用 ELK,或 sleuth-zipkin 具。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!