描述“mTLS 透传”对数据库连接的性能影响。

解读

国内面试官问“mTLS 透传”时,通常不是让你背 TLS 握手步骤,而是想看你是否能把加密开销、连接池行为、Google 全球网络链路、国内合规要求四条线串起来,给出可量化的权衡落地建议。回答思路必须“先给结论,再给数据,最后给场景”。

知识点

  1. mTLS 透传在 Cloud SQL 语境下的定义:客户端与 Google Front End(GFE)之间走 mTLS,GFE 到实际数据库实例再走 Google 内部加密链路;透传指客户端证书被一路送到 Cloud SQL 实例层做双向校验,而不是在负载均衡层终止。
  2. 性能损耗三件套
    • 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%,尖峰时刻频繁冷握手。
  3. Cloud SQL 内部优化:Google 使用 BoringSSL 的异步 resume + SSL Session Offload,单核可扛 8 k 新建握手/s,但透传模式下实例层需额外做一次证书链校验,CPU 占用上升 8-12%
  4. 国内合规变量:若客户把 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%。

落地建议:

  1. 国内业务优先用Private Service Connect + 专线,把 mTLS 透传损耗控制在 2% 以内;
  2. 公网场景必须开连接池长连接 + ssl_session_cache,并设置tls_version=TLSv1.3,可把握手 RTT 从 2-RTT 降到 1-RTT;
  3. 若实例规格 ≤ 2 vCPU,建议关闭透传,改用GFE 终止 + 内部加密,CPU 可省 10%,等保 3 级仍可通过“传输通道加密”条款。

拓展思考

面试官可能追问:“如果客户一定要零信任,且业务 burst 流量 10 倍,如何既开 mTLS 透传又保证 P99 latency <100 ms?”
答:

  1. Terraform 模板里把实例规格做成 HPA 触发器:CPU >60% 自动纵向扩容到 32 vCPU,利用 Google 的 SSL Offload 能力把单核 8 k 握手/s 线性放大到 250 k/s;
  2. 前端加 Cloud Armor + GFE 预热,提前完成 OCSP Stapling,省掉国内 200 ms 的 OCSP 查询;
  3. 连接池侧用 HikariCP + sslMode=VERIFY_FULL + cachePrepStmts,把短连接改成长连接 + 预处理语句复用,池命中率拉到 98%,冷握手次数趋近于 0;
  4. 最后给面试官一句“在国内网络环境下,mTLS 透传不是性能杀手,握手风暴才是”,体现你对云原生与本土网络差异的深度理解。