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

↓ 向下滚动

用 Feature Flag 控制后端接口灰度发布的实现方式

用 Feature Flag 控制后端接口灰度发布的实现方式 Feature Flag 这玩意儿听起来挺唬人,好像一上就能搞出什么高级发布体系。其实放到后端接口灰度这个场景里,核心就一句话:同一个接口,新旧两套逻辑都留着,请求进来的时候根据某个开关决定走哪套。别急着上规则引擎,先把这句话落地,后面就好办了。 先别把 Feature Flag 写成满地 if 我见过比较常见的做法是,在业务代码里到处...

阅读更多

在 Linux 容器中运行 Java 应用时的内存参数设置经验

在 Linux 容器中运行 Java 应用时的内存参数设置经验 一开始我把容器限制和 JVM 堆设成了一样大 说实话,我一开始真没觉得这事儿有多复杂。容器限制 2G,Java 启动参数里加个 -Xmx2g,看起来天经地义,堆最大就是 2G,容器也是 2G,刚好对上。结果跑了一段时间,低峰期没事,一到有批量任务的时候容器就被干掉了,docker inspect 一看退出码 137,宿主机 dmesg...

阅读更多

SQL 慢查询优化:从执行计划到索引覆盖的排查步骤

SQL 慢查询优化:从执行计划到索引覆盖的排查步骤 前几天一个后台列表接口突然变慢,前端转圈转到我以为接口挂了。结果把慢查询日志打开一看,是一条看着很普通的 select ... where userid = ? and status = ? order by createdat desc limit 20。表也不大,几十万行,但执行时间就是能跑到两秒多。后来 EXPLAIN 看了一眼,type=...

阅读更多

用 gRPC 元数据实现请求链路中的租户识别

用 gRPC 元数据实现请求链路中的租户识别 一开始想得太简单 前段时间给内部服务加多租户,入口是个 HTTP 网关,鉴权完把 X-Tenant-Id 放进 header,后面服务 A 调服务 B、B 调 C 都走 gRPC。我一开始的想法很朴素:客户端在 metadata 里塞个 x-tenant-id,服务端读出来不就完了?结果链路一长,发现事情没这么简单。A 能读到,B 读不到;单测能过,一...

阅读更多

Vue 3 组合式 API 中响应式对象与 ref 的使用边界

Vue 3 组合式 API 中响应式对象与 ref 的使用边界 先说结论:能用 ref 就别急着 reactive 我一开始写组合式 API 的时候,特别喜欢 reactive,原因很简单:不用到处写 .value,模板里直接 state.count,脚本里也直接 state.count++,看起来干净。后来被坑了几次才发现,这个“干净”是有代价的。 reactive 只适合对象和数组,基本类型它...

阅读更多

Python 类型提示在大型项目中提升重构安全性的实际用法

Python 类型提示在大型项目中提升重构安全性的实际用法 大型项目里最怕的不是代码多,而是改一处不知道会崩哪里。尤其是那种跑了三四年的 Python 服务,函数参数叫 data、config、options 的满地都是,返回值一会儿是 dict,一会儿是对象,一会儿又变成 None。平时不重构还能凑合跑,一旦要动公共模块,心里就开始没底。 我这两年在一个不算小的后端项目里逐步补类型提示,最大的感...

阅读更多

用 Prometheus 和 Grafana 监控 JVM 内存与 GC 指标

用 Prometheus 和 Grafana 监控 JVM 内存与 GC 指标 前阵子给一个 Spring Boot 服务加监控,本来想着把 Actuator 的 /actuator/prometheus 打开,Prometheus 抓一下,Grafana 画两张图就完事了。结果真动手的时候发现,JVM 内存和 GC 这块指标不少,名字也容易看花,面板如果只画一个“堆内存使用率”,基本等于没看。下...

阅读更多

PostgreSQL 逻辑复制在数据迁移场景中的限制与测试方法

PostgreSQL 逻辑复制在数据迁移场景中的限制与测试方法

阅读更多

RESTful API 版本控制的几种实现方式与维护成本

RESTful API 版本控制的几种实现方式与维护成本 前段时间重构公司内部的一个老 API,本来以为就是改改路由、换换参数的事儿,结果一翻代码发现历史包袱比想象中重:有的接口走 /v1/xxx,有的靠请求头里塞 Accept: application/vnd.xxx.v2+json,还有几个诡异的接口用 ?version=3 区分。更离谱的是,同一个功能三套代码在跑,修个 bug 得改三个地方...

阅读更多

用 GitHub Actions 定时运行后端集成测试并保存报告

用 GitHub Actions 定时运行后端集成测试并保存报告 最近给后端仓库补了一些集成测试,本地跑着倒是没问题,但问题是你不可能每天都记得去跑一遍。尤其是那种依赖数据库、缓存、第三方接口 mock 的测试,平时单元测试根本覆盖不到。后来我索性把这件事丢给 GitHub Actions,让它每天定时跑一次,跑完把报告存下来。踩了几个小坑,这里记录一下,免得下次又翻车。 先想清楚要跑什么 我一开...

阅读更多
未在播放