机器学习入门:热更新 数据预处理
机器学习入门:热更新 数据预处理 最近在折腾一个小模型服务,模型热更新倒是能用了,结果数据预处理这块卡住了。线上字段加了一个类别,预处理代码里的映射是训练时 fit 出来的,服务重启一次还能忍,但每次改映射都重启就太蠢了。于是想着能不能热更新预处理。一开始以为 watch 一下 yaml 重新加载就完事,结果发现这玩意儿坑不少,可能是我没找对姿势吧。 先说结论:预处理热更新不是 reload 一下...
阅读更多机器学习入门:热更新 数据预处理 最近在折腾一个小模型服务,模型热更新倒是能用了,结果数据预处理这块卡住了。线上字段加了一个类别,预处理代码里的映射是训练时 fit 出来的,服务重启一次还能忍,但每次改映射都重启就太蠢了。于是想着能不能热更新预处理。一开始以为 watch 一下 yaml 重新加载就完事,结果发现这玩意儿坑不少,可能是我没找对姿势吧。 先说结论:预处理热更新不是 reload 一下...
阅读更多一次线上 数据脱敏 故障的复盘记录 事情过去几天了,想想还是记一下。不是那种“高度重视、举一反三”的复盘,就是给自己和后来人提个醒:脱敏这种看起来不起眼的逻辑,真出事的时候一点都不小。 事情是怎么发现的 下午两点多,客服在群里问了一句:“刚导出的用户列表,手机号怎么是完整的?”我当时还没太当回事,以为是谁把测试环境的文件发过去了。结果点开她发的截图一看,还真是明文手机号,中间四位没打星号。再一问,...
阅读更多Rust 所有权模型与 分布式锁 的思考 先说结论:本地锁是语言问题,分布式锁是共识问题 前段时间把服务从单机改成多副本,原来一把 Mutex 能搞定的事情,突然就得请 Redis 出场了。我一开始还挺乐观,心想 Rust 的 MutexGuard 用起来这么舒服,分布式锁无非就是把 lock() 换成一次网络请求,再封装一个 guard,Drop 的时候释放,应该差不多吧。 结果发现差得还挺多。...
阅读更多给遗留 Java 系统增加指标埋点而不改变业务代码的尝试 先交代一下背景。手上有一套老 Java 系统,Java 8、Spring MVC、Tomcat,业务代码年头不短了,能跑,但谁都不太想动。最近想给它加一点基础指标,至少能看到请求量、耗时和异常数。问题就在这儿:业务代码不能改,连 pom 都不太想动,改一行就得回归一堆东西,没人愿意背这个锅。 最开始想的是 Spring Boot Actua...
阅读更多使用 Argo Rollouts 实现 Kubernetes 金丝雀发布指标分析 前阵子把 Argo Rollouts 接进集群,本来只是想按 10%、50%、100% 把流量慢慢放出去,结果发现光有步骤还不够——你总得知道新版本到底是真没问题,还是只是错误还没暴露出来。没有指标分析的金丝雀发布,说白了就是手动暂停,pause 完心里还是没底。 分析模板和 AnalysisRun 到底在干什么 A...
阅读更多在 Electron 应用中处理主进程与渲染进程通信的生命周期 先把 IPC 的注册时机定下来 前阵子改一个 Electron 项目,窗口开开关关,消息有时候能收到,有时候像石沉大海。查了一圈才发现,问题不在 IPC 本身,而在我没把主进程和渲染进程的通信当成一个有生命周期的东西来看。 最开始的坑是 ipcMain.handle 的注册位置。我图省事,把它塞进了 createWindow 里面,想...
阅读更多SQL Server 事务隔离级别设置不当导致的并发异常分析 先说个真事儿 上个月被拉去救火,一套订单系统的对账任务每天凌晨跑,偶尔会多出几笔重复的流水,或者少算一笔。数据库那边没报错,业务那边也没报错,就是数字对不上,而且 —— 关键是 —— 复现不了。 我一开始怀疑是定时任务重跑了,翻了半天日志,没重跑。又怀疑是存储过程里游标写错了,逐行看了一遍,也挺正常。最后实在没招了,问了一句“你们这个查...
阅读更多用 pnpm workspace 管理 TypeScript 多包项目依赖 之前项目里包一多,每个包单独 npm install,改个公共包的版本,得挨个改 package.json,然后挨个 install,烦得很。后来换成 pnpm workspace,一开始没搞明白 workspace:,改完 shared 的代码,web 里死活不更新,查了半天才发现依赖版本号写死了。下面是我现在用的方式,...
阅读更多多环境配置管理:环境变量、配置中心和文件挂载的适用场景 前段时间帮朋友收拾一个项目,开发、测试、生产三套配置,一开始全写在 application.yml 里,改一次环境就提交一次,最后 git 历史里全是“改数据库地址”“改 redis 地址”这种提交。后来他又听说配置中心高级,差点直接上 Nacos,我赶紧拦住:就三个服务、七八个配置项,真没必要。配置管理这事儿,不是越高级越好,关键是看你的配...
阅读更多用 OpenAPI 契约驱动前端类型生成与接口测试 起因是一堆对不上的字段 前段时间在改一个后台项目,一个列表页的字段明明显示正常,复制出来的表格数据却是空的。查了半天,后端在某个版本里把 userName 改成了 username,而前端那个 interface 是几个月前照着接口文档手抄的,抄完之后再也没人碰过它。TS 也不会报错,因为从接口返回的数据本来就是 any,然后我们手动 as Us...
阅读更多