别做平庸coder!掌握这10个架构绝技,让你成为团队MVP

一般来说,软件系统的需求可以分为两类:功能需求和非功能需求。软件系统的架构设计需要满足这两类需求。特别是系统架构对软件非功能需求的支持,成为架构的质量属性。本文描述了软件的10个质量属性,但这并不意味着每个质量属性都会出现在架构设计中;你可以选择对你的产品最重要的质量属性,然后实现它们。

可扩展性

随着用户数量或请求数量的增加,系统的运行和操作能力也会增加。在云平台上,可通过水平或垂直扩展机器或简单地附加一个自动扩展组来实现可扩展性。

  • 流量模式:了解系统的流量模式。即使机器利用率低,也不值得生成尽可能多的机器。

  • 日常模式:特定区域的流量在早上增加,晚上减少。

  • 全球/区域模式:某些区域的应用程序使用量很大。

  • 突发流量:许多用户在高峰期或人口稠密地区请求资源,但只有少数机器能够提供服务。

  • 自动扩展:能够快速启动一些机器来处理突发流量,并在需求减少时优雅地缩减。

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

可用性

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

  • 部署标签:部署应用组件的多个独立副本,包括数据存储区。

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

可扩展性

可扩展性指标扩展系统的能力以及实现可扩展性所需的工作。扩展可以通过添加新功能或修改现有功能来实现,原则是在不影响当前系统功能的前提下进行增强。

模块化/可重用性:可重用性和可扩展性使技术能够转移到另一个项目中,减少开发和维护时间,同时增强可靠性和一致性。可插拔性:能够轻松插入其他组件,如微内核架构。

一致性

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

弹性

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

设计模式:

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

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

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

可观察性

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

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

  • 警报和监控:准备监控仪表板,创建SLIs(服务级别指标)并设置关键警报。

  • L1/L2/L3:为L1/L2设置随叫随到的支持流程。L1支持与客户互动,L2支持将L1路由到他们的票据并协助排除故障。L3是最终支持级别,通常涉及解决技术问题的开发团队。

7.安全性

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

  • 审计性:审核和跟踪系统活动,以便在安全漏洞发生时识别安全漏洞,确定漏洞的机制和范围。远程存储审计跟踪可以防止入侵者掩盖其踪迹。

合法性:

  • 合规性:遵守GDPR和个人信息保护法等数据保护法律法规。

  • 隐私:能够对公司内部员工隐藏交易(加密交易,即使是DBA和网络架构师也看不到)。

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

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

持久性

耐久性是软件在长时间内提供服务并满足用户需求的能力。

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

  • 容错:容错性是一种允许系统在一个或多个组件发生故障时继续正常运行的功能。

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

敏捷性

敏捷性已成为描述当代软件方法学的流行术语,敏捷团队可能是那些能够适应变化的团队。

  • 可维护性:修改应用程序和增强系统的难易程度。它表示开发人员在修改软件以改进、纠正或适应环境和需求变化方面的有效性和效率。

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

  • 开发容易性:开发人员在修改软件时不会引入缺陷或损害现有产品质量的程度。

  • 可部署性:从代码提交到生产部署所需的时间。

  • 可安装性:在所有必要的平台上安装系统的难易程度。

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

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

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

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

结语

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

一旦了解了功能需求,尝试识别系统中可能阻碍这些功能的瓶颈。如何找到瓶颈?你可以尝试回答几个问题,例如:

  • 系统能否在超过1亿用户的规模上运行?

  • 系统能否处理1万个并发请求?

  • 数据处理是否安全?

  • 是否可以轻松添加更多功能而不影响现有功能?通过回答这些问题,我们可以更好地理解和应用软件架构的质量属性,提高系统的整体性能和可靠性。

最后:

CSS技巧与案例详解

vue2与vue3技巧合集

VueUse源码解读

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@大迁世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值