TiProxy 问题解答 & 未来规划

大家好,我是 TiProxy 团队的研发,非常开心看到大家喜欢 TiProxy。我们读了每一条对 TiProxy 的评价,决定在这里解答大家的疑问。

TiProxy 刚 GA,有人用吗?稳定吗?

  • TiProxy 从 2023.1 开始上线 TiDB Serverless,你在 TiDB Serverless 上运行的每一条 SQL,都经过了 TiProxy 的处理;TiDB Serverless 的每一次 TiDB Pod 调度、扩缩容、升级,都用了 TiProxy 的连接迁移。参考博客 Maintaining Database Connectivity in Serverless Infrastructure with TiProxy.

  • TiProxy 在 2023.4 开始上线 TiDB Dedicated,经历了商业客户在生产环境的考验,连接保持和负载均衡都有很多成功案例。

  • TiProxy 的初衷是适应云上 TiDB 的弹性伸缩、快速迭代,但后来我们看到了云下用户有同样的诉求,才开始集成生态工具,而 TiProxy 的基本功能与云上相同。

TiProxy 在 TiDB DMR 版本里声明 GA,那能用于生产环境吗?

  • TiProxy 是独立发布的,TiProxy v1.0.0 是 GA 版本,可用于生产环境。

  • TiProxy 不一定要与 TiDB v8.0.0 配合使用,可以与 TiDB v6.5.0 及以上的任意 LTS 版本配合使用。

TiProxy 能替换 HAProxy 吗?

  • 需要权衡功能与性能,如果你认为 TiProxy 的功能更重要,那就替换 HAProxy。一个参考:TiDB Cloud 上 TiProxy 不能替换 NLB,相当于在链路上额外增加一个组件,会增加延迟、实例成本、跨可用区流量成本,但也有客户愿意使用。相比而言,替换 HAProxy 的代价低很多,所以我们相信肯定有场景。

  • 如果你用 VIP 的方式实现 TiProxy 的高可用,仍然需要手动部署 keepalived,TiUP 没有集成 keepalived。

为什么 TiProxy 的性能低于 HAProxy?

  • HAProxy 是 L4 层代理,不用解析 MySQL 包;TiProxy 是 L7 层代理,连接迁移需要解析 MySQL 包。L4 层代理已经有很多产品,而 L7 层代理可以做更多事。

  • TiProxy 的网络架构还是简单的 goroutine-per-connection 模型,goroutine 的切换有较多开销。

TiProxy 未来有什么规划?

TiProxy 的想象空间巨大,下面是我们当前的规划(规划随时可能调整,以下时间只是预估,不是承诺):

  • 高可用 & 业务连续性

    • (半年内)更全面的 TiDB 健康检查,例如当 TiDB 连不上 PD 或 TiKV 时,也能迁移走连接,快速恢复业务

    • (半年内)当 TiDB 有 OOM 风险时,迅速迁移走连接,降低对业务的影响;大 SQL 通常执行到 OOM,迁移不走

    • (远期)当 TiDB 意外下线(而非规划内的运维操作)时,也能保持连接

    • (远期)TiUP 集成 keepalived,在小规模集群上轻松实现 TiProxy 的高可用

    • (远期)TiProxy 的功能插件化,可随时在线扩展或更新功能

  • 性能 & 成本

    • (半年内)TiProxy 路由到本地 TiDB,主要用于降低云上的跨可用区流量费,也可用于跨机房部署、TiProxy 与 TiDB 混合部署时降低网络延迟

    • (半年内)基于 TiDB CPU 使用率(而非连接数)的负载均衡,当不同连接上的工作负载差异较大时也能充分利用 TiDB 资源

    • (远期)优化网络模型,提升吞吐量

  • 稳定性

    • (一年内)配置各租户的 TiDB 实例配额,实现计算层实例级别的资源隔离,与存储层的资源隔离(Resource Control 或 Placement Rules)组成一套完整的多租户方案

    • (远期)记录流量,把流量回放到新 TiDB 集群,验证新 TiDB 版本的兼容性,升级无忧

    • (远期)在 TiDB 高负载时限流,避免打挂 TiDB 或造成服务级别下降

  • 安全性

    • (一年内)支持基于证书的认证,与 TiDB 兼容

如果你有什么建议或脑洞,也欢迎留言或在 https://github.com/pingcap/tiproxy 提 issue!

最后,请保持耐心,保持期待!

5 个赞

这个不知道是否有测试结果对比?

TiProxy 不一定要与 TiDB v8.0.0 配合使用,可以与 TiDB v6.5.0 及以上的任意 LTS 版本配合使用

真不错,期待tiproxy功能的不断完善

Ti 赞了 :+1:

:+1:Ti酷拉

超期待这个问题。基于 TiDB CPU 使用率(而非连接数)的负载均衡,当不同连接上的工作负载差异较大时也能充分利用 TiDB 资源。

1 个赞

参见官网的性能测试报告:https://docs.pingcap.com/zh/tidb/dev/tiproxy-performance-test

2 个赞

真不错

有点强啊

期待这两项的实现

:+1: :+1: :+1:

TiProxy 管理 VIP 能力是线下部署比较期望的一种能力。
不过集成 keepalived 是不是不太好的一个选择,vrrp 协议是不是太重了,新一代的 MySQL 集群管理软件都不太使用 keepalived。用 raft leader 实现一个 VIP 管理能力是不是更好?

2 个赞

很期待基于TiDB CPU的负载均衡、插件化功能和流量拷贝功能

1 个赞

mark

1 个赞

厉害👍🏻

:+1::+1::+1:

YYDS

可以哦,等我来测测

受教了,让 TiProxy 自己管理 VIP 确实更好。
不过我想调整一下,把 raft 选举改为在 PD 上的 etcd 选主,因为 TiDB 的正常运行都是依赖于 PD 的。在网络分区的情况下,etcd 选主总能选到和 PD leader 在同一个分区的 TiProxy,也就能路由到正常的 TiDB;而 raft 可能会路由到另一个分区,导致集群完全不可用。

另外我在想,也许让用户选择 primary 偏好,或者像 keepalived 一样配置权重能适应更多场景:

  • 因为只有一台 primary 实例,它的硬件配置可能需要很高。用户为了省成本,可能想要 primary 32C,standby 16C。只要 32C 的实例活着,那总应该让 32C 的实例做 primary。
  • 用户有两个机房,但为了省成本,小集群只用软负载。为了高可用,TiProxy 在两个机房各配一个,但想要与应用同机房的 TiProxy 优先成为 primary。

我对业务理解不深,有错误还请多指教哈。

2 个赞

Ti赞了