关注TechLead,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心期刊学术论文,阿里云认证的资深架构师,上亿营收AI产品研发负责人。
在软件架构中,软件系统的需求通常可以分为两类:功能性需求和非功能性需求。软件系统的架构设计需要满足这两类需求,尤其是在非功能性需求方面,系统架构的支持成为了架构的质量属性。本文将描述软件架构的9个质量属性,但并不意味着每个质量属性都必须在架构设计中实现。可以根据产品的实际需求,选择最重要的质量属性并实施。
1. 可扩展资源 Scalability
随着用户或请求数量的增加,系统的运行和操作能力也应随之增强。在云平台上,可扩展性可以通过横向或纵向扩展机器,或者简单地附加一个 AutoScalingGroup
来实现。
流量模式:了解系统的流量模式很重要,生成尽可能多的机器并不划算,尤其是在利用率较低的情况下。
- 日常模式:特定区域的流量在早上增加,晚上减少。
- 全球/区域模式:应用在某些地区的使用频率较高。
- 突发流量:许多用户在同一时间请求资源,而只有少数机器能处理这些突发流量,通常发生在高峰时段或人口密集地区。
自动扩展:能够快速启动一些机器以应对突发流量,并在需求减少时优雅地缩减机器数量。
延迟:尽可能快速地提供服务请求。这包括优化算法并在靠近用户的位置复制系统以减少往返请求时间。
2. 可用性 Availability
可用性通过系统正常运行的时间百分比来衡量,定义了系统正常运行的时间比率。可用性受到系统错误、基础设施问题、恶意攻击和系统负载的影响。
部署标签:部署应用组件的多个独立副本,包括数据存储区域。
区域部署:将后端服务部署到一组地理节点上,每个节点都可以服务来自任何区域的客户请求。
3. 可扩展架构 Expandability
扩展性指标衡量系统能力的提升以及实现扩展所需的工作量。扩展可以通过添加新功能或修改现有功能来实现,原则是在不影响当前系统功能的前提下进行增强。
模块化/可重用性:可重用性和扩展性使技术能够更容易地转移到其他项目上,减少开发和维护时间,同时提高系统的可靠性和一致性。
插件化:能够轻松插入其他组件,如微内核架构。
4. 一致性 Consistency
一致性确保每次读取操作都返回最近的写入操作结果。这意味着在执行每个操作后,所有节点上的数据保持一致,无论客户连接到哪个节点,所有客户都可以同时看到相同的数据。一致性提高了数据的新鲜度。
5. 弹性 Elasticity
系统能够从意外故障和恶意攻击中从容应对并恢复。为了保持弹性,系统需要能够快速有效地检测故障并恢复。
恢复能力:在发生意外变化后,系统恢复到初始操作状态的过程。意外变化包括应用程序的软删除或硬删除、配置错误等。灾难恢复包括防止或尽量减少数据丢失和业务中断的最佳实践,涵盖设备故障、本地电力中断、网络攻击、民事紧急事件、犯罪行为或军事攻击以及自然灾害。
设计模式:
- 隔离:将应用程序的元素隔离到池中,以便当一个池发生故障时,其他元素仍然可以继续运行。
- 熔断器:在连接远程服务或资源时,处理可能需要不同时间进行修复的故障。
- 选举:通过选举一个实例作为领导者,负责管理其他实例,协调分布式应用中协作任务实例集合的操作。
6. 可观察性 Observability
可观察性是指收集程序执行、内部模块状态以及组件之间通信数据的能力。可以使用各种测试和跟踪技术和工具来提高可观察性。
日志记录:在每个请求中生成不同类型的日志:事件日志、事务日志、消息日志和服务器日志。
告警与监控:准备监控仪表板,创建服务级别指标(SLIs),并设置关键告警。
L1/L2/L3 支持:设置 L1/L2 的值班支持流程。L1 支持涉及与客户互动,L2 支持通过处理 L1 的工单并协助故障排除,L3 是最终的支持级别,通常由开发团队处理技术问题。
7. 安全性 Security
软件通过保护信息和数据,赋予个人或其他产品或系统相应的数据访问类型和授权权限。这些功能包括机密性(数据只能被授权人员访问)、完整性(软件防止未经授权的访问或修改)、不可抵赖性(能够证明发生的行为或事件)、责任追踪(能够追溯用户行为)和真实性(验证用户身份)。
可审计性:审计和跟踪系统活动,以便在发生安全漏洞时识别并确定漏洞的机制和范围。远程存储的审计跟踪可以防止入侵者掩盖他们的行踪。
合法性:
- 合规性:遵守数据保护的法律法规,如 GDPR 和《个人信息保护法》。
- 隐私:能够对内部公司员工隐藏交易(加密的交易,即使是 DBA 和网络架构师也无法查看)。
身份验证:确保用户身份的安全验证。
授权:确保用户只能访问应用程序中的某些功能(通过使用案例、子系统、网页、业务规则和字段级权限)。
8. 持久性 Persistence
持久性是指软件能够长期提供服务并满足用户需求的能力。
复制:涉及共享信息以确保冗余资源之间的一致性,从而提高可靠性、容错性或可访问性。
容错:容错是指系统在一个或多个组件发生故障时仍能正常运行的特性。
存档能力:数据是否需要在一段时间后被存档或删除?(例如,客户数据将在三个月后删除,或被标记为过时并存档到备份数据库中以供将来访问。)
9. 敏捷性 Agility
敏捷性已成为描述现代软件方法学的流行术语,敏捷团队通常是指能够适应变化的团队。
可维护性:应用程序的变更和系统增强的难易程度。它表明开发人员在修改软件以改进、修复或适应环境和需求变化时的效率。
可测试性:开发人员和其他人员测试软件的难易程度。
开发的便捷性:开发人员在修改软件时是否容易引入缺陷或降低现有产品质量的可能性。
可部署性:从代码提交到生产环境部署的时间。
可安装性:在所有必要平台上安装系统的难易程度。
可升级性:是否能够轻松/快速地在服务器和客户端上升级该应用程序/解决方案的早期版本。
可移植性:系统是否需要在多个平台上运行?(例如,前端是否需要同时在 Oracle 和 SAP 上运行?)
可配置性:最终用户是否能够通过可用界面轻松更改软件配置的各个方面。
兼容性:产品、系统或组件在共享相同硬件或软件环境时与其他产品、设计或成员交换信息的程度。