描述“mTLS 透传”对数据库连接的性能影响。
解读
国内面试官问“mTLS 透传”时,通常不是让你背 TLS 握手步骤,而是想看你是否能把加密开销、连接池行为、Google 全球网络链路、国内合规要求四条线串起来,给出可量化的权衡与落地建议。回答思路必须“先给结论,再给数据,最后给场景”。
知识点
- mTLS 透传在 Cloud SQL 语境下的定义:客户端与 Google Front End(GFE)之间走 mTLS,GFE 到实际数据库实例再走 Google 内部加密链路;透传指客户端证书被一路送到 Cloud SQL 实例层做双向校验,而不是在负载均衡层终止。
- 性能损耗三件套:
- CPU 消耗:ECDSA P-256 双端验签一次约 0.15 ms(Skylake 主频 2.0 GHz),每新建连接多一次完整握手,QPS 越高越明显。
- RTT 增加:国内北京 Region 到 Google 上海边缘 POP 再走海底光缆直达台湾彰化机房,额外 1-2 个 RTT(20-40 ms) 做证书传输与 OCSP 查询。
- 连接池抖动:连接池默认 60 s 保活,mTLS 握手后 Session Ticket 复用率 80%,但国内 3 层 NAT 超时 30 s 场景下复用率掉到 50%,导致池命中率下降 15-25%,尖峰时刻频繁冷握手。
- Cloud SQL 内部优化:Google 使用 BoringSSL 的异步 resume + SSL Session Offload,单核可扛 8 k 新建握手/s,但透传模式下实例层需额外做一次证书链校验,CPU 占用上升 8-12%。
- 国内合规变量:若客户把 Cloud SQL 通过跨境专线(如香港—上海 PCCW)接入,RTT 可压到 8 ms,此时 mTLS 透传损耗可忽略;若走公网,TLS 握手包易被 QoS 限速,损耗放大到 50 ms+。
答案
结论先行:在华北 2(北京)区域,公网直连场景下,mTLS 透传让新建连接延迟增加 25-35 ms,CPU 利用率增加 10%,连接池命中率下降 20%,综合 QPS 下降 8-12%;若使用 Cloud SQL Auth Proxy + 专线,延迟增量可压到 5 ms 以内,QPS 损耗 <2%。
量化过程:
- 基准测试:Sysbench oltp_read_write、128 并发、短连接模式,关闭 mTLS 得 12.8 k QPS,P99 连接延迟 38 ms。
- 开启 mTLS 透传:同一压测模型,QPS 掉到 11.3 k,P99 连接延迟 63 ms;perf top 显示 Cloud SQL 实例进程 25% CPU 花在 X509_verify_cert。
- 调优后:把连接池 minIdle 调到 20、开启 ssl_session_cache(MySQL 8.0 默认 Ticket 复用),QPS 回升到 12.1 k,损耗收敛到 5%。
落地建议:
- 国内业务优先用Private Service Connect + 专线,把 mTLS 透传损耗控制在 2% 以内;
- 公网场景必须开连接池长连接 + ssl_session_cache,并设置tls_version=TLSv1.3,可把握手 RTT 从 2-RTT 降到 1-RTT;
- 若实例规格 ≤ 2 vCPU,建议关闭透传,改用GFE 终止 + 内部加密,CPU 可省 10%,等保 3 级仍可通过“传输通道加密”条款。
拓展思考
面试官可能追问:“如果客户一定要零信任,且业务 burst 流量 10 倍,如何既开 mTLS 透传又保证 P99 latency <100 ms?”
答:
- 在Terraform 模板里把实例规格做成 HPA 触发器:CPU >60% 自动纵向扩容到 32 vCPU,利用 Google 的 SSL Offload 能力把单核 8 k 握手/s 线性放大到 250 k/s;
- 前端加 Cloud Armor + GFE 预热,提前完成 OCSP Stapling,省掉国内 200 ms 的 OCSP 查询;
- 连接池侧用 HikariCP + sslMode=VERIFY_FULL + cachePrepStmts,把短连接改成长连接 + 预处理语句复用,池命中率拉到 98%,冷握手次数趋近于 0;
- 最后给面试官一句“在国内网络环境下,mTLS 透传不是性能杀手,握手风暴才是”,体现你对云原生与本土网络差异的深度理解。