蚂蚁金服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基准测试之存储优化


OceanBase 这次 TPC-C 测试与榜单上 Oracle 和 DB2 等其他数据库在硬件使用上有非常大的不同,OceanBase 的数据库服务器使用的是 204+3 台型号是 ecs.i2.16xlarge 阿里云 ECS 服务器,其中 204 台作为 data node,还有 3 台作为 root node,每位读者都可以在阿里云网站上轻松按需购买。如果读者翻看 Oracle 和 DB2 的 TPC-C 测试报告会发现,这些数据库都会使用专用的存储设备,例如前最高记录保持者 Oracle 在 2010 年的测试,使用了 97 台 COMSTAR 专用的存储设备,其中 28 台用来存储数据库的重做日志(Redo Log)。

硬件的差异给软件架构提出了完全不同的挑战,专用的存储设备其内部通过硬件冗余实现了设备自身的可靠保证,数据库软件在使用这样的存储设备时就天然的预设了数据不会丢失。但是,这种方式带来了成本的极大消耗,专用的存储设备的价格都是特别昂贵的。

OceanBase 使用通用的 ECS 服务器提供数据库服务,并且只使用 ECS 机器自带的本地硬盘做数据存储,这是最通用的硬件条件。但是这种方式对软件架构提出了很大的挑战,因为单个 ECS 服务器的不如专用的存储设备可靠性高。这也对 OceanBase 的事务引擎提出了很大的挑战,OceanBase 是在普通的 ECS 服务器上就可以实现 ACID 特性。

TPC-C 测试是对事务 ACID 特性有完整并且严格的要求。下面分别介绍 OceanBase 针对事务 ACID 的特性的解决方案。

Paxos 日志同步保证持久性(Durability)

OceanBase 数据库的事务持久性(Durability)保证是依赖事务重做日志(Redo Log)的持久性来达成的。所有的 Redo Log 会实时强同步到另外两台数据库服务机器上,包含产生 Redo Log 的机器在内,总共会有三台机器在硬盘中持久化 Redo Log。OceanBase 采用了 Paxos 一致性同步协议来协调这三台机器上 Redo Log 的持久化,Paxos协议采用超过半数(也叫“多数派”)成功即算成功的算法(三个副本时,两个成功即超过半数),当其中两台机器完成持久化后,事务即可完成提交,剩下的一台机器的 Redo Log 在通常情况下,也是立即就持久化完成了。但如果这台机器碰巧出现异常,也不会影响事务的提交,系统会在其恢复后自动补齐所缺失的 Redo Log。如果机器永久故障,系统会将故障机器所应负责同步的数据分散给集群内的其他机器,这些机器会自动补齐所缺失内容,并跟上最新的 Redo Log 写入。

使用 Paxos 一致性协议的最大优势是数据持久化和数据库服务可用性(Availability)的完美平衡。当使用三个副本时,任何时候坏掉一个副本时至少还有另一个副本有数据,并且写入还可以持续,因为还剩下两个副本,后续的写入也不受影响。所以,OceanBase 在保证了事务持久性的同时,也大大提升了数据库的连续服务能力。TPC 组织的审计员在现场审计 OceanBase 持久性能力时,在客户端持续产生压力的情况下,从 OceanBase 集群中随意挑选了一台机器做了强制断电操作,发现数据库的数据不仅没丢,数据库不需要任何人工干预还能持续的提供服务,审计员们都很吃惊,并且对 OceanBase 大为赞赏。

依靠自动两阶段提交原子性(Atomicity)

TPC-C 测试模型的五种事务中的“订单创建”和“订单支付”两个事务分别会对很多数据做修改,是其中相对复杂的两个事务。TPC-C 标准对事务的原子性(Atomicity)是强制性的要求,要求一个事务内部对仓库、订单、用户等表格的修改一定要原子的生效,不允许出现只有一半成功的情况。

OceanBase 的数据是按照仓库 ID(Warehouse_ID)拆分到多台机器上的,如果所有的事务都是发生在同一个仓库内部,那么无论数据量有多大,事务的修改都只会涉及一台机器的数据,也就是在一台机器上完成事务提交,这是一种完美的线形扩展的场景。但是这不符合实际的业务场景,大多数的实际业务都会有很多不同维度之间的数据交互。TPC-C 测试标准也是对此认真考虑,所以对于事务操作数据的随机性规则提出了要求,最终要保证产生 10% 的“订单创建”事务和 15% 的“订单支付”事务要操作两个及以上的仓库。在 OceanBase 数据库内,这样就产生了跨机器的事务操作,而这必须使用两阶段提交协议来保证原子性。

OceanBase 会自动跟踪一个事务内所有 SQL 语句操作的数据,根据实际数据修改的位置自动确定两阶段提交的参与者,事务开始提交时,OceanBase 自动选择第一个参与者作为协调者,协调者会给所有参与者发送 Prepare 消息,每个参与者都需要写各自的 Redo Log 和 Prepare Log(也意味着每个参与者各自做自己的 Paxos 同步),等协调者确认所有参与者的 Redo Log 和 Prepare Log 完成后,然后再给所有参与者发送 Commit 消息,再等所有参与者的 Commit 工作完成。整个协议是在事务提交过程中自动完成,对用户完全透明。OceanBase 为每一个两阶段提交事务自动选择一个协调者,整个系统任何机器都可以分担协调者工作,所以 OceanBase 可以将事务处理能力进行线形扩展。

