SLO、error budget 和 multi-burn-rate 告警的工程实现,按问答一节节推进:为什么传统阈值告警噪声大或滞后、burn rate 14.4× 和 6× 怎么来的,Prometheus 的 recording rules 与 alert 又怎么写。
从 OpenAPI 3.0 到 3.1:JSON Schema 对齐、nullable 语义重构与 webhooks
介绍 OpenAPI 3.1 相比 3.0 的几项核心变化:JSON Schema 2020-12 对齐、nullable 语义重构、webhooks 原生支持,以及我在项目里做升级验证时看到的收益与边界。
Spring Boot 微服务中的 Feature Toggle 实战:OpenFeature Property Provider + K8s ConfigMap 热更新
开关语义和供应商解耦之后,剩下的问题是 flag 从哪儿读、改完怎么不重启就生效。shop 项目这一版把这两件事分别交给 Spring Config 和 Configuration Watcher。
Spring Boot 3.5 接 OpenTelemetry:尽量少写手动接入,把四个信号串起来(2026)
Spring Boot 3.5 + Java 25 下的 OpenTelemetry 接入:尽量让自动配置去做,启用虚拟线程,用 JFR 补上 profiles,把 Traces / Metrics / Logs / Profiles 串起来。
Java 25 on Kubernetes:默认配置未必适合容器
Java 25 跑在 Kubernetes 上,默认堆只用了 25%,CPU 节流的影响也比预期大,这几组实验数据和值得优先验证的配置项放在一起。
K8s CPU 配置:requests/limits 各管什么、Throttling 怎么发生、谁先被驱逐
结合 Homelab 场景整理 Kubernetes 的 CPU requests/limits、CFS throttling、QoS 类别与节点压力驱逐机制,以及我当前采用的资源配置思路。
用 mirrord 把本地进程接入 K8s 集群:从 Demo 到真实调试实践
通过一个 Spring Boot + MySQL + kind 的 Demo,记录如何用 mirrord 让本地进程「假装」自己是 K8s 里的 Pod,无需重新打镜像就能接入集群资源进行调试。
本地 Kind K8s 开发环境:问题驱动的工具选择与 Tradeoff
本地用 Kind 跑 Spring Boot 微服务,工具按问题挑:镜像循环慢就上模块级增量构建,改完代码快速验证交给 Tilt,IDE 打断点用 mirrord,GitOps 演练单独拉一个 ArgoCD。
Spring Boot 3.5 的 h2c 会不会比 HTTP/1.1 快:两个压测实验的结论
围绕 Spring Boot 3.5、JDK HttpClient 和 h2c,我做了一次完整压测:先观察 h2c 不会天然更快,再设计一个 0 错误的正例,展示它在特定场景下为什么会比 HTTP/1.1 更占优。
How a Performance Optimization Caused Cascading Redis Timeouts in Spring WebFlux
A seemingly harmless removal of publishOn(Schedulers.boundedElastic()) led to cascading Redis timeouts in production. This post explains how Spring’s @Cacheable blocks the Netty event loop when used with RedisCacheManager, and why BlockHound failed to catch it.