Web 架构 / REST / RPC
案例分析高频考点,论文也常用作背景。重点:REST vs SOAP、动静分离、CDN、反向代理
一、Web 经典架构演进
- 单体架构:所有功能打包成一个应用,部署在一台服务器
- 垂直拆分:按业务拆为多个独立应用,互不相干
- 分布式架构:抽离公共服务为 RPC 服务
- SOA:统一服务治理,引入 ESB
- 微服务:更细粒度、独立部署、技术栈自由、去中心化治理
典型 3 层 Web 架构
客户端 (浏览器/App) │ [负载均衡 LB] ← Nginx / SLB / F5 │ [Web/应用服务器集群] ← Tomcat / Node │ [缓存] [消息队列] [数据库主从] [搜索引擎 ES] Redis Kafka MySQL Elastic
二、REST vs SOAP vs RPC ⭐⭐⭐
这是案例最爱的对比题,务必背熟下表:
| 对比项 | REST | SOAP Web Service | RPC |
|---|---|---|---|
| 风格 | 资源 + HTTP 动词 | WSDL + 协议 | 函数调用 |
| 消息格式 | JSON / XML | XML(SOAP 信封) | 二进制 / Protobuf |
| 传输协议 | HTTP / HTTPS | HTTP / SMTP / TCP | TCP(常自定义) |
| 性能 | 较好 | 差(XML 解析重) | 最好 |
| 跨平台 | 极好 | 极好 | 需 SDK |
| 安全 / 事务 | 较弱(靠 HTTPS/Token) | WS-Security / WS-Tx 完善 | 需自定义 |
| 典型应用 | 互联网开放 API | 企业级集成、金融 | 内部服务调用 |
REST 6 大约束(必背)
- 客户端-服务器:关注点分离
- 无状态:每次请求自包含,服务器不存会话
- 可缓存:响应可标记是否可缓存
- 统一接口:资源 URI + HTTP 动词
- 分层系统:中间件透明
- 按需代码(可选):服务端可下发脚本
REST 6 约束口诀:"客无缓 · 统层码"
REST 资源 + 7 个 HTTP 动词
GET查询(幂等、无副作用)
POST新增(非幂等)
PUT全量更新 / 创建(幂等)
PATCH局部更新(幂等)
DELETE删除(幂等)
HEAD只取响应头
OPTIONS查询支持的方法(预检)
三、负载均衡 / 反向代理 / CDN
1. 负载均衡(LB)
- 四层 LB:基于 IP+端口转发(LVS、F5);性能高、不感知协议
- 七层 LB:基于 HTTP/URL/Cookie/Header 转发(Nginx、HAProxy);灵活、可做内容路由
- 常见算法:轮询、加权轮询、最少连接、IP Hash、一致性哈希、随机
考点小知识
会话保持(粘性会话):同一用户路由到同一台服务器,常用 Cookie 注入或 IP Hash 实现。
2. 反向代理
作用隐藏后端、负载均衡、缓存、SSL 终止、安全防护
代表Nginx、HAProxy、Apache、Varnish
3. CDN(内容分发网络)
目的把静态资源缓存到离用户最近的节点 → 降延迟、降回源压力
关键DNS 调度、边缘节点、回源、缓存刷新
质量属性主要提升 性能,顺带 可用性(吸收流量峰值)
4. 动静分离
- 静态资源(HTML/CSS/JS/图片)→ Nginx / CDN 直接返回
- 动态请求(API)→ 转发到后端应用服务器
- 收益:减轻应用压力、提升响应、便于缓存
四、典型 Web 性能优化方案(论文/案例必背)
"前-中-后 + 数据"四层优化(背):
- 前端:压缩(Gzip/Brotli)、合并、懒加载、CDN、浏览器缓存、HTTP/2、图片优化
- 中间层(代理/网关):反向代理缓存、限流、动静分离、连接复用
- 应用层:多级缓存(本地 + Redis)、异步化(MQ)、连接池、池化对象
- 数据层:索引、读写分离、分库分表、SQL 优化、慢查询、NoSQL
口诀:"前压后异 · 中缓数分"
五、HTTP 状态码速记
| 类别 | 含义 | 典型 |
|---|---|---|
| 1xx | 信息 | 100 Continue |
| 2xx | 成功 | 200 OK · 201 Created · 204 No Content |
| 3xx | 重定向 | 301 永久 · 302 临时 · 304 未修改 |
| 4xx | 客户端错误 | 400 · 401 未认证 · 403 无权 · 404 · 429 限流 |
| 5xx | 服务端错误 | 500 · 502 网关 · 503 不可用 · 504 网关超时 |
✅ 答题套路
"为什么选 REST 而不是 SOAP?"
① 互联网应用更看重 跨平台和性能;② REST 轻量、JSON 易读;③ 利用 HTTP 缓存等基础设施;④ 不需要 SOAP 的事务/安全等重量级特性;⑤ 工具链丰富、开发效率高。
📗 高频专题 · Web 架构 完