83.3 工具与产品清单

一句话

清单不是排行榜,是**「在什么约束下选谁」:每个条目必须带主场章节 + 主线版本 + 淘汰条件**;给不出淘汰条件的推荐,本质是广告。

五条选型纪律(比清单本身更重要)

纪律 具体做法 违反的后果
版本锚定 每个版本都标「核对日期」,本表为 2026-10;版本是时间戳,不是永久事实 半年后有人照表选了已 EOL 的版本
一个能力域一个主选 主选 + 一个备选,第三个只在迁移期存在 三套并存 = 三套运维 + 三套招聘要求
N-1 上生产 新大版本等第一个 patch 或第二个小版本再上核心链路 首周踩到已修复的回归
退出成本先算 先问「怎么走」,再问「多好用」 数据模型绑定后,迁移成本是引入成本的 10 倍
托管优先,除非 除非 TCO 更低、合规要求、或该能力就是你的竞争力 自建中间件养一个团队,只为省下云账单的 20%

🔑 一句判据:「如果我明天要换掉它,代价是什么?」 答不出,就不是选型,是绑定。

一、版本锚点表(2026-10 核对)

这张表的作用是校准时间感:如果你的印象还停在「K8s 1.28 / PG 15 / Redis 7」,说明你的知识落后了 3–4 个大版本。

产品 主线版本 关键事实 备注
Kubernetes 1.37(1.36/1.35 仍在支持期) 每年 3 个版本,支持约 14 个月 客户端与服务端版本偏差 ≤ 1 个小版本
containerd 2.4 2.x 起镜像与运行时分离更彻底 CRI 实现的主流选择
Docker Engine 29 开发机用它,生产用它跑容器要慎重 生产直接用 containerd 更省一层
Envoy 1.40 数据面事实标准;Gateway API 是配置入口 见 47.1 反向代理 的转发语义
Gateway API 1.6 Ingress 的继任者,按角色分资源 新项目直接上,不要再写 Ingress
Cilium 1.20 eBPF 数据面,NetworkPolicy + 可观测性一体 内核版本要够新,老内核功能受限
Istio 1.31 ambient 模式(无 sidecar)已可用 见 30.5 Service Mesh 与 Sidecar
etcd 3.7 K8s 的默认协调层 见 48.6 产品 (etcd / Consul / ZooKeeper / Nacos)
Helm 4.3 4.x 起与服务端交互方式变化 与 Kustomize 二选一,别混用
Argo CD 3.5 GitOps 拉模式的标准实现 与 Flux 二选一
Flux 2.9 更「云原生」的 controller 组合 团队熟悉 Helm 时 Argo CD 更直观
KEDA 2.21 事件驱动伸缩(队列长度、Kafka lag) HPA 只管 CPU/内存,KEDA 补上业务指标
Kyverno 1.19 YAML 表达的策略引擎 比 OPA/Rego 学习曲线低
Terraform 1.16 BSL 许可 见下方「许可证」表
OpenTofu 1.13 Terraform 的 MPL 分支,Linux Foundation 新项目在意许可就选它
Harbor 2.15 镜像仓库 + 签名 + 扫描 云上直接用托管 registry
PostgreSQL 18.6(18 于 2025-09 发布) 默认 OLTP 首选 扩展生态是它的护城河
MySQL 8.4 LTS 线(创新线版本号近年改为年份制) 生态与运维人才最多 具体版本以官网 EOL 表为准
Redis 8.10 8.x 起把多种数据结构统一进核心 许可变更见下表
Valkey 9.1 Redis 的 Linux Foundation 分支 云厂商大规模采用
Kafka 4.x 4.0 起只支持 KRaft,ZooKeeper 已移除 老集群升级前先迁元数据
Pulsar 5.0 存算分离、多租户 运维复杂度高于 Kafka
NATS 2.15 轻量、JetStream 持久化 适合边缘与内部 RPC
RabbitMQ 4.3 4.x 起 Khepri 元数据存储可选 复杂路由仍是它的主场
ClickHouse 26.9(年份制版本号) 单表聚合的性价比标杆 不适合高频点更新
Elasticsearch 9.5 检索 + 向量混合查询 许可与成本要提前算
OpenSearch 3.9 ES 7.11 分支,Apache 2.0 云厂商托管普遍
MongoDB 9.0 文档模型 + 聚合管道 SSPL,云上多为托管版
Ceph 20.2 统一块/文件/对象存储 自建对象存储的常见底座
Prometheus 3.15 3.x 起原生支持 OTLP 摄入 长期存储仍需远端写
Grafana 13.2 可视化 + Loki/Tempo/Mimir 全家桶 AGPLv3
OpenTelemetry SDK 1.45 埋点与协议的事实标准 见 50.9 OpenTelemetry 标准
Jaeger 2.22 2.x 基于 OTel Collector 重构 新项目直接用 OTel + Tempo
Keycloak 26.8 开源 IdP 的默认选项 定制主题与多租户要评估工作量
OpenBao 2.7 Vault 的 MPL 分支 在意许可时的替代
Dapr 1.18 多运行时:状态、发布订阅、工作流 见 33.4 多运行时
PyTorch 2.14 训练与推理的通用底座 推理侧通常再套 vLLM/SGLang
vLLM 0.32 PagedAttention + continuous batching 通用 GPU 推理的首选
SGLang 0.5 RadixAttention,前缀共享强 多轮/共享 system prompt 场景优势明显
LangGraph 1.2 有状态图执行,持久化 checkpoint 只有 1–2 步时别用
MCP 规范 2026-07-28 版 工具/资源/提示的标准化连接 见 83.2 参考文献 第六节
A2A v1.0 Agent 间任务协作 Linux Foundation 治理

