系统学习 学习路径总入口:先选领域,再建立模型,最后用故障演练验证

技术选型决策地图:用问题树把数据库、消息与工作流、可观测性、入口与协议、容器与平台工程、操作系统与存储、RAG 分流到站内对比页

使用方式

本页是选型决策枢纽,不重复各组件的参数和优劣细节。每一条线先用问题缩小范围,再给出推荐路径,最后把需要深入比较的部分交给现有对比页。回答问题时不要跳步:访问模式、一致性或交付语义、规模、运维能力、成本与锁定,顺序不同,结论往往也不同。

建议按四步使用:先定位业务线;按顺序回答该线的判断问题;带着推荐路径去读对应对比页;最后用真实数据做小规模验证。若某个问题无法回答,说明需求还没澄清,此时不应进入产品选型。没有“唯一正确”的技术,只有与当前约束匹配、并且未来可以替换的选择。

七条选型决策树

数据库:先分访问模式,再看产品

判断问题:

  1. 主要是点查、短事务、复杂关联,还是大范围扫描与聚合?
  2. 是否需要跨表事务、外键和强一致读?
  3. 数据规模与增长速度是否超出单机,是否需要分片或列式存储?
  4. 缓存是纯 KV,还是需要列表、集合、过期、持久化和主从?
  5. 文档模型是否真的比关系模型更贴合,还是只是想逃避 schema 设计?
  6. 向量检索是辅助能力还是核心负载?
  7. 团队能否承担备份恢复、升级、故障切换和调优?

推荐路径:

对比页:psql-vs-mysql、mysql-vs-mariadb、postgres-vs-mongodb、redis-vs-memcached、valkey-vs-redis。向量库对比转入 RAG 线。

消息队列、流处理与工作流:先问消费后还要不要读

判断问题:

  1. 生产的是事件流,还是任务或命令?
  2. 消费后是否还需要回放历史,是否有多个独立消费者?
  3. 需要多复杂的路由:直连、主题、扇出、优先级、延迟队列?
  4. 延迟与吞吐哪个优先,能否接受批量和秒级延迟?
  5. 是否要求分区内有序,顺序键是什么?
  6. 是否是 IoT 长连接、QoS、海量设备场景?
  7. 任务是短时消息,还是定时批处理、依赖编排、回填与重跑?
  8. 团队能否运维 broker 集群、存储和跨机房复制?

推荐路径:

对比页:kafka-vs-rabbitmq、kafka-vs-pulsar、nats-vs-kafka、nats-vs-rabbitmq、emqx-vs-mosquitto、temporal-vs-airflow。

可观测性:先定要回答的问题,再定后端

判断问题:

  1. 当前最缺的是指标、日志、链路还是 profiling?
  2. 指标需要多长保留期,是否需要跨集群或长期存储?
  3. 日志主要用于按标签和时间排障,还是全文检索、审计与分析?
  4. 是否已有 Grafana 或 Prometheus 体系,是否要统一展示与告警?
  5. 是否还要纳管主机、网络设备和传统 IT 监控?
  6. 高基数标签、全量日志和 trace 采样是否有治理方案?
  7. 是否定义了 SLI 和 SLO,告警基于症状还是原因?

推荐路径:

对比页:prometheus-vs-victoriametrics、prometheus-vs-zabbix、loki-vs-elk、grafana-vs-kibana、version-eol-matrix。

Ingress、协议与反向代理:先分流量入口的位置

判断问题:

  1. 入口是 Kubernetes 集群内,还是传统主机或虚拟机的 Web 入口?
  2. 配置变更频率如何,能否接受 reload,是否需要动态服务发现?
  3. 是否需要灰度、重试、熔断、限流、mTLS 等七层治理?
  4. 静态资源、缓存、TLS 自动签发是否是核心需求?
  5. 团队是否已有 Nginx 配置与排障经验?
  6. 是否需要 Gateway API、多租户或独立控制面?
  7. 服务间接口是简单资源调用,还是需要流式、双向、强类型契约和多语言客户端?
  8. 性能和连接数要求是否来自自己的压测?

推荐路径:

对比页:envoy-vs-nginx、haproxy-vs-nginx、nginx-vs-caddy、traefik-vs-nginx、envoy-gateway-vs-nginx-ingress、grpc-vs-rest。

容器运行时与编排:先问单机还是集群

判断问题:

  1. 目标是本地开发或单机容器,还是多节点编排?
  2. 是否需要 rootless、daemonless、Pod 语义和 systemd 集成?
  3. Kubernetes 使用哪个 CRI 运行时,节点操作系统与 cgroup 版本是否匹配?
  4. 是否需要节点自动扩缩容、混合实例和成本优化?
  5. 配置管理是模板渲染还是按环境叠加?
  6. 部署采用 CI push 还是 GitOps pull?
  7. 是否真的需要自建控制面,还是托管集群更合适?

推荐路径:

