系统设计实战第 3 卷
系统设计实战

系统设计 - 图片 CDN

图片
CDN

从一张拖慢页面的图片出发,构建覆盖上传存储、格式优化、内容审核、CDN 加速、冷热分层和成本治理的图片系统

系统演进路线

从本地图片上传到 CDN 治理平台

第 1 版

本地上传展示

用户上传第一张头像,文件直接放在业务服务器。

上传接口本地目录图片 URL

能展示图片,但容量、备份和多机部署很快出问题。

第 2 版

对象存储与处理

图片数量增长后,需要原图、缩略图和元数据分开管理。

对象存储元数据表异步压缩格式转换

存储和处理解耦,图片开始拥有生命周期。

第 3 版

CDN 与审核

热门图片拖慢页面,用户上传内容也带来合规风险。

CDN缓存键内容审核签名 URL

分发性能和内容安全成为图片系统的主链路能力。

生产版

图片治理平台

长期存储和带宽账单上涨,需要成本和冷热数据治理。

冷热分层生命周期成本报表缓存刷新审计

生产级图片系统要同时优化体验、安全和基础设施成本。

最简实现:Flask + 本地磁盘,无 CDN,无压缩
用户层
用户浏览器直接访问服务器
应用层
Flask 服务器1 核 2G,5Mbps 带宽
存储层
本地磁盘100GB,无冗余
客户端直传 OSS + 缩略图生成 + WebP 转换
用户层
用户浏览器直传 OSS
应用层
上传服务签发 STS 凭证
处理服务缩略图 + WebP
存储层
阿里云 OSS原图 + 缩略图
PostgreSQL元数据
CDN 全球加速 + 内容审核 + 异步处理队列
用户层
用户浏览器就近访问 CDN
CDN 层
阿里云 CDN2800+ 节点,边缘裁剪
应用层
上传服务×3签发凭证 + 回调
审核服务×2鉴黄 + OCR
处理服务×4多尺寸 + WebP/AVIF
数据层
阿里云 OSS标准 + 低频 + 归档
RabbitMQ异步处理队列
PostgreSQL元数据 + 用户
生产级图片系统:12,000 用户,85,000 张图片,月成本 ¥1,720
用户层
用户浏览器<picture> + 懒加载
CDN 层
阿里云 CDN缓存命中率 96%,边缘裁剪
服务层
上传服务×3STS 凭证 + 频率限制
审核服务×2鉴黄 + OCR + 人审
处理服务×4多尺寸 + EXIF
数据层
阿里云 OSS标准 + 低频 + 归档
RabbitMQupload→audit→process
辅助系统
PrometheusCDN 命中率 / 延迟
Grafana监控面板 + 告警

课程简介

图片系统经常被低估。一张未压缩的大图可能拖慢首页,用户上传的违规图片可能带来合规风险,热门图片可能把源站带宽打满,长期积累的冷图片又会不断增加存储成本。

这门课从一个图片加载性能事故出发,系统化设计一套图片上传、存储、处理、审核、分发和成本治理平台。

学习路线

  1. 图片 CDN 概述:理解图片系统为什么会影响性能、成本和安全。
  2. 图片基础:掌握格式、尺寸、元数据和压缩参数对系统设计的影响。
  3. 上传存储:从本地磁盘演进到对象存储和客户端直传。
  4. 压缩优化:通过无损、有损和格式转换降低带宽与加载时间。
  5. 内容审核:设计机审、人审、敏感内容识别和审核状态流。
  6. CDN 加速:使用边缘缓存、图片 CDN 和边缘处理提升访问体验。
  7. 成本优化:通过冷热分层、生命周期和成本分析控制长期支出。
  8. 完整系统:总结最终架构、关键决策和上线检查清单。

读完后,你应该能解释图片系统为什么不是简单文件上传,而是一个同时影响用户体验、平台安全和基础设施成本的系统设计问题。

第一章 / CHAPTER 01

图片 CDN 概述

开始阅读