⚠️ 这张表只用来校准,不用来抄版本号。真正选型时打开官网的 release / EOL 页面,看当天的支持矩阵。

二、按层选型:主选、备选与淘汰条件

2.1 L0 运行时与云原生

能力域 主选 备选 什么时候别用主选
容器编排 Kubernetes K3s / Talos / 云托管 K8s 团队 < 5 人、服务 < 10 个:单机 + systemd + 容器更省心
容器运行时 containerd CRI-O 需要 Docker 特有功能(buildx、compose)时用 Docker 开发,不上生产
强隔离沙箱 Firecracker / gVisor Kata Containers 跑不可信代码(AI 生成代码、多租户函数)才需要
入口 Gateway API + Envoy Traefik / Nginx Ingress 只有 3 条路由时,Ingress 足够
服务网格 Istio ambient Linkerd / Cilium Service Mesh 没有专职 SRE:先上重试/超时/熔断的库,别上网格
网络与策略 Cilium Calico 内核 < 4.19 时 eBPF 能力受限
GitOps Argo CD Flux 只有一个集群、一天发一次:CI 直推更简单
IaC OpenTofu / Terraform Pulumi / Crossplane 全部资源都在一个云、且用托管控制台:先别引入 IaC 债
策略即代码 Kyverno OPA Gatekeeper 团队没人维护策略:先上 CI 检查,别上准入控制
伸缩 KEDA + HPA Karpenter(节点层) 负载平稳的系统:固定副本更便宜
镜像仓库 Harbor 云托管 registry 单地域、小团队:云托管省事且更便宜

2.2 数据与消息