对比页:docker-vs-podman、podman-vs-containerd、containerd-vs-cri-o、cgroup-v1-vs-v2、karpenter-vs-cluster-autoscaler、helm-vs-kustomize、argocd-vs-flux。

平台工程与 IaC

判断问题:

  1. 需求是主机配置与批量执行、长期收敛,还是云资源声明式编排?
  2. 是否已有 Terraform 状态、模块和流水线,团队能否治理状态锁、漂移与权限?
  3. 云资源是否需要纳入 Kubernetes 控制面,是否愿意承担 CRD 与控制面运维?
  4. 是否深度绑定单一云,愿意用原生模板换取集成度与锁定?

推荐路径:

对比页:ansible-vs-puppet、ansible-vs-terraform、terraform-vs-cloudformation、crossplane-vs-terraform。

操作系统、存储与基础设施:先分主机层与平台层

判断问题:

  1. 目标是开发机、服务器还是混合团队,是否需要统一命令与脚本?
  2. 文件系统更看重稳定与通用,还是快照、校验、压缩和卷管理?
  3. 服务管理是传统 SysV 脚本,还是需要依赖排序、并行启动与日志集成?
  4. 防火墙规则由发行版工具、Kubernetes 还是云安全组统一管理?
  5. 下载与调试是否需要跟随链接、断点续传、认证和并发?
  6. 编辑器要开箱即用、脚本化,还是需要异步插件与 LSP 生态?
  7. 是否影响现有备份、监控与合规基线?

推荐路径:

对比页:linux-vs-macos、linux-vs-windows、ext4-vs-xfs、btrfs-vs-zfs、systemd-vs-sysvinit、iptables-vs-nftables、curl-vs-wget、vim-vs-neovim。

RAG 与向量库:先问数据规模和检索形态

判断问题:

  1. 向量检索是主业务,还是现有数据库的辅助能力?
  2. 数据量是百万、千万还是亿级,增长速度如何?
  3. 是否需要强元数据过滤、多租户和频繁更新删除?
  4. 是否需要关键词加向量混合检索、重排和多路召回?
  5. 推理是本地原型还是生产高吞吐,GPU 与并发需求是什么?
  6. 是否需要分布式、存算分离和多种索引?
  7. 团队能否运维独立向量库、推理框架和 GPU 集群?

推荐路径:

对比页:pgvector-vs-qdrant、qdrant-vs-milvus、ollama-vs-vllm、vllm-vs-sglang、version-eol-matrix。

横向原则

  1. 先定义问题与验收标准:访问模式、一致性或交付语义、SLO、数据规模、增长预期。没有这些,产品对比没有意义。
  2. 基准测试只用于筛选:厂商 benchmark 的硬件、数据分布、并发模型和配置通常与你的场景不同;用自采数据做小规模压测,记录 p50、p95、p99、错误率、资源占用和成本。
  3. 把运维成本算进总拥有成本:集群部署、监控告警、备份恢复、升级、值班、招聘和培训都要计入。一个性能更好但团队不会排障的组件,长期成本更高。
  4. 评估锁定与退出:托管服务、专有 API、私有协议、许可条款和数据导出方式都会影响迁移;至少保留可导出的原始数据和可替换的接口层。
  5. 先做小规模验证:用真实流量影子测试或灰度,设定成功与失败门槛、回滚条件;验证备份恢复和故障切换,而不只是“能启动”。
  6. 管理生命周期:核对版本支持窗口、EOL、升级路径和安全补丁,参考 platform-lifecycle-matrix 与 version-eol-matrix。
  7. 保持可逆:优先选择能逐步替换、能被现有团队运维的方案,不要为尚未出现的十倍规模预支复杂度。

常见误区

相关命令

psql -c 'select version()'
redis-cli info memory
kafka-topics --bootstrap-server broker:9092 --describe --topic events
promtool check config prometheus.yml
nginx -t
kubectl get nodes -o wide

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 为什么选型要先回答访问模式和交付语义,而不是先比较产品功能?
  2. 一个团队已有 PostgreSQL,日志量不大但需要按标签排障,RAG 数据在百万级,应如何分流?
  3. 为什么厂商基准测试不能直接作为选型结论?验证阶段至少应记录什么?
答案
  1. 因为访问模式决定数据库类型,交付语义决定消息系统;功能和参数只有在需求边界明确后才有可比性。先比产品容易被功能清单和 benchmark 带偏。
  2. 主库继续 PostgreSQL;百万级向量先用 pgvector,不急于引入独立向量库;日志若在 Kubernetes 且已有 Grafana,优先评估 Loki,而不是直接上 ELK。三者都应先做小规模验证。
  3. 厂商 benchmark 的硬件、数据分布、并发和配置与真实场景不同,绝对性能数字不可直接迁移。验证阶段应记录自采数据下的 p50、p95、p99、错误率、资源占用、成本、运维步骤、备份恢复和回滚结果。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令