总结下软件架构的10个质量属性

一般地,对于软件系统的需求而言,分为两类:功能性需求和非功能性需求。软件系统的架构设计既要满足软件的功能性需求,还要满足软件的非功能性需求。特别地, 系统架构对软件非功能性需求的支撑成为架构的质量属性。本文描述了软件的10个质量属性, 但不意味着每个质量属性都会在架构设计中呈现,可以挑选对产品最重要的质量属性,然后进行实现。

27feace907437bed496b079fac208523.jpeg

1 可伸缩性

随着用户或请求数量的增加,系统运行和操作的能力也随之增加。在云平台上,可伸缩性可以通过机器的水平或垂直缩放或者简单地附加 AutoScalingGroup 来实现。

流量模式: 了解系统的交通模式。尽可能多地产生机器是不划算的,即使它的利用率不高。

  • 日行模式: 特定地区的交通在早上增加,晚上减少。

  • 全局/区域模式: 区域大量使用应用程序。

  • 突发流量: 许多用户都在请求资源,但是只有少数几台机器可以为突发的流量提供服务。这些可能发生在高峰期或人口密集地区。

自动缩放: 能够迅速产生一些机器,以处理流量的爆发,当需求正在减少时,优雅地收缩。

延迟: 能够尽快为请求提供服务。这还包括优化算法和在用户位置附近复制系统,以减少请求的往返。

2 可用性

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

部署标记: 部署应用程序组件的多个独立副本,包括数据存储区

区域部署: 将后端服务部署到一组地理节点中,每个节点都可以服务任何区域中的任何客户端请求。

3 可扩展性

可扩展性度量扩展了系统的能力和实现扩展所需的工作。扩展可以通过添加新功能或修改现有功能来实现,该原则规定在不损害当前系统功能的情况下进行增强。

模块化/可重用性: 可重用性和可扩展性使得技术可以以更少的开发和维护时间转移到另一个项目,同时增强了可靠性和一致性。

可插拔性: 能够轻松地插入其他组件,比如微内核架构。

4 一致性

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

5 弹性

系统可以从容地处理意外故障和恶意故障并进行恢复,检测故障并快速有效地恢复对于保持弹性是必要的。

可恢复性: 准备的过程和功能能够在发生意外更改后将服务返回到初始运行状态。意外的更改包括应用程序的软删除或硬删除或错误配置。灾难恢复包括了旨在防止或尽量减少灾难性事件造成的数据丢失和业务中断的最佳实践,涵盖了从设备故障和局部停电到网络攻击、民事紧急情况、犯罪或军事攻击以及自然灾害。

设计模式:

  • 隔离: 将应用程序的元素隔离到池中,以便在一个池失败时,其他元素继续运行。

  • 断路器: 当连接到远程服务或资源时,处理可能需要花费不同时间来修复的故障。

  • 选举: 通过选举一个实例作为负责管理其他实例的领导者,协调分布式应用程序中协作任务实例集合执行的操作。

88955a947fb24c883be701074de840bb.jpeg

6 易用性

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

易访问性: 让具有最广泛特征和功能的人可以使用该软件。这包括失聪、失明、色盲等用户。

易学性: 用户学习如何使用软件有多容易?

API 契约: 对于内部团队,理解 API 契约有助于轻松接入任何系统。

7 可观测性

可观测性是收集关于程序执行、模块内部状态及组件间通信的数据的能力。为了提高可观测性,可以使用各种测试跟踪技术和工具。

日志记录: 在每个请求中生成不同类型的日志: 事件日志、事务日志、消息日志和服务器日志。

警报和监控: 准备监控仪表板,创建 SLI (服务水平指示器)并设置关键警报。

L1/L2/L3: 为 L1/L2设置随叫随到的支持流程。L1支持包括与客户交互,L2支持 L1路由到它们的工单,并帮助进行故障排除。L3是支持的最后一环,通常包括一个解决技术问题的开发团队。

8 安全性

软件保护信息和数据,使人或其他产品或系统有相应的数据访问类型和授权水平。这一系列特征包括机密性(数据只能被授权访问) ,完整性(软件防止未经授权访问或修改软件或信息) ,不可否认性(能否证明已经发生的行为或事件) ,问责性(能否追踪用户的行为)和真实性(验证用户的身份)。