能力域 主选 备选 什么时候别用主选
OLTP PostgreSQL 18 MySQL 8.4 需要极致简单的主从 + 全球最多 DBA:MySQL
分布式 SQL TiDB CockroachDB / YugabyteDB 单表 < 1 亿行:单机 PG 分库都比分布式数据库便宜
缓存 Redis 8 / Valkey 9 KeyDB / 云托管 只需要 KV + TTL:云托管省运维
消息 Kafka 4 Pulsar / RocketMQ / NATS / RabbitMQ 消息量 < 10 万/天:数据库 outbox + 定时任务更简单
延迟/定时消息 RocketMQ / Kafka + 调度器 数据库轮询 精度要求秒级以下:别用消息队列硬做
事务与长流程 Temporal Dapr Workflow / 自研状态机 流程只有 3 步且不会变:状态机表更可控
OLAP ClickHouse StarRocks / Doris / DuckDB 需要高频点更新:ClickHouse 不擅长
湖仓 Iceberg + Trino/Spark Delta Lake / Hudi 数据量 < 1TB:直接进 PG/CH
搜索 Elasticsearch 9 OpenSearch 3 只做前缀匹配:B+ 树索引的延迟更低(微秒级)
向量检索 pgvector(规模 < 千万) Milvus / Qdrant / Weaviate / LanceDB 已有 PG 且 < 500 万向量:别再引一个库
文档 MongoDB 9 PG JSONB 需要事务与关联:PG JSONB 更省
时序 TimescaleDB / VictoriaMetrics InfluxDB 3 指标量 < 100 万/天:Prometheus 足够
对象存储 S3 兼容(云)/ MinIO / Ceph RGW — 需要 POSIX 语义:用文件存储,别硬套对象存储
CDC Debezium Flink CDC 只在同库内同步:触发器/物化视图更简单

2.3 工程效能与可观测性

能力域 主选 备选 什么时候别用主选
CI GitHub Actions / GitLab CI Tekton / Dagger 构建需要 GPU 或特殊硬件:自建 runner
构建缓存 BuildKit + registry cache Bazel / Nx / Turborepo 单仓库、构建 < 3 分钟:别引入远程缓存
测试 Testcontainers + Playwright Pact(契约)/ k6(压测) 见 53.1 测试金字塔
发布 Argo Rollouts Flagger 见 55.1 发布策略
指标 Prometheus 3 + Grafana 13 VictoriaMetrics / Mimir 指标基数 > 100 万:先治理标签,再换存储
日志 Loki ClickHouse / ELK 需要全文检索与复杂聚合:ClickHouse 更合适
链路 OTel + Tempo Jaeger / SigNoz 采样率 100% 且量大:先算成本
持续剖析 Pyroscope / Parca 云厂商 profiler 见 34.3 性能分析方法
安全扫描 Trivy + Syft + Cosign Grype / Snyk 见 38.10 供应链安全
密钥 OpenBao / 云 KMS + External Secrets Vault 只有几个静态密钥:K8s Secret + 加密静态数据
值班与事件 PagerDuty / Grafana OnCall incident.io 见 56.3 on-call (值班 / 升级路径 / runbook)

2.4 AI 原生栈(2024–2026 新增的一层)

这一层的判据和传统中间件不同:它的输出是概率性的,所以「评测」和「可观测」不是可选项,是入场券。

能力域 主选 备选 什么时候别用主选
模型接入 托管 API(多家并行) 自建开源权重(Qwen / Llama / DeepSeek 系列) 数据不能出域、或单位成本高于自建盈亏点:才自建
推理引擎 vLLM SGLang / TensorRT-LLM / llama.cpp(边缘) 峰值 QPS < 1:直接用托管 API,别养 GPU
推理网关 LiteLLM / Envoy AI Gateway 云厂商 AI 网关 只接一家模型:SDK 直调更简单
Agent 框架 LangGraph(有状态图) OpenAI Agents SDK / Claude Agent SDK / Pydantic AI 大多数场景不需要框架:1–3 步的流程直接写代码 + 一次工具调用
长流程编排 Temporal Dapr Workflow 见 24.5 Saga (编排 / 协同 / 补偿) 的补偿思路
RAG 索引 LlamaIndex / 自研切分 Haystack / DSPy 语料 < 1000 页:全文塞进上下文可能更准
向量库 pgvector / Qdrant Milvus / Weaviate / LanceDB 规模够小就别引新库,见「数据与消息」一节
重排 BGE / Cohere Rerank 自训练 cross-encoder 候选 < 20 条:省掉 rerank
评测 promptfoo / DeepEval / ragas LangSmith / Langfuse 数据集 只有 demo、没有验收标准:先写 eval 再写功能
LLM 可观测 Langfuse / LangSmith + OTel GenAI 自建 trace 表 单机内部工具:结构化日志足够
沙箱 E2B / Firecracker / gVisor / WASM Docker + 无网络 + 只读 FS 任何「模型能执行代码」的场景都必须有沙箱
微调 PEFT (LoRA) + TRL 全参微调 / 托管微调 需求是「补知识」:用 RAG,不要微调
训练编排 Ray + FSDP/DeepSpeed Kubeflow / 托管训练 单卡能跑完:别上分布式

