
系统架构设计师连接业务与技术。他需要识别利益相关者、约束条件和质量属性,输出架构视图、接口契约和技术选型,并对关键权衡负责。架构不是一次性设计,而是持续演进的决策过程。优秀的架构师既懂业务目标,也能深入代码验证假设。
架构设计应由质量属性驱动,而非技术偏好。常用质量属性包括性能、可用性、安全性、可修改性、可测试性和可观测性。建议用质量属性场景描述需求:
这种场景化描述能避免“高性能”“高可用”等模糊表述,让架构决策可验证。
常见架构风格包括分层架构、微服务、事件驱动、CQRS 和 Serverless。选择时需考虑团队规模、交付速度、运维能力和一致性要求。
架构师应记录“为什么选它”以及“代价是什么”,而不是只记录“选了什么”。
架构决策必须能在代码中体现。以下 Python 示例通过依赖倒置实现可替换的存储层,体现可修改性和可测试性。
from abc import ABC, abstractmethod
from dataclasses import dataclass
@dataclass
class Order:
id: str
amount: float
class OrderRepository(ABC):
@abstractmethod
def save(self, order: Order) -> None: ...
@abstractmethod
def find_by_id(self, order_id: str) -> Order | None: ...
class InMemoryOrderRepository(OrderRepository):
def __init__(self):
self._data: dict[str, Order] = {}
def save(self, order: Order) -> None:
self._data[order.id] = order
def find_by_id(self, order_id: str) -> Order | None:
return self._data.get(order_id)
class OrderService:
def __init__(self, repo: OrderRepository):
self.repo = repo
def create_order(self, order_id: str, amount: float) -> Order:
order = Order(order_id, amount)
self.repo.save(order)
return order
# 生产环境可替换为 MySQLOrderRepository,而不修改 OrderService这段代码说明:高层业务逻辑不依赖具体数据库,而是依赖抽象接口。替换存储实现时,业务代码保持稳定,从而降低变更成本。
架构决策应被记录、评审和追溯。ADR 是轻量但有效的实践:
adr:
id: ADR-001
title: 订单服务采用事件驱动架构
status: accepted
context: 订单与库存、支付、通知强耦合,峰值扩展困难
decision: 引入 Kafka 作为事件总线,订单状态变更发布领域事件
consequences:
- 优点:解耦、可扩展、事件可回放
- 代价:最终一致性、消息幂等、运维复杂度上升ADR 让后来者理解决策背景,避免重复讨论,也便于架构演进时评估影响。
架构设计完成后,应通过 ATAM 等方法评估风险点、敏感点和权衡点。上线后利用监控、链路追踪和日志验证质量属性是否达标。架构师需要定期复审 ADR,结合业务变化和技术演进调整架构。
系统架构设计师的价值在于权衡与落地。以质量属性为输入,以架构风格为选项,以 ADR 为记录,以代码为验证,才能构建可演进、可维护、可验证的系统。架构不是纸上蓝图,而是贯穿需求、设计、编码和运维的持续决策过程。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。