综上几点,比较了市面上主流的几款 SQL 产品之后,TiDB 成为我们最好的选择。
为什么选择 ARM
x86 它不香吗?x86 是挺香的,但我们主要考虑的还是三点,成本、兼容性和运维。
ARM 平台的成本相较于 x86 会有一部分优势,对于小体量的用户来说是一个不错的选择。兼容性方面,TiDB 官方也有对 ARM 做过测试和验证,运行起来没有任何问题。运维层面,ARM 的可靠性到底如何?可能没有用过的用户,会担心宕机和崩溃,作为一个视频点播公司,U-Next 的分布式存储平台早在几年前已经全部替换成 ARM 平台,目前为止运行都比较稳定。
当然在和 ARM 磨合的过程中,也遇到过问题,硬件厂商都及时帮助解决了。现在大部分在非必须使用 x86 的情况下,我们都会尝试着使用 ARM,鉴于以往的这些经历,我们决定选用 ARM 来上线核心生产的数据库系统。
TiDB 在 ARM 与 x86 平台的性能测试对比
从响应时间来看,单个 API 服务器的瓶颈出现在 150 个客户端附近,再增加客户端数量,RPS 也提升不了多少,反而响应时间变得更大。测试也许有不太严谨的地方,我们通过测试看到了基于业务模型, ARM 和 x86 在 TiDB 上的性能差距并不明显。
前面提到的有一个 10 亿行表的数据库,经常被访问,性能已经跟不上业务发展,庆幸的是 TiDB 完全兼容这个业务使用的 MySQL 方法,在 ARM 平台的性能表现也很好,于是我们采用了 TiDB 替换了原来的数据库。
关于 ARM 的优化,需要特别感谢 PingCAP 的研发同事,帮我找出了 THP 的差异。我们在测试导入数据的时候,发现大概在 100G 数据的时候,x86 没有关闭 THP 的情况下,所有的状态也都正常。在 ARM 平台上没有关闭 THP 的状态下,TiKV 很容易造成负载过重 OOM。所以使用 ARM 的话,强烈建议一定要关闭 THP。
关于 Numa 的绑定,我们使用的平台中 ARM 有四个 Numa 节点,而 x86 只有两个,ARM 的内存处理需要 CPU 去参与,默认在不绑定内核的情况下,Numa 的节点越多,内部延迟就会越大。所以建议把进程绑定到相应 Numa 节点的内核上,网卡对应也得做绑定,会减少延迟。TiDB 非常优秀,除了海量数据场景以外,甚至可以不考虑如何去调优。上图是 Numa 调整后的测试结果,可以看到在 ARM 和 x86 平台运行 TiDB ,几乎不存在差异。
以上就是我今天的分享,谢谢大家。
本文整理自黄必荣在 TiDB DevCon 2020 上的演讲。