后端 & 运维核心概念 — 架构师必备认知

9 阅读8分钟

做系统设计和架构决策时,即使和 AI 协作,这些"大件"的概念、适用场景、trade-off 必须自己掌握。

目录


一、计算层

解决"代码跑在哪里、怎么跑"的问题。

大件是什么什么时候用你项目里的体现
Web Server接收 HTTP 请求,返回响应(Nginx、Tomcat、Nitro)所有 Web 服务Nuxt Nitro(BFF)、Spring Boot 内嵌 Tomcat(Java)
进程管理管理应用进程的生命周期(PM2、systemd)需要多进程、自动重启PM2 Cluster × 4 个 Node.js 进程
任务调度定时或触发式执行任务(Cron、Celery、XXL-Job)定时清理、定时报表暂无,但 consumer 的消息消费本质上是事件驱动的任务调度
Serverless / FaaS按请求付费,不管服务器(AWS Lambda、云函数)低频调用、事件驱动暂无

核心概念:

  • 同步 vs 异步:请求-响应是同步,消息驱动是异步
  • 阻塞 vs 非阻塞:Node.js 事件循环是非阻塞,Java Servlet 是阻塞(每个请求一个线程)
  • 水平扩展 vs 垂直扩展:加机器 vs 加配置

二、存储层

解决"数据存在哪里、怎么存"的问题。这是架构设计中最重要的决策之一。

大件是什么什么时候用典型产品
关系型数据库 (RDBMS)结构化数据,支持事务和 JOIN业务数据、强一致性场景MySQL、PostgreSQL
OLAP 数据库列式存储,擅长聚合分析大数据量分析查询Doris、ClickHouse、Presto
NoSQL非关系型,灵活 schema高并发读写、文档/KV 存储MongoDB、DynamoDB、HBase
对象存储存文件(图片、视频、ZIP)大文件、静态资源S3、FDS、OSS、MinIO
分布式文件系统POSIX 接口,像本地目录一样用需要文件系统语义的大数据场景JuiceFS、HDFS、CephFS
搜索引擎全文检索、倒排索引搜索、日志分析Elasticsearch、OpenSearch

你项目里的选择:

  • Doris:分析数据(列式存储,聚合查询快)
  • FDS/S3:原始 ZIP 文件和结果文件
  • Redis:缓存 + 分布式锁(见缓存层)
  • 本地文件系统(PVC):trace-fs 挂载,consumer 解压临时文件

核心概念:

  • OLTP vs OLAP:事务处理 vs 分析查询,选错数据库性能差 100 倍
  • CAP 定理:一致性、可用性、分区容错性,三选二
  • 读写分离:读多写少时主库写、从库读
  • 分库分表 / 分区:数据量大了怎么拆

三、通信层

解决"服务之间怎么对话"的问题。

大件是什么什么时候用典型产品
HTTP/REST请求-响应,同步通信前后端通信、服务间简单调用所有 Web API
RPC远程过程调用,像调本地函数一样调远程服务服务间高频同步调用gRPC、Dubbo、Thrift
消息队列 (MQ)异步通信,生产者发消息,消费者取消息异步解耦、削峰填谷、可靠投递Kafka、RabbitMQ、Talos、RocketMQ
WebSocket全双工长连接实时推送(聊天、通知、行情)浏览器实时通信
SSE服务端单向推送服务端向浏览器推事件流ChatGPT 流式输出

MQ 的三大作用:

  1. 异步解耦:生产者不等消费者处理完
  2. 削峰填谷:突发流量先存 MQ,消费者按自己节奏处理
  3. 可靠投递:消费者挂了消息不丢,重启后继续消费

MQ 核心概念:

  • at-most-once / at-least-once / exactly-once:消息投递语义
  • Consumer Group:多个消费者共同消费一个 topic,实现水平扩展
  • Offset / ACK:消费进度管理
  • 死信队列 (DLQ):消费失败多次后的兜底
  • 拉模式 vs 推模式:Kafka 拉(consumer 控制节奏),RabbitMQ 推(broker 主动投递)

你项目里的体现:

  • HTTP:前端 → Java 后端 API
  • MQ(Talos):Java 后端 → Python consumer(异步解耦上传和解析)
  • 自定义 TCP:Python → pmc server(socket 通信)

四、缓存层

解决"怎么让热数据访问更快"的问题。

大件是什么什么时候用典型产品
内存缓存KV 存储,微秒级读写热数据缓存、会话存储Redis、Memcached
本地缓存进程内缓存极高频读取、不需要跨进程共享Guava Cache、Caffeine、Map
CDN边缘节点缓存静态资源静态文件加速(JS/CSS/图片)CloudFront、Akamai
浏览器缓存客户端缓存减少重复请求HTTP Cache-Control、IndexedDB

Redis 的常见用法:

  • 缓存:查询结果缓存,减少数据库压力
  • 分布式锁:SET NX + TTL,防止多进程重复计算
  • Pub/Sub:进程间通知
  • 计数器/限流:接口限流、访问计数
  • 会话存储:用户登录状态

核心概念:

  • 缓存穿透:查不存在的数据,每次都打到数据库 → 布隆过滤器
  • 缓存击穿:热 key 过期瞬间大量请求打到数据库 → 互斥锁
  • 缓存雪崩:大量 key 同时过期 → 过期时间加随机值
  • 缓存一致性:数据库更新了缓存没更新 → Cache Aside 模式