多版本并发控制保证事务的隔离性(Isolation)

TPC-C 标准里要求“订单创建”、“订单支付”、“订单配送”、“订单支付”事务之间都是串行化隔离级别(Serializable)。OceanBase 采用的方法是基于多版本的并发控制机制。事务提交时会申请一个事务的提交时间戳,事务内的修改以新的版本写入存储引擎,并且保证之前版本的数据不受影响。事务开始时会获取一个读取时间戳,整个事务内数据的读取操作只会看到基于读取时间戳的已提交数据。所以,事务的读取不会遇到脏数据、不可重复读数据以及幻读数据。同时,事务的修改会在修改的数据行上持有行锁,保证两个并发的修改相同行的事务会互斥。

OceanBase 的全局时间戳生成器也是由多副本组成,可以独立部署在三台机器上,也可以像这次 TPC-C 评测中一样部署在 root node 机器上,与 root node 共享资源。全局时间戳的三副本是一种极高可用的架构,任何一次时间戳的获取操作都至少在三台机器上的两台获得了确认,所以任意一台机器出现故障,获取时间戳的操作不会有一点影响。

按照 TPC-C 标准,OceanBase 准备了 9 种不同的场景测试有读-读、读-写冲突时事务的隔离性,最终都完美通过了审计员的审计。

一致性保证(Consistency)

在有了上述的事务能力后,OceanBase 可以完美的保证各种数据的一致性的约束。TPC-C 标准里提出了 12 种不同的一致性测试场景在各种测试运行前后对数据库内的数据进行一致性校验。因为 OceanBase 此次测试数据规模庞大,一致性校验的 SQL 需要核对大量的数据,所以一致性校验的挑战在于校验的 SQL 本身运行的效率。基于 OceanBase 的并行查询能力,发挥整个集群所有的计算资源,校验 SQL 的运行时间均缩短了几个数量级,很好的完成一致性功能的审计工作。

复制表

TPC-C 测试模型中有一张商品(ITEM)表,这张表的内容是测试所模拟的销售公司所有售卖的商品信息,包含了商品的名字、价格等信息。“订单创建”事务执行中需要请求这张表内的数据来确定订单的价格信息,如果商品表的数据只存放在一台机器上,那么所有机器上发生的“订单创建”事务都会请求包含商品表的机器,这台机器就会成为瓶颈。OceanBase 支持复制表功能,将商品表设置为复制表后,商品表的数据会自动复制到集群中的每一台机器上。TPC-C 标准不限制数据的副本数,但是不管数据的组织形式,标准里要求事务的 ACID 一定要保证。OceanBase 使用特殊的广播协议保证复制表的所有副本的 ACID 特性,当复制表发生修改时,所有的副本会同时修改。并且,当有机器出现故障时,复制表的逻辑会自动剔除无效的副本,保证数据修改过程中不会因为机器故障出现无谓的等待。复制表在很多业务场景中都有使用,例如很多业务中存储关键信息的字典表,还有金融业务中存储汇率信息的表。

总结

OceanBase 坚持在普通的PC服务器上实现高可靠、高可用、高性能、可扩展的数据库,实现了用廉价硬件和云计算的部署环境提供最关键的数据库服务的能力。后续,我们会持续优化事务处理的性能,丰富事务的各种功能特性,为用户提供更好用的数据库服务。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零钱通OOP编程

零钱通OOP编程 package com.hspedu.smallchange.oop;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;/****该是完成零钱通的各个功能类* 使用OOP(面向对象编程)* 将各个功能对应一个方法*/public class SmallCha…

使用dubbo后尽量不用要@Service可能引起冲突

如下有几个包都含有Service dubbo最新版本2.7.8,已经把Service换成DubboService 示例实现类 package com.dubboprovider.service;import org.apache.dubbo.config.annotation.DubboService; import org.springframework.stereotype.Component;//zookeeper 服务注…

面试中遇到这 3 个SQL问题,最容易掉坑里!

作者 | Nathan R译者 | 天道酬勤,责编 | Carol封图 | CSDN下载自视觉中国在本文中,作者将介绍来自3个在技术面试中的真实的SQL问题,这些问题都是在实际公司进行技术筛选时提出的。最常见的读者问题:我应该如何准备SQL面试&#xf…

云原生数据库POLARDB专场“硬核”解析

POLARDB是阿里巴巴自主研发的云原生关系型数据库,目前兼容三种数据库引擎:MySQL、PostgreSQL、Oracle。POLARDB的计算能力最高可扩展至1000核以上,存储容量可达100TB。 POLARDB融合了商业数据库稳定、可靠、高性能的特征,同时具有…

K8s 从懵圈到熟练 – 集群网络详解

导读:阿里云 K8S 集群网络目前有两种方案:一种是 flannel 方案;另外一种是基于 calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似,不同的地方在于 terway 支持 Pod 弹性网卡,以及 NetworkPolicy 功能。本…

