小Cの已经记不起来的博客

↓ 向下滚动

用 Docker 搭建灰度发布的完整流程

用 Docker 搭建灰度发布的完整流程 之前有次发版比较头铁,容器一把全量替换,结果新代码里一个慢查询把数据库拖垮了,接口响应从几十毫秒飙到七八秒,手忙脚乱回滚折腾了半个多小时。从那以后我就把灰度发布这套流程搭起来了。说实话这玩意儿没什么高深的,就是两个容器加一个 Nginx,但它确实把发版的心理压力降下来不少——最坏情况也就是一小部分用户受影响,回滚就是改两行配置的事。 整套东西只需要 doc...

阅读更多

机器学习入门:链路追踪 数据预处理

机器学习入门:链路追踪 数据预处理 上周把两个月前写的一个用户流失模型重新跑了一遍,AUC直接从0.81掉到了0.76。数据文件没换,代码也没动过,就很离谱。排查了一晚上才发现,中间某次我图省事手动删过几十行脏数据,什么都没记,这次全量重跑,那几十行又混回来了。预处理这玩意儿不留痕是真的会翻车啊,而且翻得你一点脾气都没有... 下面是我踩完坑之后整理的一套做法,没什么高深的东西,全是笨办法,但实测...

阅读更多

机器学习入门:任务调度 数据预处理

机器学习入门:任务调度 数据预处理 前段时间开始折腾机器学习,跟着教程走的时候一切都挺美好,数据集是现成的,loadiris() 一调,fit 完直接出准确率。等真拿自己的数据上手才发现,数据这玩意儿才是最磨人的。缺失值要填,异常值要剔,类别要编码,数值要归一化,而且每次改个参数就得从头手动再跑一遍,一天下来大半时间都耗在这上头了。 后来干脆把预处理写成脚本,再挂到定时任务里让它自己跑,才算是解脱...

阅读更多

WebSocket 实时通信与 熔断 应用

WebSocket 实时通信与 熔断 应用 最近在做一个实时行情推送的项目,前端用 WebSocket 连后端,后端从 Kafka 拿数据再推给前端。本来觉得挺简单的,结果上线第一天就翻车了。某个后端实例因为内存泄漏卡住了,前端一看连接断了,就开始疯狂重连,一秒一次,网关连接数直接飙到几万,最后整个服务都挂了。当时就想着,这玩意儿得加个熔断啊。 WebSocket 的长连接没那么简单 WebSoc...

阅读更多

正则表达式进阶:蓝绿部署 匹配技巧

正则表达式进阶:蓝绿部署 匹配技巧 项目最近要从单环境切到蓝绿部署,本来以为改改 upstream 就完事了,结果在网关匹配上折腾了一下午。蓝绿部署听着简单,不就是两套环境切来切去吗?真到 Nginx / Ingress 里写正则,手一抖,流量就跑到还没验证的那套。下面是我这边实测能用的匹配方式,主要拿 Nginx 和 Ingress-nginx 举例,别的网关思路差不多。 先说场景:蓝绿不是两个...

阅读更多

PostgreSQL 索引与 分布式锁 的正确姿势

PostgreSQL 索引与 分布式锁 的正确姿势 事情是这样的 最近一个订单同步脚本,三台机器跑同一个 cron。我一开始的想法很朴素:数据库里加张 lock 表,lockkey 建唯一索引,谁 insert 成功谁执行。 然后线上翻车了。 任务确实只 insert 成功一次,但后面的 HTTP 拉数据是在事务提交以后跑的,另一台机器进来一看 key 已经存在,也觉得自己拿到了锁。我当时就有点绷...

阅读更多

Rust 所有权模型与 热更新 的思考

Rust 所有权模型与 热更新 的思考 一开始我以为只是换个 .so 我最近在一个 Rust 小工具里试着做插件热更新。 一开始我的想法很朴素:插件编译成 cdylib,宿主启动时 libloading 打开,之后我只要把新的 .so 或 .dll 文件放进目录,然后重新加载一下,新的 update 函数就顶替旧的。 结果这玩意儿是真的难搞啊,得把一堆所有权问题想清楚。 我先做了一个最小示例。插件...

阅读更多

从零实现一个简易的幂等设计

从零实现一个简易的幂等设计 前几天线上遇到一个很烦的事,支付回调收到两次,订单竟然被创建了两遍。我翻了半天日志,发现上游重试时带了同一个 tradeno,但我们的接口压根没判断,直接 insert。那会儿我就想,幂等这玩意儿到底要多“简易”才算真的能用? 下面是我后来在业务接口里加的一版做法,主要靠三个东西:唯一业务号、Redis 临时占位、MySQL 唯一索引。不算多高深,但确实能挡住大部分重复...

阅读更多

用 Docker 搭建连接池的完整流程

用 Docker 搭建连接池的完整流程 上周线上 PostgreSQL 连接数突然飙到 198(默认 maxconnections 是 200),三个微服务同时重启,新连接全拿不到,日志里清一色的 FATAL: too many connections for role。排查了一圈,发现有个定时任务每次跑完没释放连接,但短期先止血肯定不能等代码修,得把连接池架起来。 本来想直接在宿主机装 PgBo...

阅读更多

微服务架构下 连接池 的设计与权衡

微服务架构下 连接池 的设计与权衡 一开始我以为只是把 10 改成 200 上周订单服务突然开始报错,凌晨监控群里刷了一排红色,我看了一眼日志,大概就是这个味道: 第一反应很朴素:连接池太小了。 于是直接把 maximumPoolSize 从 10 拉到 200,重启,发布,感觉稳了。结果第二天高峰期又炸了,不过这次不是应用炸,是数据库先顶不住了。 后来去看 MySQL: 连接数蹭蹭往上涨,其他服...

阅读更多
未在播放