TPC-C基准测试之链路层优化

作者:易鸿伟 闫建良 王光树

在 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) 和 OceanBase Server(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 链路上的 组件。

链路性能优化

在 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 能 力:Prepared Statement 是 一 种 二 进 制 的 请 求交互协议,一次 PS SQL 文本传输,多次执行,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~50 us),以及自身对机器资源的最小消耗。 在 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 兼容模式,可以达到数据库的易用性、高性能、服务持续的最大平衡。后续 会持续优化传输协议以达到最高的传输及交互效率,完善数据库访问标准接口,为用 户提供一个更为成熟的数据库服务。

Image placeholder
seamong
未设置
  98人点赞

没有讨论,发表一下自己的看法吧

推荐文章
TPC-C解析系列03_TPC-C基准测试之SQL优化

TPC-C是一个非常严苛的基准测试模型,考验的是一个完备的关系数据库系统全链路的能力。这也是为什么在TPC-C的榜单前列,出现的永远只是大家熟知的那几家在业界有着几十年积累、从关系数据库理论开始发展就

TPC-C解析系列05_TPC-C基准测试之存储优化

TPC-C规范要求被测数据库的性能(tpmC)与数据量成正比。TPC-C的基本数据单元是仓库(warehouse),每个仓库的数据量通常在70MB左右(与具体实现有关)。TPC-C规定每个仓库所获得的

TPC-C解析系列04_TPC-C基准测试之数据库事务引擎的挑战

OceanBase这次TPC-C测试与榜单上Oracle和DB2等其他数据库在硬件使用上有非常大的不同,OceanBase的数据库服务器使用的是204+3台型号是ecs.i2.16xlarge阿里云E

ASC19最新战况:北航打破HPL基准测试赛会纪录!

  今天(4月23日)是全球瞩目的ASC19全球总决赛第三天,经过前两天的系统搭建与调试工作后,20支队伍进入了正式竞赛阶段,向总冠军宝座发起最后冲刺。  根据赛程,今天所有参赛队伍需要完成的项目包括

TPC-C解析系列01_TPC-C benchmark测试介绍

作者:阳振坤2019.10导语:自从蚂蚁金服自研数据库OceanBase获得TPC-C测试第一名后,引起了行业内外大量关注,我们衷心的感谢大家对OceanBase的支持与厚爱,也虚心听取外界的意见和建

TPC-C解析系列02_OceanBase如何做TPC-C测试

导语:蚂蚁金服自研数据库OceanBase登顶TPC-C引起业内广泛关注,为了更清楚的展示其中的技术细节,我们特意邀请OceanBase核心研发人员对本次测试进行技术解读,共包括五篇:1)TPC-C基

一个多业务、多状态、多操作的交易链路?闲鱼架构这样演进

前言双十一刚刚结束,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔。在闲鱼2000万DAU,交易数额同样增长迅速的今天,我们如何保障交易链路的稳定与快速支撑业务?这篇文章从客户端开发的角度,介

详解 | 阿里怎么做双11全链路压测?

导读:全链路压测是阿里的首创,本文将从工作内容、操作过程、运行总结等多个方向来介绍下阿里内部典型电商活动(如双11准备),以给大家展示一个完整的压测流程,帮助更多的企业和用户更好的完成性能测试。前言关

S.O.L.I.D: PHP 面向对象设计的五个基准原则

S.O.L.I.D是首个5个面向对象设计(OOD)准则的首字母缩写,这些准则是由RobertC.Martin提出的,他更为人所熟知的名字是UncleBob。 这些准则使得开发出易扩展、可维护的软件变

HPC CHINA 2019:面向E级计算时代的HPC/AI协同设计

蓝天飘白云,牧场奶茶香。蒙古大营雄风在,琴声传远方。骑马又滑沙,豪饮河套王。敖包相会歌一曲,笑发少年狂。中国一年一度高性能计算领域的盛会——全国高性能计算学术年会(HPCCHINA2019)在内蒙古呼

我是怎么倒在美团第三轮面试之下的

说实话,之前我从来没想过能有大厂会给我机会让我去面试,一个专科生,不是科班出身,这些硬性条件好像都没有一个符合的,但是却获得了美团的面试机会。很庆幸自己获得那次机会,也让我深刻体会到了面试大厂,到底需