java12/6作业1

作业1 package com.hspjava.Day01;public class Homework01 {//定义Person类{name,age,job},初始化Person对象数组,有3个person对象,并按照age从大到小进行排序public static void main(String[] args) {//初始化Person 对象数组,有3个perso…

使用dubbo后尽量不用要@Reference可能引起冲突

使用dubbo后尽量不用要Reference可能引起冲突 dubbo最新版本2.7.8,已经把Reference换成DubboReference

年薪高达30万,人才缺口40万,这个神仙职业今年太火了!

我见过市面上很多的 Python 讲解教程和书籍,他们大都这样讲 Python 的:先从 Python 的发展历史开始,介绍 Python 的基本语法规则,Python 的 list, dict, tuple 等数据结构,然后再介绍字符串处理和正则表达式&#xff0…

不吹不黑,今天我们来聊一聊 Kubernetes 落地的三种方式

出身豪门、大厂背书的 Kubernetes 项目自 2014 年 6 月开源以来,在众多厂商和开源爱好者的共同努力下迅速崛起,时至今日已成长为容器管理领域的事实标准。凭借超前的设计理念、开放的参与门槛、国内外大厂和开发者的大力支持,它的成功不言而喻…

当我们在聊 Serverless 时你应该知道这些

作者 | 杨泽强(竹涧)阿里云技术专家 说起当前最火的技术,除了最新的区块链、AI,还有一个不得不提的概念是 Serverless。Serverless 作为一种新型的互联网架构,直接或间接推动了云计算的发展,从 AWS Lambda…

nacos集成dubbo实现远程服务调用

文章目录1. 模块划分设计2. 创建父工程3. 创建公共接口4. 服务端5. 客户端6. nacos7. 测试8. 码云开源地址1. 模块划分设计 模块名工程名端口父工程nacos-dubbo无服务端nacos-dubbo-provider9000消费端nacos-dubbo-consumer8000公共接口nacos-dubbo-interface无 2. 创建父工程…

如何在容器内高效编程?

作者 | Daniel Lemire译者 | 苏本如,责编 | 郭芮头图 | CSDN 下载自东方IC出品 | CSDN(ID:CSDNnews)以下为译文:我个人的编程环境中包括了一些服务器、笔记本电脑和台式电脑。我的服务器是在不同的时间购买和配置的&am…

蚂蚁金服OceanBase挑战TPCC | TPC-C基准测试之存储优化

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

(企业案例)Nacos Config 进阶使用

文章目录一、SpringBoot 使用 Nacos Config 实现多环境切换1. 现象2. 引入依赖3. 添加bootstrap.yaml配置文件4. 配置对应关系图5. 文件格式简述6. 启动nacos7. 添加生产配置8. 添加测试controller9. 启动Springboot工程并观察到如下日志则为成功10. 浏览器验证11. 调整激活环境…

OceanBase如何获得TPC-C测试第1名?

阿里妹导读:TPC-C是TPC组织(国际事务性能委员会)制定的关于商品销售的订单创建和订单支付等的基准测试标准,是数据库联机交易处理系统的权威基准测试标准。 蚂蚁金服自研的分布式关系数据库OceanBase获得TPC-C测试第一名后&#…

简单查询(DQL)

简单查询(DQL) 1. 查询一个字段? ​ select 字段名 form 表名; ​ 其中要注意: ​ select 和 form 都是关键字 ​ 字段名和表名都是标识符 强调: 所有SQL语句都是“;”结尾 2.查询两个字段&#xf…

由一次磁盘告警引发的“血案”——你知道 du 和 ls 区别吗?

来源 | 程序猿石头责编 | Carol封图 | CSDN下载自视觉中国图来源于 SkyPixel知道为什么会有上面的结果吗?什么又是稀疏文件?这篇文章将为你揭秘。问题背景确切地说,不是收到的自动告警短信或者邮件告诉我某机器上的磁盘满了,而是某…

如何优化大规模推荐?下一代算法技术JTM来了

阿里妹导读:搜索,推荐和广告是互联网内容提供商进行价值创造的核心业务,在阿里巴巴的电子商务交易平台上,搜索,推荐和广告业务同样具有举足轻重的意义和价值。现在,阿里推荐技术又双叒优化了,新…

Sentinel 基于Nacos规则持久化-推模式

文章目录一、推模式架构图二、原理简述2.1. 组件版本关系2.2. 控制台推送规则三、Sentinel控制台改造3.1. 下载源码3.2. 修改pom3.3. 重要文件复制3.4. 注册地址修改3.5. 请求实例需改3.6. 菜单新增四、编译 & 启动4.1. 先启动nacos4.2. 编译打包4.3. 创建微服务 &&…

都听我的,会养猪种菜的工程师最帅了!

来了!今天,阿里数字农业事业部在黑龙江首次亮相,并且定了一个小目标:到2022年,阿里涉农产品全年网络销售额破4000亿元。 黑龙江省牡丹江市的阿里巴巴响水大米种植基地,又到了收割季 数字农业事业部将建立产…