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

↓ 向下滚动

WebSocket 实时通信与 任务调度 应用

WebSocket 实时通信与 任务调度 应用 先说背景。前阵子给内部做了个任务平台,用户可以提交一批批处理任务,后台跑完再把结果推回前端。一开始图省事,前端直接 setInterval 每 5 秒拉一次 /api/tasks,接口压力倒还好,毕竟用的人不多,但是那个体验是真的难受——任务一多,表格里的状态就一卡一卡地跳,明明任务已经跑完了,前端还得等下一次轮询才能看见。更要命的是,任务执行过程中...

阅读更多

微服务架构下 灰度发布 的设计与权衡

微服务架构下 灰度发布 的设计与权衡 前阵子给订单服务做灰度,本来以为在网关配个权重就完事了,结果链路一深,问题全冒出来了。A服务灰度了,B服务没灰度,C服务又调了个旧版本,最后用户看到的页面一半新一半旧,日志里连这个请求到底走了哪个版本都查不出来。所以这篇不聊什么“灰度发布最佳实践”,就聊聊我踩过的坑和最后怎么权衡的,没准儿你们团队也正卡在某个点上。 入口灰度最容易,也最容易给人错觉 最开始我就...

阅读更多

Kubernetes 链路追踪 配置避坑指南

Kubernetes 链路追踪 配置避坑指南 先说结论:大部分问题不是链路追踪坏了,是配置没对上 我一开始以为链路追踪就是装个 Collector、加个 Agent,然后 Jaeger 里就能看到漂亮的时间线。结果真在 Kubernetes 里配下来,发现坑比想象中多。最难受的是,它不像 Pod 起不来那样直接报错,很多时候是“有数据,但链路断了”“有 trace,但服务名全是 unknownse...

阅读更多

机器学习入门:消息队列 数据预处理

机器学习入门:消息队列 数据预处理 最近给一个入门项目补数据管道,一开始我图省事,写了个脚本扫目录直接预处理,结果数据一多就卡在那儿,终端半天不动,我还以为代码写挂了。后来才发现,不是模型的问题,也不是 Python 的问题,是我把“读文件、解码图片、缩放、归一化、落盘”全塞一个循环里了,前面还没处理完,后面又不停往里灌。这个场景其实很适合把消息队列拉进来:生产端只管把“要处理哪张图”丢进队列,消...

阅读更多

性能优化手记:连接池 排查全过程

性能优化手记:连接池 排查全过程 事情是这样的,前几天晚上监控突然开始报警,某个服务的接口平均响应时间从 80ms 一路飙到 2 秒多,偶尔还夹杂几个 500。第一反应是数据库扛不住了?登录服务器看了一眼,CPU 正常,内存正常,慢查询日志里也没几个新面孔。 又过了几分钟,错误日志里开始冒 Cannot get a connection, pool error Timeout waiting fo...

阅读更多

Python 异步编程与 限流 实践

Python 异步编程与 限流 实践 最近在写一个批量拉接口数据的小工具,接口本身不算慢,但一上 asyncio.gather 把几百个请求同时甩出去,前几秒很爽,后面就开始 429,偶尔还给你来个连接超时。日志里一堆 Too Many Requests,看着就头大。后来才老老实实把限流加上,发现异步编程里“会并发”和“会控制并发”完全是两码事,下面把这次实践记一下,代码都是能直接跑的那种。 场景...

阅读更多

机器学习入门:热更新 数据预处理

机器学习入门:热更新 数据预处理 最近在折腾一个小模型服务,模型热更新倒是能用了,结果数据预处理这块卡住了。线上字段加了一个类别,预处理代码里的映射是训练时 fit 出来的,服务重启一次还能忍,但每次改映射都重启就太蠢了。于是想着能不能热更新预处理。一开始以为 watch 一下 yaml 重新加载就完事,结果发现这玩意儿坑不少,可能是我没找对姿势吧。 先说结论:预处理热更新不是 reload 一下...

阅读更多

一次线上 数据脱敏 故障的复盘记录

一次线上 数据脱敏 故障的复盘记录 事情过去几天了,想想还是记一下。不是那种“高度重视、举一反三”的复盘,就是给自己和后来人提个醒:脱敏这种看起来不起眼的逻辑,真出事的时候一点都不小。 事情是怎么发现的 下午两点多,客服在群里问了一句:“刚导出的用户列表,手机号怎么是完整的?”我当时还没太当回事,以为是谁把测试环境的文件发过去了。结果点开她发的截图一看,还真是明文手机号,中间四位没打星号。再一问,...

阅读更多

Rust 所有权模型与 分布式锁 的思考

Rust 所有权模型与 分布式锁 的思考 先说结论:本地锁是语言问题,分布式锁是共识问题 前段时间把服务从单机改成多副本,原来一把 Mutex 能搞定的事情,突然就得请 Redis 出场了。我一开始还挺乐观,心想 Rust 的 MutexGuard 用起来这么舒服,分布式锁无非就是把 lock() 换成一次网络请求,再封装一个 guard,Drop 的时候释放,应该差不多吧。 结果发现差得还挺多。...

阅读更多

给遗留 Java 系统增加指标埋点而不改变业务代码的尝试

给遗留 Java 系统增加指标埋点而不改变业务代码的尝试 先交代一下背景。手上有一套老 Java 系统,Java 8、Spring MVC、Tomcat,业务代码年头不短了,能跑,但谁都不太想动。最近想给它加一点基础指标,至少能看到请求量、耗时和异常数。问题就在这儿:业务代码不能改,连 pom 都不太想动,改一行就得回归一堆东西,没人愿意背这个锅。 最开始想的是 Spring Boot Actua...

阅读更多
未在播放