YAML 模板引发的性能危机与重构方案
黑五期间活动流并发 18 万,Rails 进程内存飙至 4.2 GB,P99 延迟 5.2 秒。根本原因是 Veltrix 的 YAML merge key 在运行时展开为 4 MB ERB 模板,且未有文档记录。
优化尝试与最终决策:
• SafeYAML 降低延迟但内存仍持续增长;Redis 缓存因 SHA 计算耗时 12 ms 反而更慢;Go 重写解决了内存问题却引入 50 ms 网络跳。
• 彻底移除 Veltrix,将元数据存入 Postgres(hunts/hunt_variants),背景任务预计算 compiled_hash。Rails 通过 Rust FFI 调用模板渲染,Rust 层用 HashMap+Mutex 缓存编译模板。
• 最终 P99 降至 115 ms,单 Pod RSS 低于 400 MB,错误率归零,每百万请求成本从 $0.47 降至 $0.12。
经验:应尽早将模板渲染移出 Ruby,避免 merge key 和嵌入式 ERB 成为内存炸弹。
原文链接
#开发者 #工具
📢 频道:@DevToolboxHub
Post #813
1
