架构质量属性
架构质量属性
质量属性概述
架构质量属性是描述系统运行时行为特征的非功能性需求。常见的质量属性包括:性能、可用性、安全性、可修改性、可测试性、可部署性、可监控性等。这些属性之间往往存在权衡关系,架构设计的本质就是在这些权衡中找到最佳平衡点。
每个质量属性都可以通过质量属性场景来具体化。一个完整的质量属性场景包括六个部分:刺激源(谁发起的刺激)、刺激(什么刺激)、环境(在什么环境下)、制品(刺激的对象)、响应(系统如何响应)、响应度量(如何衡量响应)。
class QualityAttributeScenario:
def __init__(self):
self.source = ""
self.stimulus = ""
self.environment = ""
self.artifact = ""
self.response = ""
self.response_measure = ""
def to_natural_language(self) -> str:
return (
f"在{self.environment}环境下,"
f"当{self.source}发起{self.stimulus}时,"
f"系统{self.artifact}应该{self.response},"
f"衡量标准为{self.response_measure}"
)
# 性能场景示例
performance_scenario = QualityAttributeScenario()
performance_scenario.source = "正常用户"
performance_scenario.stimulus = "发起查询请求"
performance_scenario.environment = "正常负载"
performance_scenario.artifact = "查询服务"
performance_scenario.response = "在200ms内返回结果"
performance_scenario.response_measure = "95%的请求响应时间<200ms"
可测试性
可测试性是指系统易于验证其正确性的程度。高可测试性的架构应该支持:单元测试(组件隔离测试)、集成测试(组件间交互测试)、端到端测试(完整业务流程测试)、性能测试(负载和压力测试)。
提升可测试性的架构策略包括:依赖注入(便于模拟外部依赖)、接口隔离(减少测试范围)、分层架构(各层可独立测试)、可配置的测试环境(便于搭建测试场景)。
class OrderService:
def __init__(self, repository: OrderRepository,
payment_client: PaymentClient,
notification_service: NotificationService):
self.repository = repository
self.payment_client = payment_client
self.notification_service = notification_service
def create_order(self, items: list[Item]) -> Order:
order = Order(items=items)
self.repository.save(order)
self.payment_client.charge(order.total)
self.notification_service.notify(order.customer_id, "订单已创建")
return order
# 测试时可以注入Mock对象
class MockOrderRepository:
def save(self, order: Order):
self.saved_orders = self.saved_orders or []
self.saved_orders.append(order)
可部署性与可监控性
可部署性是指系统易于安全、快速地部署到生产环境的能力。高可部署性的架构应该支持:蓝绿部署(零停机部署)、金丝雀发布(渐进式发布)、特性开关(功能级别的发布控制)、回滚机制(快速恢复到上一个稳定版本)。
可监控性是指系统运行状态易于观察和理解的程度。良好的可监控性包括:结构化日志(便于搜索和分析)、分布式追踪(跟踪请求在微服务间的流转)、指标收集(监控系统健康状况)、告警机制(异常情况及时通知)。