关于运维:软件架构的10个质量属性

38次阅读

共计 2746 个字符,预计需要花费 7 分钟才能阅读完成。

个别地,对于软件系统的需要而言,分为两类:功能性需要和非功能性需要。软件系统的架构设计既要满足软件的功能性需要,还要满足软件的非功能性需要。特地地,零碎架构对软件非功能性需要的撑持成为架构的品质属性。本文形容了软件的 10 个品质属性,但不意味着每个品质属性都会在架构设计中出现,能够筛选对产品最重要的品质属性,而后进行实现。

1. 可伸缩性

随着用户或申请数量的减少,零碎运行和操作的能力也随之减少。在云平台上,可伸缩性能够通过机器的程度或垂直缩放或者简略地附加 AutoScalingGroup 来实现。

流量模式: 理解零碎的交通模式。尽可能多地产生机器是不划算的,即便它的利用率不高。

  • 日行模式: 特定地区的交通在早上减少,早晨缩小。
  • 全局 / 区域模式: 区域大量应用应用程序。
  • 突发流量 : 许多用户都在申请资源,然而只有多数几台机器能够为突发的流量提供服务。这些可能产生在高峰期或人口密集地区。
    主动缩放: 可能迅速产生一些机器,以解决流量的暴发,当需要正在缩小时,优雅地膨胀。

提早: 可能尽快为申请提供服务。这还包含优化算法和在用户地位左近复制零碎,以缩小申请的往返。

2. 可用性

它以失常运行工夫的百分比来掂量,并定义了零碎失常运行和失常工作的工夫比例。可用性受到零碎谬误、基础设施问题、歹意攻打和零碎负载的影响。

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

区域部署: 将后端服务部署到一组天文节点中,每个节点都能够服务任何区域中的任何客户端申请。

3. 可扩展性

可扩展性度量扩大了零碎的能力和实现扩大所需的工作。扩大能够通过增加新性能或批改现有性能来实现,该准则规定在不侵害以后零碎性能的状况下进行加强。

模块化 / 可重用性: 可重用性和可扩展性使得技术能够以更少的开发和保护工夫转移到另一个我的项目,同时加强了可靠性和一致性。

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

4. 一致性

一致性保障每个读操作返回最近的写操作。这意味着在执行每个操作之后,所有节点的数据都是统一的,因而,,无论它们连贯到哪个节点,所有客户端都能够同时看到雷同的数据。一致性进步了数据的陈腐水平。

5. 弹性

零碎能够从容地解决意外故障和歹意故障并进行复原,检测故障并疾速无效地复原对于放弃弹性是必要的。

可恢复性: 筹备的过程和性能可能在发生意外更改后将服务返回到初始运行状态。意外的更改包含应用程序的软删除或硬删除或谬误配置。劫难复原包含了旨在避免或尽量减少灾难性事件造成的数据失落和业务中断的最佳实际,涵盖了从设施故障和部分停电到网络攻击、民事紧急情况、立功或军事攻打以及自然灾害。

设计模式:

  • 隔离: 将应用程序的元素隔离到池中,以便在一个池失败时,其余元素持续运行。
  • 断路器: 当连贯到近程服务或资源时,解决可能须要破费不同工夫来修复的故障。
  • 选举: 通过选举一个实例作为负责管理其余实例的领导者,协调分布式应用程序中合作工作实例汇合执行的操作。

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 个并发申请吗?
  • 是否以平安的形式解决数据?
  • 是否能够在不影响现有工作个性的状况下轻松地增加更多个性?
    ……
正文完
 0