💡 关于 Agent 框架,我的判断是:2025 年之后,框架的价值从「帮你调模型」转向「帮你管状态」。如果它不能给你持久化、可恢复、可观测的执行图,那它就只是语法糖——而语法糖在需求变化时最先被删掉。

三、选型决策表(按场景)

你的场景 主选 备选 淘汰条件(什么情况下不选)
10 人团队,单体 + 一个库 PG + 单体 + 云托管 模块化单体 + 读写分离 上 K8s:运维成本超过收益
要做多活 单元化 + 双向同步 + 冲突收敛 两地三中心(冷/温备) 业务 RTO > 30 分钟:多活是过度设计
要降 30% 云成本 存储分级 + 弹性 + 预留 架构级降本(缓存/批处理) 成本不能归因到团队:先做标签治理
要接大模型做知识问答 RAG(切分 + 混合检索 + rerank + 引用) 长上下文直塞(小语料) 语料每天变、且要求引用:必须 RAG
要做 Agent 平台 网关 + 沙箱 + 状态机 + eval + trace 单 Agent + 人工确认 任务无法用规则验收:先做 copilot,不做 autopilot
要过等保三级 基线加固 + 日志留存 + 边界隔离 云等保合规包 见 3.1 等级保护与网络安全法
要治理发布事故 灰度 + 自动回滚 + 变更审计 特性开关 + 影子流量 没有 SLO:先有指标,再谈发布策略
团队没有 SRE 全托管(云数据库/云 K8s/云可观测) 托管 + 一个懂行的人 自建中间件:没人值班就是定时炸弹
要从 0 搭数据平台 Iceberg + Trino + 调度 云数仓(Snowflake/BigQuery/湖仓一体) 数据量 < 1TB:云数仓更省
要接多个模型供应商 LLM 网关 + 统一评测集 SDK 直调 + 抽象层 只接一家且短期不换:别提前抽象

四、许可证与治理:选型前必须查的一张表

开源不等于免费,许可证变更会在一夜之间改变你的成本结构。

产品线 变更 对你的影响 替代
Terraform 2023-08 改为 BSL 1.1 与 Terraform 竞品提供服务可能违约 OpenTofu(MPL,Linux Foundation)
Redis 2024-03 改为 RSALv2 / SSPLv1 云厂商不能直接售卖托管版 Valkey(BSD,Linux Foundation)
Elasticsearch 7.11 起 SSPL / Elastic License;8.16 起增加 AGPL 选项 自建可,托管售卖受限 OpenSearch(Apache 2.0)
MongoDB 2018 起 SSPL 云上自建需评估条款 PostgreSQL JSONB / 云托管
Grafana 2021 起 AGPLv3 分发修改版需开源 自建/托管均可用,注意分发场景
HashiCorp 系(Vault 等) BSL;2025 年被 IBM 收购 长期路线存在不确定性 OpenBao
Kafka Apache 2.0(未变) 注意 Confluent 的商业组件 —
Kubernetes / OTel / Cilium Apache 2.0(CNCF) 无 —
vLLM / SGLang / PyTorch Apache 2.0 / BSD 系 无 —
MCP / A2A / Agent Skills 开放规范,AAIF(Linux Foundation)治理 规范仍在演进,实现要跟版本 —

⚠️ 许可证结论会过期。合并前让法务看一眼 SPDX 标识,比自己读三遍 LICENSE 靠谱。

五、算一遍:托管 API 与自建推理的盈亏平衡

清单里最贵的那个选择是「要不要自建推理」。它不该靠感觉,它是一道固定成本 vs 变动成本的算术题。

