为 Keycloak SPI 提供者添加监控:让下一个静默 JDBC Bug 无需代码审查就能被发现
来源:dev.to — Jul 19
📋 概述
Jihed Ben Arfa 在 Keycloak SPI 提供者中发现 `getUserByUsername` 被重复调用两次——一次空值检查、一次返回流,每次产生独立 JDBC 往返。更严重的是 `LegacyUserRepository` 每次查询都打开新连接而非连接池。他集成 Sentry 添加了子 Span 追踪:`legacy_db.find_one`、`legacy_db.search`,并记录返回行数,使静默性能问题变为可观测数据。
🔑 核心要点
- `getUserByUsername` 被调用两次:一次判空、一次构建返回流,每次独立 JDBC 往返
- `LegacyUserRepository` 每次查询打开新连接(无连接池设计),双倍调用=双倍连接开销
- 集成 Sentry 子 Span:为三个查询方法添加 `legacy_db.find_one`、`legacy_db.search`、`legacy_db.count`
- search 方法额外记录返回行数作为 Span 数据——将静默性能问题变为可观测指标
- Fallback 到 NoOpSpan 确保无活跃事务时不抛异常——永不崩溃的监控
💡 金句
两次调用,两次独立的 JDBC 往返,不带连接池。没有异常,没有错误结果——只是默默地把每次查询的数据库负载翻倍。这种 bug 只有阅读代码才会发现。
👍 0
👎 0
← 返回 Dev.to 首页