用户下载一个 2GB 的文件,Django 视图被占住四十分钟,几个并发就把整站拖垮。后来换成 nginx 的 X-Accel-Redirect,同样的请求内存从 800MB 降到 20MB。这篇把完整配置、鉴权怎么保住、断点续传和限速怎么写,以及我踩的坑都记下来。
阅读全文
技术博客
分享开发技巧、工具使用教程与行业动态
筛选「架构」共 22 篇文章
查看全部
一条 migration 在生产跑了 8 分钟,期间整表被锁,全站写入阻塞,用户看到一片 502。事后我才搞明白:加字段、加索引、加非空约束这三件事的锁行为完全不同。这篇写 PostgreSQL 的锁对照表、加索引必须 CONCURRENTLY 的原因、NOT VALID 约束的技巧,以及我们现在的迁移检查清单。
阅读全文
接口被刷,一天几十万次请求,解析额度烧光。我第一版按 IP 限 60 次/分钟,结果把一个公司 NAT 后面的两百个用户全挡在门外。这篇写清楚限流的三个维度(速率、并发、配额)、四种算法、Django 和 nginx 两层的落地代码,以及最重要的——怎么不误伤正常用户。
阅读全文
客户要低延迟互动直播,我们选了 WebRTC。踩的坑都不在"调用 API"层面:NAT 穿透失败、多人要用 SFU 而不是 mesh、录制难做、以及"为什么延迟还是 3 秒"。这篇写完整的工程方案:拓扑怎么选、TURN 怎么部署、录制怎么做、延迟怎么优化。
阅读全文
为了提速加了 Redis 缓存,结果踩了三个坑:一个 key 永远不命中(穿透)、一个热点 key 过期瞬间把数据库打垮(击穿)、一批 key 同时过期导致雪崩,还有一个"数据更新了页面还是旧的"(一致性)。这篇写清楚这四个问题的成因、解法,以及我们在 Django 里的落地代码。
阅读全文
后台的任务列表页越点越慢,最后要 8 秒才出得来。我跟着 PostgreSQL 的慢查询日志一路查下去,发现是索引缺失、N+1、大偏移分页和批量写入四个问题叠在一起。这篇把排查工具、EXPLAIN 怎么读、以及每一处改动的效果都写下来。
阅读全文
worker 数我是照着"CPU × 2 + 1"抄的,结果高峰期 502 不断,改配置重启又必然中断几秒。压测了一轮之后我才搞清楚:worker 数、worker 类型、超时和优雅重启是四件不同的事。这篇写完整的调优过程、实测数据和我们现在的零停机发布流程。
阅读全文
用户点了解析,页面转圈三十秒然后 504。我把任务从请求里挪到 Celery 之后,问题才刚开始:进度不更新、任务被执行两次、Redis 内存涨到 8G、beat 定时任务重复触发。这篇把这些坑和最终的方案完整写下来。
阅读全文
第一次打的镜像 1.8GB,推到服务器要十分钟,灰度一次等得人心焦。我用 dive 一层层拆开看,发现里面躺着编译工具链、pip 缓存、测试数据和一堆用不到的东西。这篇写完整的瘦身过程:基础镜像怎么选、多阶段构建怎么写、层缓存怎么排顺序,以及最终从 1.8GB 到 210MB 的每一步实测。
阅读全文
# Python 并发下载器设计与实战:从同步到 asyncio + 线程池的吞吐优化
做视频工具最怕的不是"下不下来",而是"下一个要等半天、下一堆直接把机器拖垮"。本文用一个可取消的并发下载器为例,讲清楚同步 → 线程池 → 协程的演进,以及限速、重试、断点续传和背压这些生产级细节。
## ...
阅读全文