正则表达式进阶:蓝绿部署 匹配技巧
正则表达式进阶:蓝绿部署 匹配技巧 项目最近要从单环境切到蓝绿部署,本来以为改改 upstream 就完事了,结果在网关匹配上折腾了一下午。蓝绿部署听着简单,不就是两套环境切来切去吗?真到 Nginx / Ingress 里写正则,手一抖,流量就跑到还没验证的那套。下面是我这边实测能用的匹配方式,主要拿 Nginx 和 Ingress-nginx 举例,别的网关思路差不多。 先说场景:蓝绿不是两个...
阅读更多正则表达式进阶:蓝绿部署 匹配技巧 项目最近要从单环境切到蓝绿部署,本来以为改改 upstream 就完事了,结果在网关匹配上折腾了一下午。蓝绿部署听着简单,不就是两套环境切来切去吗?真到 Nginx / Ingress 里写正则,手一抖,流量就跑到还没验证的那套。下面是我这边实测能用的匹配方式,主要拿 Nginx 和 Ingress-nginx 举例,别的网关思路差不多。 先说场景:蓝绿不是两个...
阅读更多PostgreSQL 索引与 分布式锁 的正确姿势 事情是这样的 最近一个订单同步脚本,三台机器跑同一个 cron。我一开始的想法很朴素:数据库里加张 lock 表,lockkey 建唯一索引,谁 insert 成功谁执行。 然后线上翻车了。 任务确实只 insert 成功一次,但后面的 HTTP 拉数据是在事务提交以后跑的,另一台机器进来一看 key 已经存在,也觉得自己拿到了锁。我当时就有点绷...
阅读更多Rust 所有权模型与 热更新 的思考 一开始我以为只是换个 .so 我最近在一个 Rust 小工具里试着做插件热更新。 一开始我的想法很朴素:插件编译成 cdylib,宿主启动时 libloading 打开,之后我只要把新的 .so 或 .dll 文件放进目录,然后重新加载一下,新的 update 函数就顶替旧的。 结果这玩意儿是真的难搞啊,得把一堆所有权问题想清楚。 我先做了一个最小示例。插件...
阅读更多从零实现一个简易的幂等设计 前几天线上遇到一个很烦的事,支付回调收到两次,订单竟然被创建了两遍。我翻了半天日志,发现上游重试时带了同一个 tradeno,但我们的接口压根没判断,直接 insert。那会儿我就想,幂等这玩意儿到底要多“简易”才算真的能用? 下面是我后来在业务接口里加的一版做法,主要靠三个东西:唯一业务号、Redis 临时占位、MySQL 唯一索引。不算多高深,但确实能挡住大部分重复...
阅读更多用 Docker 搭建连接池的完整流程 上周线上 PostgreSQL 连接数突然飙到 198(默认 maxconnections 是 200),三个微服务同时重启,新连接全拿不到,日志里清一色的 FATAL: too many connections for role。排查了一圈,发现有个定时任务每次跑完没释放连接,但短期先止血肯定不能等代码修,得把连接池架起来。 本来想直接在宿主机装 PgBo...
阅读更多微服务架构下 连接池 的设计与权衡 一开始我以为只是把 10 改成 200 上周订单服务突然开始报错,凌晨监控群里刷了一排红色,我看了一眼日志,大概就是这个味道: 第一反应很朴素:连接池太小了。 于是直接把 maximumPoolSize 从 10 拉到 200,重启,发布,感觉稳了。结果第二天高峰期又炸了,不过这次不是应用炸,是数据库先顶不住了。 后来去看 MySQL: 连接数蹭蹭往上涨,其他服...
阅读更多文件上传 的十种打开方式:工程实践笔记 先说坑:上传真不是 “form 里加个 file 就完了” 最近又碰到一次线上上传 500,用户报“传不上去”。结果一看日志,浏览器明明选了 80MB 视频,后端 Multer 直接抛 LIMITFILESIZE,Nginx 又先回了个 413,前端只拿到 Internal Server Error,排查得我一晚上没睡踏实。后来才意识到,文件上传这个功能特别...
阅读更多一次线上 消息队列 故障的复盘记录 一开始我以为是消费端挂了 上周四下午三点半左右,订单服务那边开始报“状态不更新”,客服群里也有人问为什么下单成功之后页面一直转圈。监控先是消费延迟上涨,接着 RabbitMQ 管理台里几个核心队列深度开始往上窜。 第一反应还是那个最常见的误判:消费者是不是挂了?或者线程池被占满了?于是先看应用日志,没看到明显异常,只有一些慢查询提示。再去看消费者线程,也都还在,...
阅读更多WebSocket 实时通信与 缓存一致性 应用 起因:订单状态改了,页面没跟上 我这边有个小后台,订单状态变了之后,希望用户页面能立刻从“待支付”变成“已支付”。最开始的做法很直接:数据库更新完,清一下 Redis,再通过 WebSocket 给所有相关客户端推一条 refresh。结果测了一轮,发现这玩意儿是真的难搞,有时候状态明明推了,页面还是旧的。看了几眼代码,主要有三个坑: 1. 客户端...
阅读更多Nginx 反向代理 缓存一致性 配置详解 之前把 Nginx 配成反向代理加上 proxycache 之后,一开始觉得真香,后端扛不住了就靠缓存顶着,访问速度嗖嗖的。结果有天改了个商品详情页的文案,刷新了八百遍还是旧内容,后来才反应过来是 Nginx 那层缓存在作怪,缓存 TTL 是 300 秒,我他妈等了五分钟它还是纹丝不动,因为那五分钟还没过... 这个问题说大不大,说小不小,主要是 Ngi...
阅读更多