#!/usr/bin/env python3
"""托管 API vs 自建推理:月度成本、盈亏平衡点、利用率敏感性。

单价都是占位值,跑之前换成你合同里的价格与实测吞吐。
用法:python3 llm-cost.py
"""
# ---------- 可改参数 ----------
DAILY_REQ = 200_000      # 日请求量
IN_TOKENS = 1_500        # 平均输入 token(system prompt + 检索片段 + 问题)
OUT_TOKENS = 400         # 平均输出 token
USD_PER_M_IN = 3.00      # 托管:输入单价 / 百万 token
USD_PER_M_OUT = 15.00    # 托管:输出单价 / 百万 token
GPU_MONTH_USD = 2_000    # 自建:每卡每月(含机器、机房、人力摊销)
GPU_TOK_S = 2_000        # 自建:实测输出吞吐 token/s(同模型、同精度)


def api_month(n_req: float) -> float:
    """托管:按 token 线性计费,没有固定成本。"""
    return (n_req * IN_TOKENS * USD_PER_M_IN + n_req * OUT_TOKENS * USD_PER_M_OUT) / 1e6


def gpu_capacity(util: float) -> float:
    """单卡每月的输出 token 产能 = 秒数 × 利用率 × 吞吐。"""
    return 30 * 86400 * util * GPU_TOK_S


def breakeven_daily() -> int:
    """二分找「托管月成本 = 一张卡月成本」的日请求量。"""
    lo, hi = 1, 10_000_000
    while lo < hi:
        mid = (lo + hi) // 2
        if api_month(mid * 30) < GPU_MONTH_USD:
            lo = mid + 1
        else:
            hi = mid
    return lo