可审核性: 审核并跟踪系统活动,以便在发生安全性缺陷时,可以确定缺陷的机制和程度。远程存储审计跟踪(可以防止入侵者掩盖其踪迹。

合法性:

  • 遵守: 遵守 GDPR、 《个保法》等关于数据保护的法律法规。

  • 隐私: 对公司内部员工隐藏事务的能力(加密的事务,甚至 DBA 和网络架构师也看不到它们)。

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

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

9 持久性

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

复制: 涉及共享信息,以确保冗余资源之间的一致性,从而提高可靠性、容错性或可访问性。

容错性: 容错性是一种特性,它使系统能够在某些组件出现一个或多个故障时继续正常运行。

可归档性: 数据是否需要在一段时间后归档或删除?(例如,客户数据将在三个月后被删除,或被标记为过时,并存档在备用数据库中,以便将来访问。)

10 敏捷性

敏捷已经成为当今描述当代软件方法的流行语,相关的敏捷团队可能是一个能够适应变化的团队。

可维护性: 应用更改和增强系统有多容易?表示开发人员可以修改软件以改进、纠正或使其适应环境和需求变化的有效性和效率程度。

  • 可测试性: 开发人员和其他人员测试软件的容易程度

  • 易于开发: 开发人员在不引入缺陷或降低现有产品质量的情况下修改软件的程度

可部署性: 在提交部署之后到代码投入生产的时间。

可安装性: 易于在所有必要的平台上安装系统。

可升级性: 在服务器和客户端上从此应用程序/解决方案的以前版本轻松/快速升级到较新版本的能力。

可移植性: 系统是否需要在多个平台上运行?(例如,前端是否需要针对 Oracle 和 SAP 运行?)

可配置性: 最终用户可以轻松地更改软件配置的各个方面(通过可用的接口)。

兼容性: 产品、系统或组件在共享相同的硬件或软件环境时,与其他产品、设计或成员交换信息并执行所需功能的程度。

小结

了解了软件架构中的10个质量属性,我们可能需要考虑哪一个质量属性更是适合自己的产品或项目。那么,如何在项目中继续采用这些特性呢?

一旦了解了功能性需求,尝试找出系统中可能给这些功能增加障碍的瓶颈。如何找到瓶颈呢?可以试着回答几个这样的问题:

  • 系统能否在100M以上用户规模的基础上运行?

  • 系统能处理10,000个并发请求吗?

  • 是否以安全的方式处理数据?

  • 是否可以在不影响现有工作特性的情况下轻松地添加更多特性?

  • ......

更多的思考,更多的工具,更多的设计原则, 可以参考《持续架构实践》一书。

下面是上周直播的有关本书的2个视频。

4d6759ff6305ecbe97580f0aca8d2872.jpeg

往期推荐

今天,聊聊ChatGPT

2年云原生落地实践在运维和开发侧踩过的6个坑

王者荣耀为什么不使用微服务架构?

36个顶级数据分析方法与模型!

我是怎么读代码的

腾讯会议后台研发效能提升之路

阿里专家:万字长文详解技术管理者如何画业务大图?

软件开发人员如何提高个人和团队工作效率

基于“贫血”模型的传统开发模式是否违背 OOP

主数据系统的设计与实现

e1573a806c94baa823b3e4773b6a1dbc.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34567.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对接微信公众(开放)平台,获取微信用户信息,实现第三方登录

一、主要流程 实现第三方登录,从微信获取用户信息,用微信公众平台和微信开放平台,其实流程和原理都是一样的,就是调用的接口和对应的参数有点区别。 微信公众平台 和 微信开放平台 对应的官方文档如下: 微信开放文档…

Java-最新微信第三方平台公众号授权

第三方平台api地址 https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/预授权码获取之后调用接口获取授权方信息 https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/ThirdParty/token/authorization_info.html#%E6%8E%88%E6%9D…

微软 Edge 浏览器怎样安装插件

微软 Edge 浏览器怎样安装插件 一、安装微软商店提供的插件二、安装第三方插件到Edge浏览器 之前安装插件就没有了解很深,放到浏览器里面就直接用了,最近再次想在微软的Edge浏览器安装插件的时候,发现没有之前的那么顺手,于是记录…

惊!最靠谱的谷歌与edge浏览器安装扩展插件方法

谷歌与edge浏览器安装扩展插件 谷歌浏览器安装扩展插件Edge浏览器安装扩展插件注意 谷歌浏览器安装扩展插件 1.在浏览器地址栏中输入: chrome://extensions/ 2.打开开发者模式,并点击加载已解压的扩展程序 3.选中下载好的文件夹feisou-assist导入即可&#xff…

电影解说文案开头模板

一个好的解说文案,开头几句必须精彩!我们要解说一部影视作品,首先得自己先看一两遍,摸清故事情节,到底讲了一个什么故事,然后再结合我们对故事的理解,将故事讲给观众听。我们把文案分为开头、内…

修改Ubuntu国内镜像源地址

目录 方法一方法二方法三 方法一 Ubuntu可视化界面修改 在设置中的软件和更新中修改红框内容即可,修改后关闭会提示重启服务选择它即可 方法二 修改源文件 位置:/etc/apt/sources.list 首先备份以便出错后还原:sudo cp /etc/apt/sources.…

跟着GPT-4 从零完Python 爬虫

前言 先说个人情况:我作为产品经理自从 4 年前毕业很长时间都没有写过代码了,本科时候接触过一点 Python 的 慕课,但那个时候也是理论多于实操,为数不多跑通过的爬虫可能是豆瓣的电影 TOP 250;更多时候是被环境配置和…

Go 统计含 emoji 字符串字符数

1.背景 项目种需要统计用户昵称的字符数量进行限制,用户可以输入英文,中文,emoji 字符,当用户输入中英文和普通的 emoji 字符时,将字符串转为 []rune 进行统计没有问题。 func main() {s0 : "我爱中国" …

PostgreSQL中统计指定字符或者单词或者字符串在一个长字符串中出现总次数,PostgreSQL统计字符串中某字符出现次数

PostgreSQL中统计指定字符或者单词或者字符串在一个长字符串中出现总次数,PostgreSQL统计字符串中某字符出现次数 pg自带函数的方式另外一种思路方式,字符替换,统计被替换的字符数函数 translate(string text, from text, to text) pg自带函数…

PostgreSQL 字符串函数汇总

文章目录 前言拼接字符串填充字符串大小写转换获取字符串长度截取字符串裁剪字符串获取第一个字符的ASCII码计算string的MD5散列判断是否包含字符串null 和 的区别与判断以及COALESCE函数nullif函数合并字符串将字符串合并成一个数组分割字符串 总结 前言 本文基于 PostgreSQ…

婚礼视频mv短片制作,3分钟快速教程!教你制作婚礼开场创意视频

制作一个婚礼视频或婚礼MV短片,当下非常流行。用生活照、婚纱照片做成视频,在婚礼上当作开场或者生活中留给婚礼一个纪念,都是不错的选择。而且用照片做成视频,方法简单,但是创意依旧满满。 今天就教大家3分钟快速学会制作婚礼视频,利用生活照或婚纱照,配上数码大师里的…

SpringBoot+Redis实现接口限流

1.redis接口限流注解 定义一个注解标明需要使用限流的接口 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface AccessLimit {/*** return 单位时间(秒)*/int seconds();/*** return 单位时间最大请求次数*/…

访问url图片并上传oss图片显示不完整问题解决

问题:在之前通过链接上传图片的时候,都是先获取inputStream流,然后通过available()方法获取文件大小。但是通过这种方法获取到的文件大小是不准确的,因为这个时候文件还没有读取完全,所以获取到的文件大小是不完全的。…

乱序执行的原理——减轻数据灾难的影响

文/Hisa Ando 处理器基本上会按照程序中书写的机器指令的顺序执行。按照书写顺序执行称为按序执行(In-Order )。按照书写顺序执行时,如果从内存读取数据的加载指令、除法运算指令等延迟(等待结果的时间)较长的指令后面紧跟着使用该指令结果的指令,就会陷…

倍福 ton_b%C3%A9ton野蛮或野蛮

倍福 ton Brutalism style mainly has emphasis on materials, textures and construction, producing highly expressive forms. Popular in the 1960s and 1970s brutalism originated post–World War II when the design of low-cost housing and government buildings wer…

每周分享第 55 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 (题图:昆山火车站,苏州,2018) 关于 996 工作制&#xff0c…

每周分享第 34 期

这里记录过去一周,我看到的值得分享的东西,每周五发布。 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue。 英国有一家叫做 BioTeq 的创业公司,主营业务是人体芯片,也就是在人的体…

OpenStack 环境配置

OpenStack 环境配置 虚拟机资源信息 1、控制节点ct CPU:双核双线程-CPU虚拟化开启 内存:8G 硬盘:300G 双网卡:VM1-(局域网)192.168.100.20 NAT-192.168.80.20 操作系统:Centos 7.6&#xff0…

那一年,我们在巴塞罗那找到的「ONES 图腾」

临近2021年岁末,「圣诞之星」被悬挂到圣家族大教堂第二高塔「圣母塔」之上,这意味着大教堂进入了最后的施工阶段。 圣家族大教堂(简称「圣家堂」)被称为世界上最著名的「烂尾楼」——从1882年开始修建,至今依然没有建成…

天正网络版修改服务器地址,修改天正网络版服务器地址

修改天正网络版服务器地址 内容精选 换一换 修改子网名称、DNS服务器地址等。当前在部分区域中,子网已从虚拟私有云中解耦,解耦后子网拥有独立入口。未解耦:在虚拟私有云详情页的“子网”页签,可对子网进行操作。本小节的操作步骤指导以此入口为例。已解耦:在进入“网络 &…