常见分类
一般来说,质量属性可以分为以下几类:
类别 | 常见质量属性 |
---|---|
性能相关 | 响应时间、吞吐量、资源利用率、实时性、可扩展性 |
可用性相关 | 可用性、高可用性(HA)、可靠性、容错性、恢复性 |
可维护性相关 | 可维护性、可测试性、可扩展性、可配置性 |
安全性相关 | 认证、授权、加密、完整性、审计 |
可用性体验相关 | 易用性、国际化、多语言支持、可访问性 |
可部署性相关 | 可部署性、可升级性、可回滚性 |
其他 | 可移植性、互操作性、合规性、节能性 |
性能(Performance)
定义
系统响应请求的速度,处理数据的能力,系统在压力下的表现。
影响
- 用户体验(卡顿、延迟)
- 系统容量(能接多少并发)
- 成本控制(性能差就要加机器)
设计策略
- 负载均衡(如 Nginx)
- 缓存设计(本地缓存、分布式缓存)
- 异步处理(消息队列MQ)
- 数据库优化(索引、分库分表、读写分离)
- 限流、降级、熔断
常见模式
- CQRS(Command Query Responsibility Segregation)
- 数据预计算(如排行榜)
- 写缓冲(Write-back cache)
可用性(Availability)
定义
系统能持续正常对外提供服务的能力,通常用「99.9%」、「五个9」来衡量。
影响
- 业务连续性
- 用户信任度
设计策略
- 高可用架构(双机热备、主备切换)
- 容灾设计(跨机房部署、跨云部署)
- 自动故障转移(Auto Failover)
- 心跳检测+健康检查
- 灰度发布、滚动升级
常见模式
- 冗余(Redundancy)
- 集群(Cluster)
- 冗错处理(Fault Tolerance)
可靠性(Reliability)
定义
系统能在特定时间段内,持续正确运行,无故障出错。
影响
- 数据一致性
- 服务稳定性
设计策略
- 幂等性设计(重复请求不会出错)
- 重试机制(带指数退避)
- 服务超时+超时重试
- 分布式事务控制(TCC、SAGA)
常见模式
- 三权分立架构(隔离控制、数据、业务)
- 最终一致性(如BASE理论)
可维护性(Maintainability)
定义
系统容易修改、扩展、排查、修复的能力。
影响
- 研发效率
- 上线速度
- Bug修复时间
设计策略
- 良好的模块化(高内聚,低耦合)
- 代码规范、架构规范
- 日志可追踪、统一监控
- 统一异常处理机制
- 自动化测试
常见模式
- 微服务(Microservices)
- 分层架构(Layered Architecture)
- 插件式架构(Plugin Architecture)
安全性(Security)
定义
保护系统资源免受未授权访问或破坏的能力。
影响
- 法规合规(GDPR、等保)
- 公司信誉
设计策略
- 身份认证(OAuth2.0、JWT)
- 权限控制(RBAC、ABAC)
- HTTPS加密
- 防护策略(防SQL注入、防XSS、防CSRF)
- 审计日志记录
常见模式
- 零信任架构(Zero Trust Architecture)
- 最小权限原则(Principle of Least Privilege)
可扩展性(Scalability)
定义
系统在业务增长、用户量增加时,能够顺利扩展的能力。
影响
- 系统生命周期
- 成本控制
设计策略
- 水平扩展(scale-out)优先
- 无状态设计(Stateless)
- 动态伸缩(Auto Scaling)
- 分布式计算(MapReduce、Spark)
常见模式
- 微服务架构
- 分布式缓存(Redis Cluster)
可测试性(Testability)
定义
系统能够被有效地验证和验证改动是否正确的能力。
影响
- 质量保障
- 迭代速度
设计策略
- 单元测试(Unit Test)
- 接口测试(API Test)
- 自动化测试(CI/CD集成测试)
- Mock、Stub测试
- 分层测试(金字塔测试模型)
常见模式
- TDD(Test Driven Development)
- Mocking Pattern
可部署性(Deployability)
定义
系统新版本发布、回滚的便利性和稳定性。
影响
- 发布风险
- 运维成本
设计策略
- 容器化(Docker/K8s)
- 灰度发布、蓝绿部署
- 无停机部署(Zero Downtime Deployment)
- 回滚机制
常见模式
- DevOps流程
- GitOps部署模式
其他质量属性(补充)
质量属性 | 简单说明 |
---|---|
可移植性(Portability) | 系统能否轻松运行在不同环境上 |
国际化(Internationalization) | 是否支持多语言、多币种 |
节能性(Energy Efficiency) | 系统资源利用率,能耗控制 |
合规性(Compliance) | 是否符合行业规范、法律要求 |
互操作性(Interoperability) | 能否与第三方系统集成 |
质量属性与架构设计映射表
质量属性 | 对应的架构设计实践 / 策略 |
---|---|
性能(Performance) | - 负载均衡(Nginx、HAProxy) - 缓存(Redis、本地缓存) - 异步处理(MQ、异步编程) - 数据库优化(读写分离、分库分表) - 前端性能优化(CDN、懒加载) |
可用性(Availability) | - 双活部署、主备切换 - 心跳检测+健康检查 - 容灾设计(跨机房、跨地域) - 负载均衡故障转移 |
可靠性(Reliability) | - 幂等设计 - 自动重试+超时处理 - 日志追踪 - 容错机制(如断路器模式) |
可维护性(Maintainability) | - 模块化设计(DDD、清晰边界) - 单一职责原则(SRP) - 自动化测试覆盖 - 标准化日志/监控体系 |
安全性(Security) | - 身份认证(OAuth2.0、SSO) - 接口鉴权(JWT、API Key) - 数据加密(传输+存储) - 防护措施(防SQL注入/XSS/CSRF) - 最小权限原则 |
可扩展性(Scalability) | - 无状态服务(Stateless) - 微服务架构 - 服务拆分+数据库拆分 - 动态水平扩展(Auto Scaling) |
可测试性(Testability) | - 单元测试、集成测试、端到端测试(E2E) - 测试金字塔设计 - Mock/Stub/Spy技术 - 接口可模拟 |
可部署性(Deployability) | - 容器化部署(Docker/Kubernetes) - 蓝绿部署、灰度发布 - 自动化部署(CI/CD流水线) - 快速回滚机制 |
可移植性(Portability) | - 容器编排(K8s、Docker Compose) - 云中立设计(避免厂商锁定) - 抽象平台层(Platform Abstraction) |
节能性(Energy Efficiency) | - 资源弹性伸缩(如按需启动实例) - 低功耗算法优化 - 服务按量自动关停/启用 |
互操作性(Interoperability) | - 标准化接口(RESTful、gRPC) - API网关(API Gateway) - 使用开放标准(OAuth、OpenID、SOAP等) |
常用设计模式与质量属性快速对照表
设计模式 | 主要改善的质量属性 |
---|---|
负载均衡(Load Balancer) | 性能、可用性 |
微服务架构(Microservices) | 可扩展性、可维护性 |
熔断器模式(Circuit Breaker) | 可靠性、可用性 |
分层架构(Layered Architecture) | 可维护性、可扩展性 |
事件驱动架构(EDA) | 性能、可扩展性 |
服务注册与发现(Service Discovery) | 可扩展性、可部署性 |
零信任安全(Zero Trust) | 安全性 |
读写分离(Read/Write Splitting) | 性能、可靠性 |
常见系统对应质量属性优先级表
系统类型 | 质量属性优先级(高 → 低) | 备注说明 |
---|---|---|
支付系统(如微信支付、支付宝) | 安全性 > 可靠性 > 可用性 > 性能 > 可维护性 | 安全第一(资金安全至上),然后要确保交易正确、不中断。 |
电商系统(如淘宝、京东) | 性能 > 可扩展性 > 可用性 > 可靠性 > 安全性 | 双11秒杀场景,性能和扩展性压倒一切,安全重要但次之。 |
实时聊天系统(如微信、Slack) | 可用性 > 性能 > 可靠性 > 安全性 > 可维护性 | 保证实时沟通不中断,秒开秒发,安全在可接受范围内保证。 |
视频监控系统(如安防摄像头平台) | 实时性 > 可用性 > 可扩展性 > 可靠性 > 性能 | 实时流畅直播最重要,能容忍少量数据丢失(如低延时优先)。 |
SaaS管理系统(如企业ERP/CRM) | 可维护性 > 可扩展性 > 可用性 > 安全性 > 性能 | 业务变化快,需要灵活维护、快速上线,性能一般要求不极端。 |
大数据平台(如Hadoop/Spark平台) | 可扩展性 > 性能 > 可靠性 > 可维护性 > 安全性 | 处理海量数据,扩展性压倒一切,其次是计算效率。 |
游戏后端(如王者荣耀服务器) | 性能 > 可用性 > 安全性 > 可靠性 > 可维护性 | 游戏体验感最重要,卡顿/延迟直接影响用户流失。 |
在线教育平台(如慕课网、学而思) | 可用性 > 性能 > 安全性 > 可维护性 > 可扩展性 | 要求稳定流畅,体验感良好,数据保护(隐私)也很重要。 |
IoT物联网平台(如智能家居中心) | 可靠性 > 可扩展性 > 安全性 > 性能 > 可维护性 | 设备多、环境复杂,首先要保证设备间稳定通信。 |
短视频平台(如抖音、快手) | 性能 > 可用性 > 可扩展性 > 安全性 > 可维护性 | 视频播放流畅最重要,秒开秒播是基本要求。 |
总结
每个系统架构都是一场关于质量属性的权衡和妥协。
通常选2~3个最重要的质量属性作为设计重点,比如:
- 金融系统:安全性 > 可用性 > 可靠性
- 电商系统:性能 > 可扩展性 > 可维护性
- 视频监控系统:实时性 > 可用性 > 可扩展性