if __name__ == "__main__":
    n_month = DAILY_REQ * 30
    api = api_month(n_month)
    print(f"月请求 {n_month:,}|月 token:入 {n_month * IN_TOKENS / 1e6:.1f}M,出 {n_month * OUT_TOKENS / 1e6:.1f}M")
    print(f"托管:${api:,.0f}/月")
    print(f"一张卡 ${GPU_MONTH_USD:,}/月 ↔ 托管 {breakeven_daily():,} 请求/天;低于这条线,托管一定更便宜")
    for util in (0.10, 0.35, 0.70):
        cards = -(-n_month * OUT_TOKENS // int(gpu_capacity(util)))
        print(f"自建 @ 利用率 {util:.0%}:{cards} 张卡 → ${cards * GPU_MONTH_USD:,.0f}/月")

本机跑出来的结果(2026-10,参数如上):

月请求 6,000,000|月 token:入 9000.0M,出 2400.0M
托管:$63,000/月
一张卡 $2,000/月 ↔ 托管 6,350 请求/天;低于这条线,托管一定更便宜
自建 @ 利用率 10%:5 张卡 → $10,000/月
自建 @ 利用率 35%:2 张卡 → $4,000/月
自建 @ 利用率 70%:1 张卡 → $2,000/月

三个读法,比数字本身重要:

读法 含义 决策含义
盈亏平衡线与利用率无关 单卡月成本是固定的,所以「一张卡 ↔ 多少请求」只取决于托管单价 别拿「我们利用率低」论证自建更贵——利用率影响的是需要几张卡,不是单卡这条线
量小托管赢,量大自建赢 托管是纯变动成本(0 请求 = $0),自建是高固定成本 日请求低于盈亏平衡线时,自建省下的钱还不够养一个值班的人
利用率决定卡数,卡数决定成本 10% 与 70% 相差 5 倍卡数 自建的隐性成本是低利用率;如果你的流量有强峰谷,先算清峰值要几张卡

⚠️ 三个最容易被算错的数:① 利用率(真实常在 10%–40%,不是 80%);② 输出 token 长度(长输出线性放大成本,还拖长 TPOT);③ prefill 没折算(RAG 场景 1.5k 输入 token 的预填充并不便宜,本脚本把输入成本算进了托管、却把自建侧的输入算力折进了吞吐——真实估算必须用自己的负载压测出 tokens/s)。

反模式

反模式 后果
按 GitHub star 选型 star 反映热度,不反映你的负载、团队与运维能力
新版本首发就上核心链路 用生产环境替社区做回归测试
同一能力域并存三套(两套 MQ、两套缓存) 运维、监控、招聘、故障排查全部 ×3
把开源当免费 人力、合规、安全响应成本往往超过商业授权
只看功能对比,不看退出成本 数据模型绑定后无法迁移
用 demo 的观感替代 eval 演示样本是挑过的,线上长尾立刻暴露
无视配额与限流(托管服务) 突发流量被云厂商限流,故障排查方向完全错
版本表不写核对日期 半年后照表选型,选到已 EOL 的版本
为了「技术先进」引入组件 每个组件都是一份 7×24 的运维责任

自检

Q1 一个 8 人团队要做一个内部知识库问答,第一版就计划上「K8s + Milvus + LangGraph + vLLM 自建」。请指出至少三处过度设计,并给出替代路径。

▸ 答案:① K8s——内部工具、用户几十人,单机 Docker Compose 或一个托管容器服务足够;② Milvus——文档量在百万 token 级,pgvector 甚至内存里的向量索引就够,且省掉一套分布式运维;③ vLLM 自建——QPS 低时托管 API 的单位成本更低,还没有 GPU 空闲成本;④ LangGraph——问答是「检索 → 生成」两步,直接写代码更清楚。替代路径:托管 API + pgvector + 100 行代码 + 一个 eval 集,先验证「答得准不准」,再谈扩展性。

Q2 团队说「我们要用 Terraform,但许可改成 BSL 了,怎么办?」请给出判断依据,而不是直接给答案。

▸ 答案:判断依据是使用方式:BSL 限制的是「用 Terraform 提供与 HashiCorp 竞争的服务」;如果只是内部管理自己的基础设施,通常仍在允许范围内(但要以当时的许可证文本与法务意见为准)。真正需要迁移的信号是:① 你要做对外售卖的平台;② 你依赖的 provider 生态开始分裂;③ 公司合规要求只用 OSI 许可。迁移成本要算:state 文件、provider 版本、模块库、CI 集成。结论:先确认使用方式,再决定是否迁移;迁移不是「许可变了就必须做」的条件反射。

Q3 有人主张「Kafka 4 移除了 ZooKeeper,所以我们升级只是换个版本」。请指出升级路径上最容易被忽略的两件事。

▸ 答案:① 元数据迁移不可逆——从 ZK 模式切到 KRaft 需要专门的迁移流程,且回退窗口有限,必须先演练;② 客户端与工具链——依赖 ZK 的老工具(监控、管理台、自定义脚本)会直接失效,ACL/配额模型也有差异。另外要确认版本跳跃跨度:Kafka 的升级通常要求逐个大版本走,跨版本直接升会触发协议不兼容。判据:升级方案里有没有「回滚到 ZK 模式」的步骤,没有就是没想清楚。

Q4 为什么「LLM 网关」不能简单等同于「API 网关加个转发」?请给出至少三个它必须做的事。

▸ 答案:① token 计量与成本归因——按团队/功能/租户拆分 token 消耗,API 网关只统计请求数;② 模型路由与降级——同一请求按成本/延迟/质量要求路由到不同模型,并在主模型故障时降级;③ 语义缓存与去重——相同或相近请求复用结果,需要 embedding 与阈值;④ prompt/响应审计——留存输入输出用于评测与合规,涉及脱敏。这些都不是「转发」能覆盖的,本质是把概率性依赖纳入治理。

Q5 请用一句话说明:为什么这份清单里「什么时候别用」这一列比「主选」更重要?

▸ 答案:因为主选可以抄,淘汰条件不能抄——别人的主选是在他的团队规模、负载特征、合规约束下成立的;而「什么时候别用」是这些约束的显式表达,读者可以拿自己的约束去比对。没有淘汰条件的清单只能制造从众,不能帮助决策。

关联