技术选型指南
消息队列选型
场景对照表
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 日志采集、事件流、大数据 | Kafka | 高吞吐、持久化、可回放、生态成熟 |
| 业务解耦、异步通知 | RabbitMQ | 灵活路由、管理界面友好 |
| 金融交易、顺序消息 | RocketMQ | 严格顺序、事务消息、低延迟 |
| 大规模日志/事件流 | Kafka / Pulsar | 高吞吐、持久化、回放 |
| 云原生多租户 | Apache Pulsar | 存算分离、Geo-Replication |
| 任务队列(简单) | Redis Stream / BullMQ | 轻量、无需额外组件 |
关键指标对比
吞吐量(单机):
Kafka ≈ 百万级 msg/s
Pulsar ≈ 百万级 msg/s(BookKeeper 持久化)
RocketMQ ≈ 十万级 msg/s
RabbitMQ ≈ 万级 msg/s
端到端延迟:
RabbitMQ < 1ms(内存队列)
RocketMQ < 5ms
Kafka 5~15ms(批量提交)
Pulsar < 5ms(独立 Broker)注册中心 & 配置中心选型
一致性模型选择
强一致性(CP):
etcd → Kubernetes 生态首选,Raft 协议
Zookeeper → 老牌,Paxos 变体,运维复杂
最终一致性(AP):
Nacos → Spring Cloud 生态首选,支持 AP/CP 切换
Consul → 多数据中心,内置服务网格
纯配置中心:
Apollo → 权限管控强,灰度发布,适合大型团队
Nacos → 配置 + 注册二合一,中小团队首选决策树
需要 Kubernetes 原生支持?
├── 是 → etcd(已内置)或 Consul
└── 否 → Spring Cloud 生态?
├── 是 → Nacos(一站式)
└── 否 → 多数据中心?
├── 是 → Consul
└── 否 → Apollo(纯配置)API 网关选型
| 维度 | Kong | APISIX | Nginx + Lua |
|---|---|---|---|
| 性能 | 高 | 极高 | 高 |
| 插件生态 | 丰富(官方+社区) | 丰富(Apache 孵化) | 需自研 |
| 配置方式 | Admin API / DB | etcd 动态 | 静态文件 |
| 控制台 | Kong Manager | APISIX Dashboard | 无 |
| 云原生 | Kong Ingress | APISIX Ingress | 需适配 |
| 适用规模 | 中大型 | 中大型 | 小型 |
推荐:新项目优先 APISIX(性能更好,Apache 社区活跃);已有 Kong 生态则继续 Kong。
缓存选型
Redis vs Memcached
| 维度 | Redis | Memcached |
|---|---|---|
| 数据结构 | String/Hash/List/Set/ZSet/Stream 等 | 仅 String |
| 持久化 | RDB + AOF | 无 |
| 集群 | Cluster / Sentinel | 客户端一致性哈希 |
| 事务 | MULTI/EXEC(弱事务) | 无 |
| Lua 脚本 | 支持 | 不支持 |
| 内存效率 | 略低(数据结构开销) | 略高 |
| 适用场景 | 通用缓存、会话、排行榜、分布式锁 | 简单 KV 缓存 |
结论:99% 场景选 Redis,Memcached 仅在极致内存效率且数据结构简单时考虑。
数据库中间件选型
分库分表需求:
Java 应用 → ShardingSphere-JDBC(无代理,性能最优)
多语言 → ShardingSphere-Proxy(透明代理)
MySQL 老项目 → MyCat(成熟稳定)
超大规模 MySQL → Vitess(YouTube 级别)
读写分离(无分片需求):
→ ShardingSphere-JDBC ReadWrite Splitting
→ ProxySQL(轻量级 MySQL 代理)可观测性选型
三支柱工具链
Metrics(指标监控):
推荐:Prometheus + Grafana
云托管:AWS CloudWatch / Datadog
Logs(日志):
推荐:ELK(Elasticsearch + Logstash + Kibana)
轻量:Loki + Grafana(日志不索引,成本低)
云托管:AWS CloudWatch Logs
Traces(链路追踪):
推荐:Jaeger(CNCF 毕业项目)
备选:Zipkin(轻量)
商业:Datadog APM / New Relic
统一采集:
→ OpenTelemetry(OTEL)SDK + Collector
一次接入,多后端输出存储选型
| 需求 | 推荐 |
|---|---|
| 对象存储(S3 兼容) | MinIO(自建)/ AWS S3(云) |
| 块存储 | Ceph RBD / AWS EBS |
| 文件系统 | CephFS / NFS / AWS EFS |
| 冷数据归档 | MinIO + 生命周期策略 |
| K8s 持久化卷 | Ceph CSI / Longhorn |