用 Docker 搭建限流的完整流程
用 Docker 搭建限流的完整流程 最近被限流坑了一下 最近有个小接口想加限流,一开始以为就是“同一时间别让人随便刷”这种五分钟需求,真动手才发现,限流这东西特别容易从一个 demo 变成一堆配置:Redis 要不要持久化、容器网络怎么打通、用户身份怎么取、超时怎么处理、网关和应用到底谁负责。 后来发现用 Docker 其实更省事,需要借助 docker,不然你就慢慢配置环境吧。下面这套是我实测...
阅读更多用 Docker 搭建限流的完整流程 最近被限流坑了一下 最近有个小接口想加限流,一开始以为就是“同一时间别让人随便刷”这种五分钟需求,真动手才发现,限流这东西特别容易从一个 demo 变成一堆配置:Redis 要不要持久化、容器网络怎么打通、用户身份怎么取、超时怎么处理、网关和应用到底谁负责。 后来发现用 Docker 其实更省事,需要借助 docker,不然你就慢慢配置环境吧。下面这套是我实测...
阅读更多WebSocket 实时通信与 消息队列 应用 前几天给一个小项目加实时通知,最开始想得很简单,前端连 WebSocket,后端有消息直接 websocket.sendjson(...) 就完事。结果本地跑得好好的,一放到两台实例上就露馅了:用户连在 A 实例,消息从 B 实例生成,A 根本不知道有消息来了。然后我去翻了一下官方文档,发现很多示例都默认你是单进程,针对多实例 WebSocket 广...
阅读更多任务调度 的十种打开方式:工程实践笔记 1. crontab:最土,也最容易背锅 之前一个清理过期临时文件的小需求,我第一反应就是 cron,因为太简单了。结果上线后发现它压根没跑,查了半天,脚本里用了相对路径,cron 默认环境变量也不全。后来老老实实写成这样: 这种写法不算优雅,但很能活。cd /srv/app 是为了让脚本里的相对路径别再发疯,>> ... 2>&1 是为了下次出问题还能从日...
阅读更多数据脱敏 的十种打开方式:工程实践笔记 最近给一个数据导出工具改需求,原本只是把 MySQL 导 CSV 给运营看,后来安全来了一句“手机号身份证不能明文”,测试又说“日志里别打出 token”,产品再说“字段长度、格式不能变,不然我 Excel 一列全废”。结果改到最后,我发现数据脱敏根本不是写个 replace("") 就能交差。 下面是十种我在工程里实际碰到或者用过的打开方式。有些做法很糙,...
阅读更多微服务架构下 任务调度 的设计与权衡 上周把订单服务里的几个定时任务从单体拆出来,什么超时关闭、账单生成、状态同步,全挪到微服务里。一开始我以为就是把 @Scheduled 复制过去,再给每个任务加个分布式锁就完事了。结果测试环境没复现,生产一上来就两个实例,账单任务被重复执行了三次,下游对账直接炸了。 下面是我后来实测比较稳的设计,不一定适合所有人,但如果你是那种小团队、微服务刚拆完、又不想为了...
阅读更多Redis 缓存穿透、雪崩与 热更新 最近线上一个商品详情接口又被值班电话吵醒,结果看了一眼监控,Redis 命中率掉到 60%。一开始以为是缓存雪崩,后来发现请求里混着一堆 goodsid=-1、goodsid=88888888 这种数据库里根本不存在的东西。Redis 没命中,应用老老实实去查 MySQL,查完还写不进去,因为压根没这行数据。然后 QPS 一高,DB 连接池先顶不住了。这类问题...
阅读更多Git 工作流中的 蓝绿部署 最佳实践 我一开始也以为,蓝绿部署是不是就在 Git 里搞两个分支,一个叫 blue,一个叫 green,然后切分支上线。结果真上手之后发现,这样特别容易把自己玩死。尤其是团队里有人随手合并、有人忘了打 tag、有人拿开发环境分支去发生产,那场面基本就是事故现场。 下面是我后来比较推荐的一种做法:Git 负责版本和构建入口,蓝绿负责运行期切换,二者别搅在一起。 先说清...
阅读更多微服务架构下 服务发现 的设计与权衡 之前给一个老项目做单体拆微服务,一开始真没把“服务发现”当回事。不就是服务启动以后去注册中心登记一下,调用方查一下地址,然后发 HTTP / RPC 吗?结果线上第一次灰度就给了我一巴掌:某个服务刚启动,JVM 还没预热,依赖的缓存连接池也没建立,注册中心那边已经显示实例健康了,网关啪就把流量打过去,成功率一度难看得要命。 后来慢慢才明白,服务发现这件事,难点...
阅读更多从零实现一个简易的限流 先吐槽一下为什么又要自己写 前几天线上服务被一个不知道哪里来的脚本疯狂刷接口,一开始想着简单点,直接 Nginx 上 limitreq 就完事了。结果配置一贴上去,发现它对单 IP 突发流量的控制还是有点粗暴,而且我们业务里真正想限的其实是 userid,不是 IP。IP 这东西吧,前面套了 CDN、代理、网关之后,很容易一锅端,误伤自己人。 那就只能自己搞个简易的限流了。...
阅读更多机器学习入门:蓝绿部署 数据预处理 最近想把一个 notebook 里的小分类模型搬到线上,结果本地验证集 AUC 都挺正常,服务一跑起来,准确率直接掉到个位数。第一眼还以为是模型文件有问题,后来抓了几条线上请求,发现是数据预处理这玩意儿根本没法和训练时保持一致。再后来服务越来越多,改一版预处理就得停一次服务,所以顺手把蓝绿部署也加上了。下面是我踩完坑之后比较顺的一套做法,可能不算标准答案,但至少...
阅读更多