Skip to content
返回架构决策

厂商锁定

评估并最小化离开厂商的成本,而非拒绝用厂商。

为什么

厂商锁定是切到不同供方的成本——以工程月计。有些锁定可(S3 API 事实标准、离开便宜);有些严重(DynamoDB 专有 API、离开是重写)。拒所有锁定意味全自建(贵、慢);拥所有锁定意味厂商涨价翻倍账单。纪律是按组件评估锁定、自由接受便宜锁定、仅锁定严重且切换可能处加可移植层(薄抽象、标准格式)。盲目"无锁定"和盲目"全押一厂商"一样贵。

何时使用

选任何厂商管理组件时。1 小时评估。厂商定价或路线图变时重访。

如何做

1. 对厂商组件识别专有面:
   - API(标准如 S3,或专有如 DynamoDB?)
   - 数据格式(标准如 SQL/JSON,或专有?)
   - 集成(绑其他厂商服务吗?)
2. 估切换成本:移备选的工程月
   - < 1 工程月 → 低锁定,自由接受
   - 1-6 工程月 → 中,若切换可能加薄抽象
   - > 6 工程月 → 高,避免或自觉接受+文档
3. 高锁定则谈:多年价锁、数据导出保证
4. 即使专有存储也用标准格式(SQL、JSON、Parquet)存数据
5. 标准(容器+队列)可行处避免厂商专编排(Lambda 绑 Kinesis)
6. 按组件把锁定评估记架构文档

示例

组件及锁定:
  S3(存储):标准 API(MinIO 兼容),切换 < 1 工程周 → 低
  DynamoDB(KV):专有 API,切 Postgres = 3 工程月 → 中
  Lambda(计算):专有事件绑,切 Fargate = 2 工程月 → 中
  Bedrock(LLM):专有模型 API,切 = 1 工程周(提示可移植)→ 低

行动:
  - S3、Bedrock:自由接受(低锁定)
  - DynamoDB:加薄 DAO 层使查询可换 Postgres
  - Lambda:保持函数小+基于容器以可移植
  - 数据:全 JSON/Parquet,永不厂商专格式

常见问题

  • ⚠把所有锁定当等——S3 锁定可忽略(标准 API)、DynamoDB 锁定真(专有);按组件评估非全局。

最佳实践

  • ✓商品服务(存储、队列)API 标准化处接受锁定;嵌业务逻辑服务(工作流引擎)抗之。
  • ✓任何高锁定组件留"厂商退出 runbook"——即使永不用,写它揭示真实切换成本。

相关资源