蚂蚁金服OceanBase挑战TPCC丨TPC-C基准测试之链路层优化

蚂蚁金服自研数据库 OceanBase 登顶 TPC-C 引发业内普遍关注,为了更清楚的展现其中的技术细节,咱们特地邀请 OceanBase 核心研发人员对本次测试进行技术解读,共包括六篇:数据库

1)TPC-C基准测试介绍后端

2)OceanBase如何作TPC-C测试数组

3)TPC-C基准测试之SQL优化缓存

4)TPC-C基准测试之数据库事务引擎的挑战性能优化

5)TPC-C基准测试之存储优化服务器

6)TPC-C基准测试之链路层优化网络

本文为最后一篇,为方便阅读,咱们将系列文章整理成PDF电子书,关注“蚂蚁金服科技”官方公众号,回复“TPCC”便可下载。多线程

导语

在 TPC-C 标准定义中,测试系统分为 RTE(Remote Terminal Emulator)和 SUT 两部分。在实际的 TPC-C 测试流程中,不仅是对 DB 端能力的考验,对链路中的全部组件都存在极大的资源消耗和压力。以此次 6088万 tpmC 测试结果看,咱们一共在 64 台 64C128G 的云服务器上运行了 960 个 RTE 客户端,来模拟总计 47942400 个用户 Terminal,最后还须要基于这么多 RTE 统计结果进行一致性和持久化审计验证。而 SUT 又拆分为三部分:WAS(Web Application Server) 、OceanBase Proxy(OBProxy) 和 OceanBaseServer(OBServer)。RTE 的请求到 WAS,而后 WAS 经过 OceanBase 客户端来访问 OBProxy,OBProxy 会将请求转发到后端 OceanBase 集群中最佳的 ObServer 去执行请求。WAS 和 OBProxy 是 RTE 和 OBServer 之间的桥梁,这个桥梁对于承载压力起着相当重要的做用。本次TPC-C 基准测试中,OceanBase 访问链路上主要涉及两个组件:架构

ODBC接口及驱动并发

TPC-C 测试中,WAS请求 OceanBase 采用了 ODBC 接口。ODBC(Open Database Connectivity)是 Microsoft 提出的数据访问规范,ODBC 在大多数 DBMS 上均可以使用,OceanBase 也提供了 ODBC 接口访问能力。感兴趣的用户能够查阅 ODBC API说明 快速上手使用,使用 ODBC 的用户能够直接使用该接口无缝迁移的访问 OceanBase。ODBC 接口及驱动集成到 WAS 内部,做为请求 OceanBase 的客户端。

OBProxy代理

OceanBase 实现了OBProxy 代理服务器来解决数据库链路上的路由及容灾问题。OBProxy 会感知数据副本地址和分区规则,不参与 SQL 引擎参与执行计划的生成调度,主要负责 SQL 路由和转发。这种架构设计中,OBProxy 承担了基础的路由和容灾功能,而数据库的功能所有交由 ObServer 实现。这样更加简单明确的分工能够各组件性能作的更加极致,OBProxy 也作到了彻底无状态,只须要添加节点便可实现代理能力的水平扩容,OceanBase总体也能作到数据库的最高性能。

TPC-C 基准 OceanBase 链路访问图

TPC-C 是一个很是严苛的基准测试模型,考验的是一个完备的关系数据库系统全链路的能力,任何一个环节有瓶颈均没法发挥数据库的最大性能,接下来本文会分别在性能、成本及服务持续三个方面来讲明下是如何优化 OceanBase 链路上的组件。

链路性能优化

蚂蚁金服OceanBase挑战TPCC | TPC-C基准测试之SQL优化 已经提到,从整个链路的角度来看,SQL 所须要的执行时间是很是短暂的,大量时间花费在与客户端的交互过程当中,形成资源的浪费和耗时的增长,为此 OBServer提供 Prepared Statement、存储过程和 ARRAY BINDING 能力。客户端和 OBProxy 针对该能力进行支持以使其真正发挥做用。同时客户端自己也进行一些优化提高链路性能,接下来主要介绍链路性能部分的优化点:

提供异步接口能力

一般使用数据库访问都是同步接口,同步接口开发方便,但客户端受网络交互耗时影响大,并发能力受到限制。使用多线程的方式能够帮助提高并发能力,但机器的线程资源是宝贵的,过多的线程会增长机器线程切换的开销,限制了并发能力。为使 WAS 能够达到更高的吞吐能力,咱们基于事件驱动机制在 ODBC 接口内增长异步接口的支持。使用异步接口,WAS 单个线程内能够在发送请求后无需等待执行结果继续在其余 Session 上发送请求,经过充分使用线程资源从而大幅提高吞吐能力。异步接口自己参考 ODBC 接口规范,用户调用异步接口会当即返回,若是还没有执行完成则返回SQL_STILL_EXECUTING,用户能够轮询接口直到执行完成返回成功(SQL_SUCCESS)或者失败(SQL_ERROR),也能够基于网络事件驱动,在有结果返回时再次调用接口获取结果。使用异步接口,能够在少许线程资源下轻松支持大量的并发链接,极大的提高了 WAS 的并发能力,机器资源的利用率也获得提高,大幅下降压测成本。