清华退学王垠 VS 阿里P10 赵海平,这场面试之战到底谁赢了?

知乎上有一个话题:如何评价阿里P10赵海平对王垠的面试?最近成了热帖,这下赵海平跟王垠这次是真的火了。由于本事件像电影的情节一环扣一环,文章比较长,直接一句话说下该事件始末:网红王垠受邀面试阿里P9岗

基于Tcp协议与基于Http协议的RPC简介笔记

前言:之前对于RPC方面的学习多限于对RMI原理的学习,直到今天在看陈康贤前辈的《大型分布式网站架构-设计与实践》这本书的时候,才发现原来RPC可以基于TCP协议也可以基于HTTP协议(这里所说的TC

双11、TPC-C?OceanBase的征程在哪里?

蚂蚁金服自研的分布式关系数据库OceanBase登顶TPC-C一个月后,便迎来了2019年双11大考,团队相信“TPC-C只是双11的虚拟预演,双11才是一次真实场景的TPC-C。”OceanBase

如何理性看待蚂蚁金服OceanBase刷新TPC-C纪录

OceanBase这两天霸屏朋友圈!一派是浮夸的宣传,超越Oracle,世界第一,过度解读,全面否定对手,引起了技术圈内人士的反感,因为刷新TPC-C纪录并不能说明OceanBase现在就超越了Ora

MySQL 亿级数据数据库优化方案测试-银行交易流水记录的查询

作者:逸宸a链接:https://www.jianshu.com/p/cbdef47fb837对MySQL的性能和亿级数据的处理方法思考,以及分库分表到底该如何做,在什么场景比较合适?比如银行交易流水

零基础学测试 2 - 进一步理解 Laravel 的测试与 PHP Unit 的关系

细心的读者可以发现,上一讲中创建的用例继承的是PHPUnit的测试基类。

Testin用iTestin开启下一代测试,测试行业为什么要“重新来过”?

测试,其实并不是一个新话题。从有软件开发开始,就有测试,最早的测试就是找Bug。后来,自动化测试、云测试、众包测试的模式开始成为流行趋势,今天又迎来以智能化为核心的下一代测试。但是,“测试”从简单的软

在 [slim] 中伪造 Request 来进行你的 HTTP 测试吧

代码需要做HTTP测试,Laravel中有自带这方面的功能。现在使用slim就得自己动手丰衣足食。 网上找了许多例子,关于这方便的比较少。然后就想到了查看Laravel的源码 看了一下,发现其实是自己

如何使网站支持https访问?nginx配置https证书

购买SSL证书要想使用https访问你的网址,首先得拥有颁发的SSL证书。我这里申请的是阿里云免费的,有效期为一年,过期后再重新申请。申请SSL证书购买后,可在阿里云的搜索框输入证书关键字进入到控制台

Python可视化 | Seaborn5分钟入门(二)——barplot&countplot&pointplot

微信公众号:「Python读财」如有问题或建议,请公众号留言Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matp

opcode 操作数 5 中不同的类型

zend_op_array.opcodes指向指令列表,具体每条指令的结构如下: struct_zend_op{//*opline*opcodes constvoid*handler;//指令执行ha

GoWeb教程_08.4. RPC

前面几个小节我们介绍了如何基于Socket和HTTP来编写网络应用,通过学习我们了解了Socket和HTTP采用的是类似"信息交换"模式,即客户端发送一条信息到服务端,然后(一般来说)服务器端都会返回

gRPC-Go 和 Java 的一次 HelloWorld(十)

都说grpc是跨语言的一个rpc框架,当团队内部有多种流行编程语言时,那么grpc可以为他们提供通信,今天我们就通过一个HelloWorld来看看Java和Go是怎么通信的,一起实践吧,只有亲身实践才

PHP Opcache 注意事项以及调优

从PHP5.5开始,Opcache扩展是核心的一部分,增加了对PHP脚本的字节码缓存的支持。对于动态语言(例如PHP),字节码缓存可以显著的提高性能,因为它可以确保脚本仅被编译一次。 Opcache扩