Learning

Record learning from practice

View project on GitHub

“扛责”

架构师的核心价值在于“扛责”。比如,实习生可以建议用最新技术,但如果线上崩了,拍拍屁股走人,而架构师得半夜爬起来修。这就是区别:要为结果负责。

架构师困境与价值

  • “架构师困境”:架构工作中最根本的矛盾点:无法预测未来,却必须为未来做设计。
  • “架构师价值”:架构师提供的不是预测未来的水晶球,而是对抗不确定性的减震器。
    • 架构师的核心价值,不是“预测对”,而是“错了也能低成本地改”
    • “正确预测三年后”是神学,“确保选错了也能在三个月内纠正回来”才是工程。
    • 处理“选择悖论”,任何选择都有代价,架构师的工作是让代价可知、可控、可承受。

普通人选型 VS 架构师选型

普通选型和架构师选型的核心区别,就在于是否主动设计“退路”和“逃生通道”

行为对比 “随便谁”的选型 架构师的选型
核心动作 挑选一个技术/框架(如:用MongoDB) 设计一个包含切换成本的可演进方案
思考终点 “这个能满足当前需求。” “如果它不满足未来需求,我们换掉它的成本有多高?”
输出结果 一个技术名词。 一个包含抽象层、接口合约和数据迁移路径的系统设计。
当未来变化时 推倒重来,或硬着头皮用。 按预演过的路径B切换,损失可控。

1. 以RAG选型为例

假设我们为您的RAG系统做选型。一个不负责的说法是:“LlamaIndex未来生态会更好,选它。”

架构师的做法完全不同:

# 架构师的做法:承认未来不确定,所以把“选择”锁在盒子里
# 1. 定义一个稳定的抽象接口,而不是依赖具体框架
class RAGRetriever(ABC):
    """检索器抽象。无论底层是LlamaIndex、LangChain还是自研,对上层都一样。"""
    @abstractmethod
    def retrieve(self, query: str, top_k: int) -> List[Document]:
        pass

# 2. 基于当前的最佳判断,实现一个具体版本
class LlamaIndexRetriever(RAGRetriever):
    def __init__(self, index_path: str):
        # 当前决策:用LlamaIndex
        self._index = load_index(index_path)  # 具体实现细节封装在这里

    def retrieve(self, query: str, top_k: int) -> List[Document]:
        return self._index.query(query, top_k)

# 3. 在系统设计里,预留好切换的成本和路径
"""
系统设计文档 - 检索模块
当前实现:LlamaIndexRetriever
切换成本预估:
  - 重写 `LlamaIndexRetriever` 内部实现:2人/天
  - 数据格式迁移:无需(因接口一致)
  - 影响范围:仅本模块
切换触发条件(满足任一):
  1. 关键功能缺失,且社区3个月内无解决迹象
  2. 核心性能指标持续2周不达标
  3. 维护成本超过替代方案预估迁移成本的2倍
备选方案:LangChainRetriever (已定义接口,预留位置)
"""

关键区别

  • 前者只是下注 LlamaIndex 会赢。
  • 后者是承认赌注可能输,所以事先铺好了另一条路,并算好了换路的成本。架构师的价值,就体现在“铺另一条路”和“计算成本”这个动作里。

2. 回答最根本的问题:为什么需要架构师?

因为软件系统最大的成本不是第一次构建的成本,而是最后一次修改的成本之前的每一次修改成本的总和。

架构师的核心工作,就是持续地、有意地降低“修改成本”。具体表现为:

  1. 划定变更边界:让数据库的修改不影响前端,让算法调整不触发部署。
  2. 设计适配接口:让更换“微信支付”为“支付宝”就像更换一个插件。
  3. 量化切换成本:明确“从MySQL切换到PostgreSQL”需要4人月,而不是一句“很麻烦”。
  4. 建立演进规则:定义“什么时候我们该考虑换掉它”,而不是等问题爆发。

如果只停留在“要多维度评估”这种口号上,架构设计就是空洞的方法论。 真正的架构工作,是把这些方法论变成可执行的、可验证的工程实践

  • 把“考虑团队能力”变成 “为新框架设计一个为期两周、有明确验收标准的培训沙箱”
  • 把“评估扩展性”变成 “在预生产环境进行流量倍增的压测,并记录性能衰减曲线”
  • 把“确保可维护性”变成 “要求关键模块的代码圈复杂度不超过15,并在CI中强制执行”

总结

架构师无法担保未来,也不需要担保。架构师提供的是 “应对未知的工程预案”

当任何人说“用A技术”时,架构师的价值是紧接着问出并回答下面四个问题:

  1. “如果我们错了,什么时候能发现?” (定义监控指标和预警线)
  2. “发现时,我们有多长时间反应?” (评估故障影响和恢复时间目标)
  3. “切换到B方案,具体要几步,花多久,影响谁?” (制定详细的切换方案)
  4. “在没出问题的时候,我们做什么能让未来的切换成本更低?” (实施抽象、合约、松耦合)

谁都能做选型。但只有架构师会为这个选型提前写好“后悔药”的配方,并把它作为交付物的一部分。您为这个“后悔药”设计和付费,就是为架构师的价值付费。