提供 Prepared Statement 能力

PreparedStatement 是一种二进制的请求交互协议,一次 PSSQL 文本传输,屡次执行,OBProxy SQL 引擎会缓存 PS SQL 文本以及解析结果,每条 PS SQL 只须要执行一次 Prepare 操做,后续全部 Session 上的每次执行只须要传入对应的 Statement Id,就能够从缓存中找到对应的 SQL 解析结果,结合传入的参数,能够很快的计算出 OBServer 的路由信息,转发性能更为高效。同时,做为代理层的 OBProxy 也很好的支持了 OBServer 的分布式特性,当 Client Session 须要切换 Server Session 时,无需再次发送 PS SQL 和 Execute 阶段时的类型数据,OBProxy 能够自行判断并决定是否须要同步 PS SQL 或加上类型数据。经过 Prepared Statement 能力,能够有效减低系统间的交互成本,提高性能,相比普通 SQL 文本的交互方式,省去了大量 SQL 文本的传输以及请求文本解析的 CPU 开销。

存储过程

对于存储过程,OBProxy 作了大量优化,存储过程一般包含多条 SQL,不一样 SQL 一般须要路由到不一样 OBServer 上执行,产生大量远程执行。远程执行不只会增长 RT,也会占用更多的 CPU 资源,所以,OBProxy 的 SQL 引擎会解析存储过程当中的 SQL,计算最优策略,将存储过程调用发往最合适的 OBServer 上执行,尽量的减小远程执行次数。OBProxy 也会缓存存储过程的解析结果和路由信息,用以省去每次硬解析带来的 CPU 开销。

复杂类型

咱们在 OceanBase 原有传输协议上从新作了扩展,使得整个链路支持复杂类型的传输。同时,OBProxy新增了复杂数据类型的解析,可以根据复杂类型数据来计算路由和分区裁剪。经过支持复杂类型,能够提升每次传输携带的数据信息,有效减小交互次数,也可以根据复杂类型的数据计算最佳路由策略,尽量的路由到分区更多的 OBServer 上,减小远程执行次数。正是有了 OBProxy 对于数组等复杂类型的支持,才使得客户端能够更好的使用存储过程和 ARRAY BINDING 的能力。

代理资源占用

OBProxy 代理采用多线程异步框架和透明流式转发的设计,保证了数据的高性能转发(单核 5 万 QPS、转发 RT 30~50us),以及自身对机器资源的最小消耗。在 TPC-C 基准测试中,咱们也采用了本地的形式部署到 WAS 端,这样能够最大程度的的减小客户端到代理层的网络开销。在本次测试中,OBProxy代理层部署到 64 台客户端机器上,每台机器上使用到了 10 个 Core,一共占用 640 Cores,仅占总体 CPU 测试成本的 7% 左右,几乎没有使用存储资源,资源占用比例小且支持水平扩容。

持续服务能力

OceanBase 提供了高可用的数据库服务,在出现机器不可用的场景下,不须要有任何人工干预数据库依然可以持续提供服务,在本次 TPC-C 作 Durability 测试强制断电操做中,OceanBase 就表现出无人工干预下的数据库持续服务的能力,大大超出审计员的指望。

OceanBase 针对强制断电这种单机故障场景,OBProxy 有包含黑名单和灰名单两种机制,用于处理 OBServer错峰合并、升级、宕机、启动/中止,网络分区等状态。黑名单采起按期刷新维护,由 OBServer 反馈哪些服务器节点不能提供服务。灰名单则采起主动触发维护,当 OBProxy 转发请求给 OBServer,若是发现 OBServer 返回特定的系统错误,或者 OBServer 在一段时间内有屡次连续不可用,则将该 OBServer 加入灰名单。黑名单中的 OBServer 不会被访问,灰名单中的 OBServer 每隔一段时间会重试一次,检查是否须要洗白,以免长时间将OBServer 降级。经过 OceanBase 这样的机制,可以保障 TPC-C Durability 测试过程当中的数据库持续服务能力。

总结

OceanBase 链路层为客户提供了端到端的完整解决方案,其自研的传输协议可以很是灵活的支持 SQL 特性和交互协议,实现了标准的数据库访问接口并支持 Oracle 兼容模式,能够达到数据库的易用性、高性能、服务持续的最大平衡。后续会持续优化传输协议以达到最高的传输及交互效率,完善数据库访问标准接口,为用户提供一个更为成熟的数据库服务。

欢迎数据库驱动及协议、高性能服务器、数据库中间件感兴趣的有志之士加入咱们团队,一块儿打造世界级的 OceanBase 分布式数据库。简历请发送至 hongwei.yhw@antfin.com

相关文章
相关标签/搜索