给遗留 Java 系统增加指标埋点而不改变业务代码的尝试
给遗留 Java 系统增加指标埋点而不改变业务代码的尝试 先交代一下背景。手上有一套老 Java 系统,Java 8、Spring MVC、Tomcat,业务代码年头不短了,能跑,但谁都不太想动。最近想给它加一点基础指标,至少能看到请求量、耗时和异常数。问题就在这儿:业务代码不能改,连 pom 都不太想动,改一行就得回归一堆东西,没人愿意背这个锅。 最开始想的是 Spring Boot Actua...
阅读更多给遗留 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...
阅读更多Django ORM 多表关联查询避免 N+1 问题的实践 问题是怎么冒出来的 一开始我也没把列表页当回事。文章列表嘛,每行显示标题、作者、分类、评论数,再带两条最新评论,看起来挺简单。本地数据就几十条,页面嗖嗖的,完全感觉不到问题。结果数据一多,线上页面开始肉眼可见地慢,打开 Django Debug Toolbar 一看,好家伙,一条列表页干出来几百条 SQL。 当时第一反应是:“我也没写循环...
阅读更多在 CI 中扫描容器镜像漏洞并与构建流程集成 起因 之前我们的 CI 基本就是 build、push、完事。镜像能不能跑起来,靠测试;镜像里有没有已知漏洞,基本靠运气。直到有一次,一个已经上线挺久的服务被扫出来基础镜像里带了一堆高危包,我才认真去看 CI 里到底该怎么把镜像扫描这件事接进去。 一开始想得很简单:加一步扫描不就行了?真做起来发现细节还挺多,比如扫哪个镜像、什么时候扫、扫出来要不要卡构...
阅读更多用 eBPF 观察容器网络丢包的基础实验步骤 最近排查一个容器网络问题,应用侧说偶发超时,宿主机上看接口也没红,ss 里重传倒是有一些。想用 eBPF 看看包到底在哪儿没的,顺手把最小实验步骤记一下,免得下次又从零开始翻命令。 先说清楚,这个实验不是要复现某个特别复杂的生产故障,只是搭一个能稳定丢包的容器网络环境,然后用 bpftrace 去观察内核里跟丢包相关的事件。实验做完,至少能知道 kfr...
阅读更多