你项目里的体现:

  • Redis 分布式锁:PM2 多进程防重复计算
  • Redis Pub/Sub:进程间通知解析完成
  • IndexedDB:前端大数据量缓存(火焰图几十 MB 数据)

五、网关与流量层

解决"流量怎么进来、怎么分发"的问题。

大件是什么什么时候用典型产品
反向代理接收外部请求,转发到内部服务所有 Web 服务的入口Nginx、HAProxy
API 网关统一入口,认证/限流/路由微服务架构Kong、APISIX、Spring Cloud Gateway
负载均衡把请求分发到多个后端实例多实例部署Nginx、K8s Service、ALB
IngressK8s 的外部流量入口K8s 环境Nginx Ingress、Traefik

核心概念:

  • 正向代理 vs 反向代理:正向代理代表客户端,反向代理代表服务端
  • 负载均衡策略:轮询、加权、最少连接、一致性哈希
  • 限流:令牌桶、滑动窗口
  • 熔断:下游挂了快速失败,不拖垮上游

你项目里的体现:

  • Nginx:前端静态资源 + API 反向代理
  • K8s Ingress:test.loadterminator.mioffice.cn → Service → Pod
  • Nuxt devProxy:开发环境代理 /dfp-api/* 到 Java 后端

六、可观测性

解决"系统出问题了怎么发现、怎么排查"的问题。

大件是什么什么时候用
日志 (Logging)记录事件和错误所有服务,排查问题的第一手资料
指标 (Metrics)数值型监控数据(QPS、延迟、错误率)告警、容量规划、性能分析
链路追踪 (Tracing)一个请求经过的所有服务节点微服务架构下定位慢请求
告警 (Alerting)指标异常时通知线上故障及时发现

核心概念:

  • 三大支柱:Logging + Metrics + Tracing = 可观测性
  • 结构化日志:JSON 格式,方便搜索和聚合
  • Trace ID:一个请求的唯一标识,贯穿所有服务
  • SLI/SLO/SLA:服务质量指标/目标/协议

七、容器与编排

解决"怎么打包、部署、扩缩容"的问题。

大件是什么什么时候用
Docker容器化,把应用和环境打包在一起所有现代部署
K8s容器编排,管理容器的生命周期多实例、自动扩缩容、滚动更新
CI/CD自动化构建、测试、部署所有项目
镜像仓库存储 Docker 镜像镜像分发

K8s 核心概念:

  • Pod:最小部署单元,一个或多个容器
  • Deployment:管理 Pod 的副本数和更新策略
  • Service:Pod 的稳定访问入口(负载均衡)
  • PVC:持久化存储卷
  • ConfigMap / Secret:配置和密钥管理
  • HPA:根据 CPU/内存自动扩缩容

你项目里的体现:

  • Docker:多阶段构建(base 镜像 + 应用镜像)
  • K8s:Deployment + Service + Ingress + PVC
  • CI/CD:GitLab CI + Kaniko(无 Docker daemon 构建)
  • PVC:/home/work/trace-fs 持久化挂载

八、安全

解决"怎么防止被攻击、数据泄露"的问题。

大件是什么什么时候用
认证 (AuthN)你是谁(登录)所有需要身份识别的系统
授权 (AuthZ)你能做什么(权限)需要角色/权限控制的系统
HTTPS/TLS传输加密所有生产环境
CORS跨域资源共享前端直传对象存储、跨域 API
预签名 URL临时授权访问前端直传文件到对象存储

核心概念:

  • SSO:单点登录,一次登录多个系统
  • JWT / Token:无状态认证
  • OAuth 2.0:第三方授权
  • RBAC:基于角色的访问控制
  • SQL 注入 / XSS / CSRF:常见攻击手段和防护
  • 路径穿越:文件访问接口的安全防护

你项目里的体现:

  • Aegis SSO:公司统一认证
  • RSA-SHA256 签名验证:BFF 层验证用户身份
  • Presigned URL:前端直传 FDS,后端只做签名不承受流量
  • 路径穿越防护:path.contains("..") 检查
  • 参数化查询:防 SQL 注入

九、你的项目中用了哪些

一张图看全貌:

┌─ 流量层 ─────────────────────────────────┐
│  Nginx (反向代理) → K8s Ingress           │
├─ 计算层 ─────────────────────────────────┤
│  Nuxt BFF (PM2 × 4)                      │
│  Java Spring Boot (Tomcat)                │
│  Python Consumer                          │
│  C++ pmc server                           │
├─ 通信层 ─────────────────────────────────┤
│  HTTP/REST (前后端通信)                    │
│  Talos MQ (异步解耦)                      │
│  自定义 TCP (pmc socket)                  │
├─ 缓存层 ─────────────────────────────────┤
│  Redis (分布式锁 + Pub/Sub)               │
│  IndexedDB (前端大数据缓存)               │
├─ 存储层 ─────────────────────────────────┤
│  Doris (OLAP 分析数据)                    │
│  FDS/S3 (对象存储)                        │
│  PVC (本地持久化)                         │
├─ 安全层 ─────────────────────────────────┤
│  Aegis SSO + RSA 签名验证                 │
│  Presigned URL + CORS                     │
├─ 部署层 ─────────────────────────────────┤
│  Docker + K8s + GitLab CI + Kaniko        │
└──────────────────────────────────────────┘

讲清楚每层为什么选这个、trade-off 是什么,就是架构师的水平。