-
缓存一致性完全指南:从一次"运营改了价格用户还看到旧的"看懂为什么顺手更新缓存会出大问题
2023 年我做一个电商的商品详情页用户访问展示商品的名称价格库存详情页访问量很大我自然想到加缓存在数据库前面挡一层 Redis 第一版方案我做得很顺手读商品时先查 Redis 命中就直接返回没命中就查数据库把结果写进 Redis 再返回写商品时更新数据库再顺手把 Redis 里那条也更新成新值本地一测读得飞快改了价格刷新页面也是新的我心里很笃定缓存就是数据库的一个副本数据库改了顺手把缓存也改一下…- 3
- 0
-
接口幂等性设计完全指南:从一次"用户被扣了两次款"看懂前端置灰按钮为什么挡不住重复请求
2023 年我做一个电商的下单接口用户在前端点提交订单后端创建一笔订单扣一次款这件事我没多想就有了方案接口收到请求插入一条订单记录调支付返回成功第一版我做得很顺手为了防止用户手抖点两下我还特意在前端做了处理点击之后按钮立刻置灰本地点几下订单一笔一笔干净利落我心里很笃定重复提交嘛前端把按钮一灰用户想点第二下也点不了可等真实用户用起来一串问题冒了出来第一种最先把我打懵还是有用户创建了两笔一模一样的订单…- 2
- 0
-
数据库读写分离完全指南:从一次"用户发完评论刷新就不见了"看懂主从复制延迟为什么坑人
2023 年我做一个内容社区的后端上线一段时间后数据库开始扛不住了用户刷信息流看详情翻评论海量的读请求把单台数据库压得喘不过气怎么让数据库扛住这件事我没多想就有了方案读写分离搭一台从库让它复制主库的数据然后把所有读请求打到从库写请求打到主库压力不就分摊了第一版我做得很顺手配好主从复制在代码里写了个路由读走从库写走主库本地和测试环境一跑读写各走各的主库的压力肉眼可见地降了下来我心里很笃定读写分离嘛不…- 2
- 0
-
数据库事务隔离级别完全指南:从一次"开了事务库存还是被超卖"看懂脏读幻读到底怎么挡
2023 年我做一个电商系统的库存扣减功能用户下单系统从商品库存里减掉相应的数量这件事我没多想就有了方案开个事务把查库存判断够不够扣库存这几步包进去第一版我做得很顺手我在代码里 BEGIN 先 SELECT 出当前库存在程序里判断库存够再 UPDATE 把库存减掉最后 COMMIT 本地点几下下单扣库存数字一分不差我心里很笃定并发安全嘛把这几步包进一个事务里数据库自然就帮我管好了可等大促一来并发一…- 2
- 0
-
数据库索引失效完全指南:从一次"明明建了索引查询却还是全表扫描"看懂索引为什么没被用上
2023 年我做一个订单管理后台有个最常用的功能是按各种条件查订单按用户查按时间查按状态查数据量一上来这些查询开始变慢怎么让它快起来这件事我没多想就有了方案加索引第一版我做得很顺手查哪个列慢我就给哪个列建一个索引涉及到的列基本都建上了本地拿测试库一测确实快了不少我心里很笃定加索引嘛不就是哪个列查得慢就给哪个列建索引可等数据量再涨查询条件再变复杂一串问题冒了出来第一种最先把我打懵我明明给下单时间列建…- 2
- 0
-
限流算法完全指南:从一次"限了每分钟一万却涌进两万"看懂固定窗口、滑动窗口、漏桶与令牌桶
2021 年我做一个对外开放的 API 谁都能调所以得防着被刷不能让某个调用方一秒钟打几千个请求把我的服务和数据库拖垮怎么挡住这种过量调用这件事我没多想就有了方案数个数第一版我做得很顺手我做了一个计数器每分钟开头清零每来一个请求就加一一旦这一分钟的计数超过设定的上限后面的请求就全部拒绝本地一测真不错我心里很笃定限流不就是数个数嘛数到上限就拒绝可等这个 API 真正上线面对真实世界里花样百出的调用方…- 2
- 0
-
数据库连接池完全指南:从一次"上线后数据库报 too many connections"看懂连接为什么不能即取即用
2022 年我做一个 Web 服务的数据访问层每个进来的请求都要查一两次数据库怎么拿到一条数据库连接这件事我没多想就有了方案用的时候连用完就关第一版我做得很顺手查询函数的开头 connect 一下拿到连接执行 SQL 函数返回前 close 掉本地开发环境我点了几十次接口每次都查得又快又准我心里很笃定连接这东西用完就关不留后患可等这个服务真正上线扛起生产的并发流量一串问题冒了出来第一种最先把我打懵…- 0
- 0
-
数据库外键约束完全指南:从一次"删了用户,订单却还在指着一个不存在的人"看懂数据完整性
2020 年我做一个电商后台建数据库表 users 表存用户 orders 表存订单订单里有一个 user_id 字段记着这单是谁下的要不要给 user_id 加外键约束这件事我压根没多想第一版我做得很顺手 orders 表的 user_id 就声明成一个普通的 BIGINT 字段不加任何外键我那时候听来的说法很笃定外键拖性能还碍事改表麻烦删数据麻烦数据完整性在应用层保证就行代码里插订单前查一下用…- 2
- 0
-
数据库唯一约束完全指南:从一次"明明查过了、用户却领到两张券"看懂并发插入与去重真相
2021 年我做一个电商活动的领券功能用户在活动页点一下领取系统给他发一张优惠券规则很简单一个用户一个活动只能领一张怎么保证只能领一张这件事我压根没多想我心里很省事地想插之前先查一下他领过没有没领过再插不就保证一人一张了吗第一版我做得很顺手先 SELECT 查这个用户在这个活动里有没有券查出来是 0 就 INSERT 一张查出来大于 0 就告诉他已经领过了就完事了本地开发时真不错我点一下领券成功再…- 2
- 0
-
数据库 N+1 查询完全指南:从一次"列表页慢到几秒、数据库 QPS 莫名暴涨"看懂 ORM 的隐藏查询风暴
2022 年我做一个后台管理系统有个订单列表页把订单查出来每一行显示订单号金额还有下单人的名字用 ORM 取关联数据这件事我压根没多想第一版我做得很省事ORM 用着真方便我要下单人的名字不就是点一下 order.user.name 循环里一行行拼每行点一下把名字取出来就完事了本地开发时真不错我库里就造了几十条订单列表页刷一下就出来几行代码搞定我心里很踏实可等这个系统真正上线订单涨到几万几十万条一串…- 0
- 0
-
正则表达式 ReDoS 完全指南:从一次"一个字符串把 CPU 打满、worker 卡死几十秒"看懂灾难性回溯
2021 年我做一个 Web 表单服务每个提交进来都要校验一堆字段邮箱 URL 手机号写正则这件事我压根没多想第一版我做得很省事写正则不就是描述出我想匹配的字符串长什么样能匹配上就行我对着邮箱的样子写一串 pattern 用 re.match 一套匹配上返回真匹配不上返回假就完事了本地开发时真不错我填几个正常的邮箱正则稳稳地判对几行代码搞定我心里很踏实可等这个服务真正上线面对成千上万个真实用户一串…- 5
- 0
-
数据库连接泄漏完全指南:从一次"服务跑着跑着就 too many connections 卡死"看懂连接池、归还与事务
2022 年我做一个 Web 后端服务每个请求进来都要查几次数据库查用户查订单查配置用数据库这件事我压根没多想第一版我做得很省事用数据库不就是拿一个连接执行 SQL 把结果拿回来需要数据时我连上拿个连接把 SQL 发过去把结果取回来就完事了本地开发时真不错我点几下页面每个请求稳稳查到数据响应又快又准几行代码搞定我心里很踏实可等这个服务真正上线扛起每天几万次请求一串问题冒了出来第一种最先把我打懵服务…- 0
- 0
-
文件上传安全完全指南:从一次"一个大文件把服务器内存撑爆"看懂大小校验、类型验证与路径穿越
2021 年我做一个系统有一个文件上传的功能用户上传头像上传附件上传资料接收文件保存文件这件事我压根没多想第一版我做得很省事文件上传不就是接收前端传来的数据把文件保存到服务器的目录里用户给个文件我 read 读出来按它的文件名 open 写下去就完事了本地开发时真不错我自己挑张几十 KB 的头像传上去文件稳稳躺进了上传目录再访问一下原图分毫不差几行代码搞定我心里很踏实可等这个功能真正上线暴露在公网…- 0
- 0
-
字符编码与乱码完全指南:从一次"数据库里的中文全变成了问号"看懂 UTF-8、字节与编码声明
2020 年我做一个系统要处理大量文本用户的昵称文章的正文上传上来的文件存字符串读字符串这件事我压根没多想第一版我做得很省事字符串嘛就是一串字存进去读出来不就行了读写文件直接 open 存数据库直接塞从来不操心什么编码不编码的本地开发时真不错我自己存个中文昵称写段中文正文读出来打到屏幕上一个字不差几行代码搞定我心里很踏实可等这个系统真正上线还经历了一次从老系统导数据又换了台服务器一串问题冒了出来第…- 0
- 0
-
时间与时区处理完全指南:从一次"服务器一迁移,满库时间全偏了"看懂 UTC 存储与 naive/aware 陷阱
2021 年我做一个系统里面有大量带时间的记录订单的创建时间日志的发生时间用户的预约时间存时间用时间这件事我压根没多想第一版我做得很省事记时间不就是拿一下当前时间存进数据库要展示就读出来格式化成字符串打给用户本地开发时真不错我自己下个单看一眼记录时间打出来分毫不差就是我电脑上那个钟点几行代码搞定我心里很踏实时间嘛不就是存一下读出来打出来可等这个系统真正上线服务真实用户还经历了一次服务器迁移一串问题…- 0
- 0
-
金额计算完全指南:从一次"对账差了一分钱、查了三天"看懂浮点数陷阱与 Decimal 实践
2022 年我做一个带账务的系统要记每一笔钱的进出每天还要对账。存金额算金额这件事我压根没多想。第一版我做得很省事金额不就是个数字用 float 存加加减减不就完了。余额是个 float 每来一笔流水就加一下要展示就直接打出来。本地开发时真不错我自己造几笔流水测加出来的数对账的数看着都对几行代码搞定。我心里很踏实金额嘛不就是个数字。可等这个系统真正上线记了成千上万笔真实流水一串问题冒了出来。第一种…- 2
- 0
-
大模型多供应商容灾完全指南:从一次"供应商一抽风我整个 AI 功能全挂"看懂故障转移、熔断与降级
2024 年我在产品里做一个 AI 功能接了某家头部大模型的 API 让它帮用户做内容生成。接大模型这件事我压根没多想。第一版我做得很省事接大模型不就是拿到一个 API key 找一个 SDK 在需要的地方调一下 chat 把结果拿回来。哪个功能要用就在哪个文件里 import 那个 SDK 调一下。本地开发时真不错我调一下模型秒回结果有模有样几行代码搞定。我心里很踏实接大模型嘛不就是调一个 AP…- 0
- 0
-
灰度发布完全指南:从一次"新版本一上线就砸中全部用户"看懂流量切分、渐进放量与自动回滚
2023 年我维护一个面向真实用户的 Web 服务隔三差五就要发一次版上一次线。把新版本上线这件事我压根没多想。第一版我做得很省事上线不就是把新代码部署到所有服务器把流量全切到新版本写个部署脚本一台台停服务换代码起服务最后把流量一切上线完成。本地开发时真不错我在测试环境点一下新版本部署上去功能正常几分钟搞定干净利落。我心里很踏实上线嘛不就是把新代码铺上去让所有用户用上新版本。可等这套上线方式用在真…- 0
- 0
-
LLM 应用敏感信息防护完全指南:从一次"用户的身份证号被原样发进第三方大模型"看懂 PII 脱敏与数据边界治理
2024 年我做一个 AI 客服应用用户把自己遇到的问题描述发进来我把它丢给第三方的大模型 API 让模型生成回答。把用户的话发给模型这件事我压根没多想。第一版我做得很省事不就是把用户输入的文字拼进一个 prompt 发给大模型 API 再把模型吐回来的回答原样展示给用户。为了排查问题方便我还顺手把每一次完整的 prompt 都打进了日志。本地开发时真不错我自己编几句话测试模型答得有模有样日志里 …- 6
- 0
-
定时任务可靠性完全指南:从一次"任务跑成三份、还挂了一周没人知道"看懂防重叠、多实例单跑与可观测
2023 年我做一个后端服务有一堆需要定时跑的活儿每天凌晨生成报表每小时同步一次外部数据每隔几分钟清理过期数据。定时任务这件事我压根没多想。第一版我做得很省事定时任务不就是写个 cron 表达式到点了调一下那个函数用 APScheduler 之类的库挂一个 scheduled_job 函数体里该干嘛干嘛。本地开发时真不错我把触发间隔调短到一分钟盯着日志到点函数就跑跑完就停准得很。我心里很踏实定时任…- 2
- 0
-
深分页性能优化完全指南:从一次"翻到第 5000 页、查询慢了 100 倍"看懂 OFFSET 陷阱与游标分页
2021 年我做一个后端服务有一大堆列表页要分页订单列表操作日志消息记录。分页这件事我压根没多想。第一版我做得很省事分页不就是 LIMIT 和 OFFSET 前端要第几页我就 OFFSET 页码减一乘每页条数 LIMIT 每页条数跳过前面那些取这一页该取的。本地开发时真不错测试库里就几百条数据我从第一页翻到最后一页每一页都是瞬间出结果顺畅得很。我心里很踏实分页嘛不就是跳过 N 条取 size 条。…- 3
- 0
-
LLM 调用超时治理完全指南:从一次"一个慢请求挂住、整个服务被拖垮"看懂连接、总超时与取消传播
2024 年我做一个 LLM 应用后端要调用大模型 API 完成问答总结这些活。调用大模型这件事我压根没多想。第一版我做得很省事调用大模型不就跟调用一个普通函数一样把 prompt 发出去等它返回结果拿到就用。本地开发时真不错我点一下请求发出去大模型两三秒就把答案吐回来了顺畅得很。我心里很踏实调 LLM 嘛不就是发个请求等它返回。可等这个应用真正上线被一群真实用户并发地用起来一串问题冒了出来。第一…- 0
- 0
-
Docker Compose 多容器编排完全指南:从一次"写了 depends_on、应用还是连不上数据库"看懂启动顺序与服务就绪
2022 年我做一个项目要把后端应用和它依赖的数据库 Redis 一起用 Docker 跑起来。多个容器怎么一起编排我用了 Docker Compose。第一版我做得很省事每个容器写成一个 service 谁依赖谁就给它写个 depends_on 应用依赖数据库就让数据库先起应用后起顺序不就对了。本地开发时真不错我 docker compose up 一敲几个容器哗啦啦全起来了应用也连上了数据库一…- 0
- 0
-
API 版本管理完全指南:从一次"改个字段名、第三方集成方全线崩溃"看懂契约思维与版本演进
2023 年我做一个后端服务对外提供 API。改接口这件事我压根没多想。第一版我做得很省事接口要改直接在原来的函数上改字段不好看就改个名字段没用就删掉反正都是我的代码我想怎么改怎么改。本地开发时真不错接口和调它的前端都是我自己写的我改完接口顺手把前端也改了两边一起更新从来没出过岔子。我心里很踏实接口嘛不就是一段返回 JSON 的代码想改就改。可等这个服务真正上线接口被一群我控制不了的客户端用起来一…- 2
- 0
后端开发
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!
























