Backend 常用中间件与基础设施 MOC
后端常用基础设施组件总入口,按缓存、消息、搜索、反向代理、分布式协调和对象存储组织 Redis、Kafka、RabbitMQ、Elasticsearch、Nginx、etcd、ZooKeeper、MinIO 的学习与选型。
#moc
#growing
#backend
#architecture
[!info] related notes
Backend 常用中间件与基础设施 MOC
知识总览
filters:
and:
- 'file.ext == "md"'
- 'file.inFolder("z")'
- 'this.file.links.contains(file)'
- 'file.path != this.file.path'
formulas:
knowledge: 'file.asLink(title)'
properties:
formula.knowledge:
displayName: 知识
note.description:
displayName: Description
note.mastery:
displayName: Mastery
views:
- type: table
name: 知识总览
order:
- formula.knowledge
- note.description
- note.mastery
columnSize:
formula.knowledge: 280
note.description: 760
note.mastery: 56
[!abstract] 学习目标 “中间件”在这里采用宽泛工程用法:业务服务之外,为缓存、消息、搜索、流量入口、协调和对象存储提供通用能力的基础设施组件。
不从安装和命令开始,而从数据模型、可靠性语义、扩展方式和失败边界开始。
一张图看组件位置
Client
↓
Nginx: proxy / TLS / load balancing
↓
Application Services
├─ Redis: cache / shared transient state
├─ Kafka: replayable event log / CDC
├─ RabbitMQ: routed queue / job / retry
├─ Elasticsearch: search projection
├─ etcd / ZooKeeper: coordination metadata
└─ MinIO: binary object storage
组件定位表
| 组件 | 核心模型 | 最适合解决 | 首要风险 |
|---|---|---|---|
| Redis | 内存数据结构服务 | Cache、Session、Counter、短期状态 | 内存、热 Key、一致性、误当事实库 |
| Kafka | 分区持久日志 | Event Stream、CDC、Replay | Lag、Hot Partition、磁盘与顺序边界 |
| RabbitMQ | Exchange + Queue + ACK | Job、路由、Retry / DLQ | Unacked、重投递、积压与错误重试 |
| Nginx | 事件驱动代理 | TLS、反向代理、LB、流量治理 | 路径、buffering、timeout、upstream 故障 |
| Elasticsearch | Lucene 分布式索引 | 全文搜索、聚合、日志检索 | Mapping、Shard、Heap、派生数据同步 |
| etcd | 强一致 KV + Revision / Lease | 选主、配置、协调元数据 | Quorum、容量、Lease 与 stale owner |
| ZooKeeper | ZNode + Session + Watch | 传统协调、成员关系、选主 | Session、Watch、ZNode 规模 |
| MinIO | S3 对象存储 | 图片、视频、附件、模型文件 | 容量、Quorum、元数据一致性 |
推荐学习顺序
P0:高频后端与面试
- Redis:缓存语义、TTL / Eviction、持久化、复制与集群;项目驱动学习见 BodySense Redis 从零到一课程 MOC。
- Kafka:Topic / Partition / Offset、Consumer Group、Retention / Replay、ISR、KRaft。
- RabbitMQ:Exchange / Queue / Binding、Confirm / ACK、Prefetch、DLQ、Quorum Queue。
- Nginx MOC:请求匹配、反向代理、LB、TLS、buffering 与流式连接。
- Elasticsearch:倒排索引、Mapping、Analyzer、Segment、Shard / Replica、NRT。
P1:分布式与生产架构
- etcd:Revision、Watch、Lease、Txn / CAS、Raft。
- MinIO:S3 API、Presigned URL、Multipart、Erasure Coding。
- ZooKeeper:Session、Ephemeral / Sequential ZNode、Watch 与协调 recipe。
先按需求选类别
需要低延迟共享状态? → Redis
需要可保留、可重放的事件流? → Kafka
需要一个任务被某个 Worker 完成? → RabbitMQ / Redis-backed queue
需要全文搜索与相关性排序? → Elasticsearch
需要 TLS、反代和负载均衡? → Nginx
需要强一致协调元数据? → etcd / ZooKeeper
需要保存大文件或二进制对象? → MinIO / S3
三个最常混淆的边界
Redis Stream、RabbitMQ 与 Kafka
- Redis Stream:已有 Redis、规模较小、希望获得 ID / Consumer Group / Pending。
- RabbitMQ:Work Queue、复杂路由、ACK、Retry / DLQ 更自然。
- Kafka:高吞吐事件日志、长保留、多个独立下游和 Replay 更自然。
数据库、Redis 与 Elasticsearch
Database → 业务事实、约束、事务
Redis → 可丢或可重建的加速/短期状态
Elasticsearch → 从事实层同步出的搜索投影
数据库与 MinIO
Database → object id / owner / status / metadata
MinIO → actual bytes
跨两者的上传、删除和补偿必须显式设计,不能假设天然事务一致。
统一学习框架
学习任何中间件时依次回答:
- 它解决什么问题,哪些问题明确不解决?
- 核心数据模型和顺序边界是什么?
- 一次写入与读取怎样经过系统?
- ACK / commit / durability 到底保证到哪一层?
- 如何复制、分片、选主和故障切换?
- 什么时候会丢失、重复、乱序或读旧?
- 如何限流、背压、重试、恢复和降级?
- 关键容量指标、健康指标和告警是什么?
- 数据是否可重建,备份与灾难恢复如何做?
- 为什么当前业务选择它,而不是更简单的方案?
掌握标准
- 能在白板上放对每个组件的位置。
- 能说清 Redis、Kafka、RabbitMQ 的数据模型差异。
- 能说明 Elasticsearch 与业务数据库为何通常是派生关系。
- 能解释 etcd / ZooKeeper 的 Lease 或 Session 为什么还需要 fencing。
- 能把每个组件的指标连接到具体故障,而不只背指标名。
- 能为个人项目做“先不用某中间件”的合理减法。