私有子网的默认路由指向 NAT 之后,钱会从三个地方漏出去:没人用的网关一直计小时费,S3 和 ECR 镜像层绕公网按 GB 收费,SaaS 的公网域名让 peering 闲着。三笔各自的成因、对应解法和回本点。
Confluent Cloud 的 ACL 只认 service account,不认 API Key
一个 producer 八小时没写进消息,根因是有人给同一个 service account 加了一条 DENY。Confluent Cloud 上 API Key 只做认证,ACL 认的是账号,一次权限改动的作用面是账号名下所有 key。
给 Hugo 静态站接 WebMCP
静态站没有后端,也能用 document.modelContext.registerTool 把搜索索引挂成浏览器里的 agent 能直接调的工具。代价是一张 origin trial token 和 2026-11-17 的到期日,好处落在访客那边。
Kubernetes 1.37 升级前要过一遍的东西
Kubernetes 1.37 在 2026-08-26 发布,67 项 enhancement 里真正影响升级的不多:四条 ACTION REQUIRED、一批默认值翻开的 Beta gate、三条带版本期限的弃用。
corrode.dev 的 Go 到 Rust 迁移指南:工具链、类型系统、集成策略与哪些场景留在 Go
Matthias Endler 写给后端团队的迁移指南。Go 已经站在静态类型编译语言这边,换 Rust 的收益在类型系统:nil、错误传播、数据竞争和取消原本靠约定和 linter 兜住,现在有了编译期检查,代价是借用检查器、编译时间和 async 着色。
JVM 怎么把 bytecode 跑成 native code:class loader、runtime data areas、execution engine
singhajit.com 上标称 17 分钟读完的 JVM 运行时入门:从 javap 看到的 iload、iadd 讲到 C1、C2 分层编译和 deoptimization,GC 那节覆盖 G1、ZGC 和分代回收的取舍。
用 external-dns 自动创建 DNS 记录:source、target、所有权登记,以及两个偏危险的默认值
hostname 已经写在 Ingress 或 HTTPRoute 里,再去 DNS 那边手建一条记录,等于给集群状态留了一份要同步维护的副本。交给 external-dns 的代价是自己定三件事:读哪种资源、target 指向哪里、哪些记录归这个实例。
UUIDv4 / UUIDv7 / ULID 当主键的取舍:键宽和递增性在四种部署方式下的收益和代价
选 UUIDv4、UUIDv7 还是 ULID 当主键,真正在选的只有键宽和同一毫秒内有没有顺序。InnoDB 上一个写入者时递增键少近四成的页,四个写入者只剩两成、文本主键反而更差;按主键范围分片的库上递增变成写热点,按 hash 分布的库不看这一项。
Spring Boot fat jar 下 Class.forName 只在部分线程上找不到类:打包方式和线程来源各管一关
同一句 Class.forName 在 IDE 里跑得好好的,打成 fat jar 就报找不到类:看打包方式给的是哪个 application class loader,也看这条线程的 TCCL 是继承创建者的还是被 ThreadFactory 设过。
分页查询慢了 40 秒:两张明细表同层 JOIN 乘出 396 万行,聚合又压回 1,220 行
两张明细表只共享半个唯一键,同层 JOIN 之后才聚合,分页接口那 40 秒慢查询就出在中间被 DISTINCT 压回去的那些行上;拆成三步后这组参数下结果逐行一致。