Appearance
透明多级分流接入层架构
text
[用户请求]
│
▼
[客户端缓存] ←─ 强制/协商缓存(浏览器)
│
▼
[DNS 解析]
│
├─ 静态资源 → CNAME → [CDN 边缘节点]
│ ↑
│ │ ←【传输链路优化生效】
│ │ • HTTP/2 / HTTP/3 (QUIC)
│ │ • TLS 1.3 + 0-RTT
│ │ • Brotli/gzip 压缩
│ │ • TCP BBR / TFO
│ │
│ └──(命中返回;未命中 → 回源)
│
└─ 动态请求 → A 记录 → [L4 负载均衡器](透传 TCP,不终止连接)
│
▼
[API 网关](南北向流量治理 + L7 路由)
↑
│ ←【传输链路优化生效】
│ • 客户端 ↔ 网关之间:
│ - HTTP/2 多路复用
│ - TLS 1.3 快速握手
│ - gzip/Brotli 压缩
│
│
▼
[后端微服务集群]
1. 客户端缓存
- 强制缓存:通过
Cache-Control: max-age或Expires,浏览器直接使用本地副本,不发请求。 - 协商缓存:通过
ETag/Last-Modified+If-None-Match,服务器返回304 Not Modified表示可复用。
2. 动静分离与 CDN 加速
- 静态资源走 CDN:
- DNS 是域名解析系统;
- CNAME 是 DNS 中的一种“别名记录”,用于将流量引导至 CDN 厂商(如
www.example.com CNAME → example.cdnprovider.com); - CDN 节点缓存静态资源(JS/CSS/图片),就近分发。
- CDN 回源策略:
- 被动回源:边缘节点未命中缓存时,自动回源站拉取(默认行为);
- 主动预热:提前将资源推送到 CDN 节点(适用于大促、新版本发布)。
- DCDN(全站加速):
- 同时加速静态 + 动态内容;
- 动态请求通过 CDN 骨干网优化回源路径,降低延迟。
3. 传输链路优化
连接数优化:
- HTTP Keep-Alive:复用 TCP 连接,避免频繁三次握手开销,串行传输;
- HTTP/2 多路复用:单个 TCP 连接上并行传输多个请求/响应,彻底解决 HTTP/1.1 队头阻塞问题。
传输压缩与带宽节省:
- 启用 gzip / Brotli 即时压缩,对 HTML、CSS、JS、JSON 等文本资源动态压缩,减少 60%~80% 传输体积;
- CDN 或网关根据客户端
Accept-Encoding头自动选择最优压缩算法; - 对已压缩格式(如 JPG、PNG、MP4)跳过重复压缩,避免 CPU 浪费。
快速建连与弱网加速:
- HTTP/3(基于 QUIC):在 UDP 上实现可靠传输,支持 0-RTT 快速建连,显著改善移动网络、高丢包环境下的首屏加载速度;
- 结合 TCP Fast Open(TFO) 与 BBR 拥塞控制算法,进一步降低延迟、提升吞吐。
4. API 网关(南北向流量治理)
- 限流:基于 QPS/并发数控制入口流量;
- 熔断 & 降级:当后端服务异常时,快速失败或返回兜底数据;
- 安全控制:
- 黑白名单(IP/API 级);
- 认证鉴权(JWT/OAuth2);
- WAF 防护(防 SQL 注入、XSS 等)。
5. 负载均衡(Load Balancing)
5.1 四层负载均衡(L4,基于 IP + Port)
- 常用组件:LVS、HAProxy(L4 模式)、云厂商 NLB。
- 高可用保障:Keepalived + VRRP 协议,通过 VIP 漂移 + Gratuitous ARP 实现主备切换。
DR 模式(Direct Routing)
- 原理:LVS 修改目标 MAC 地址,转发给真实服务器(RS);二层工作
- 特点:
- 三角传输(请求经 LVS,响应直连客户端);
- 性能最高,无 NAT 开销;
- 要求 LVS 与 RS 在同一 VLAN(二层可达);
- RS 需绑定 VIP 并抑制 ARP。
- 适用场景:同机房高性能集群;常配合 DNS 调度实现“自建多活”。
TUN 模式(IP Tunneling)
- 原理:LVS 将原始 IP 包封装进新 IP 包(IP-in-IP),通过隧道发给跨网段 RS;三层工作
- 特点:
- 支持跨机房、跨云部署;
- RS 需支持 IP 隧道协议(如
ipip模块)并绑定 VIP; - 单物理机运行多服务时配置冲突,运维复杂。
NAT 模式(Network Address Translation)
- 原理:LVS 修改目标 IP 为 RS 的真实 IP,RS 回包必须经 LVS(网关模式);三层工作
- 特点:
- 配置简单,RS 无需特殊设置;
- LVS 成为流量瓶颈(请求+响应都经过);
- 适合小规模或测试环境。
5.2 七层负载均衡(L7,基于 HTTP 内容)
- 常用组件:Nginx、HAProxy(HTTP 模式)、Envoy、云厂商 ALB。
- 原理:
- 终止 TCP 连接,解析 HTTP 头部(Host、Path、Cookie 等);
- 根据规则路由到不同后端服务(如
/api/v1 → service-A); - 支持重写、重定向、Header 注入等高级功能。
- 特点:
- 灵活性高,但性能低于 L4(需解析应用层数据);
- 可与 L4 配合:L4 做一级均衡,L7 做细粒度路由。
弹性自愈型微服务应用层架构
- 服务端缓存:
- 缓存属性
- 吞吐量
- Caffeine环形缓存,WAL机制把数据日志异步化,大大提升性能
- 命中率
- 淘汰算法:LRU,LFU,TinyLFU,W-TinyLFU
- 拓展功能
- 并发级别控制,失效策略,容量控制,事件通知,统计信息
- 分布式支持
- 复制式缓存
- 集中式缓存
- 吞吐量
- 缓存风险
- 缓存击穿:某key失效,大量流量打入数据库
- 加锁同步
- 热点数据定制化管理,发者通过代码来有计划地完成更新、失效,避免由缓存的策略自动管理。
- 缓存穿透:查询系统不存在的数据
- 业务允许的穿透,对null也做缓存,在过期时间内,只允许一次穿透,穿透也要加锁
- 恶意穿透,采用布隆过滤器
- 缓存雪崩:大批缓存一起过期,或者一批数据同时穿透带来的数据库压力
- 多级缓存
- 随机过期时间
- 主从多节点
- 缓存污染
- Cache Aside:延时双删,先更新数据库再删除缓存,删除失败发送mq保证一致性
- Read/Write Through:缓存作为“唯一入口”,数据库对应用透明。写要求比较高,数据库完成了才返回成功
- Write Behind Caching:写操作只更新缓存,由缓存异步批量写入数据库。
- 缓存击穿:某key失效,大量流量打入数据库
- 缓存属性
- 微服务拆分与治理:
- 核心业务拆分成独立微服务,降低耦合;
- 服务注册发现(Nacos/Consul)、配置中心;
- 东西向流量治理:熔断(Hystrix/Sentinel)、降级、限流。
- 无状态设计:
- 会话外置(Redis 存 Session);
- 支持快速水平扩缩容(K8s HPA/KEDA)。
- 异步化与削峰:
- MQ(Kafka/RocketMQ)解耦核心链路;
- 最终一致性保障(事务消息、本地消息表)。
- 可观测性体系:
- Metrics + Tracing + Logging 三位一体;
- 健康检查 + 自动重启(K8s Probes)。
- 弹性伸缩策略:
- 基于指标的 HPA;
- 事件驱动的 KEDA;
- (可选)预测性扩容。
- 容灾与自愈能力:
- 多 AZ/Region 部署;
- 混沌工程常态化演练。
- 安全基线:
- mTLS 加密、数据脱敏、操作审计。
持久层架构
- 拆分存储 分库分表,分区,nosql,newsql,冷热分离
- 读写分离,消化流量 newsql,读写分离