小蚂蚁说:

你们都很关心的 “OB双11大促实战分享” 专题来啦!本系列将为你系统性的介绍OceanBase支撑蚂蚁双11背后的技术原理和实战分享。从平台到架构,再到实现,一起来探索蚂蚁双11这场神秘的技术之旅吧!

​背景

伴随着蚂蚁业务的蓬勃发展,特别是每年双11大促不断创造新的高峰, 交易支付核心链路提出了未来实现百万笔支付/秒的能力 。为了实现这个宏伟目标,特别是提高数据库层面分布式扩展能力,如原生sharding/分布式事务优化,OceanBase 2.0分布式数据库应运而生。

百万支付

传统数据库扩容方案,主要是依赖分库分表拆分进行水平扩容,蚂蚁数据库初期也是同样思路,通过LDC单元化改造,核心表按用户UID维度拆分成百库百表。

但是随着业务发展,特别是2017年的双11大促,峰值需求已经远远超过单库单机的最大容量。针对这个问题,我们使用弹性架构,即在大促前,新增两套弹性数据库,多套库共同支持大促峰值。弹性架构虽然解决了大促容量需求,但是也存在一些缺陷,业务在数据路由、后期维护及数据配套设施都非常复杂繁琐。有没有更优雅的分布式数据库解决方案,即只使用一个库,就可以支持百万甚至更高的支付峰值,OceanBase 2.0分区提供了完美的解决方案。

OceanBase 2.0整体架构

原理分析

OceanBase 2.0分区方案思路和传统的分库分表拆分一样。我们在交易支付核心库上,在原有百库百表的基础上继续按用户UID进行更深层次拆分,每个分表再拆分成多个partition,应用端只看到一张表,在用户无感知的前提下把数据拆分到无限多的机器上,突破单机性能瓶颈,自动负载均衡,从而实现百万支付的能力。

同时为了极致性能,OceanBase 2.0提供了partition group功能,将业务使用的多张逻辑表(table_1、table_2、... table_n),按共同的partition聚合在同一台服务器上面,从而避免了分布式事务带来的额外开销。

OceanBase 2.0分区方案

关键点:

  • APP端请求SQL,带上包含分区的字段—UID信息(如payment_id列)。
  • SQL如果没有分区信息,则在OBServer端并行计算优化。
  • OBClient负责分区计算及路由,确保第一跳准确定位到对应分区所在服务器,避免远程执行。
  • OBServer端基于生成列partition_id进行内部分区,不侵入业务。
  • OBServer端约束描述多维度分区,实现分区裁剪功能。

优点:

  • 业务友好:不改变SQL语义,应用代码不感知分区信息。
  • 架构通用:约束功能,实现分区裁剪;OBServer提供兜底访问能力。
  • 高性能低成本:使用低配置服务器,自动负载均衡,资源利用率高。

OceanBase 2.0性能优化

  • 分布式事务消除:partition group方式,事务涉及所有表的partition按照分区键存储至同一物理机。
  • 两阶段提交协议优化:结合事务与日志,事务prepare成功后内存不用持久保存状态,按需从日志中查询;commit状态持久化转换成后台批量完成。
  • Commit异步化:异步化后Worker不等待继续执行队列中下一个请求,日志持久化成功后会异步回调。
  • 内存分配器优化:组织了两层映射关系,既要提升性能又要支持大量分区。
  • 存储优化:数据编码技术实现高压缩。

优化结果:

整体性能OceanBase 2.0版本较OceanBase 1.4版本性能提升50%,存储空间节省30%。

总结

2018天猫双11全球狂欢节成交额超过2135亿,OceanBase 2.0成功经受住了考验,全面支撑了支付宝核心链路 ,平稳抗住0:00:00时的峰值压力,夯实三年战略“百万支付”的底盘能力。

OceanBase 2.0还有很多重要特性,比如分布式全局索引、分布式全局一致性快照、分布式存储过程、索引实时生效、Flashback闪回功能等,这些新功能将强有力支持企业不同业务场景下的持续创新。

加入我们

【数据库智能化开发】

岗位描述:

1、负责蚂蚁金服数据库智能运维平台应用架构设计和实施落地,使系统体系化并具有前瞻性,能快速发现异常和风险隐患,自动识别原因并修复故障源/风险点,实现self-healing、self-scaling、self-tuning的自治数据库目标;

2、负责构建数据库统一技术风险、业务容量和稳定性的数据模型,以数据为支撑驱动诊断、容量、高可用、业务最佳实践等核心问题的数据库智能运维发展;

3、独立完成大型项目的系统分析设计,并负责核心模块研发,完成系统Code Review的任务,提供相关性能以及安全的建议。

【数据库平台前端开发】

岗位描述:

负责蚂蚁金服数据库DevOps平台产品的前端研发,通过专业的前端技术能力为整套数据库产品提供优秀的前端解决方案。

【数据库平台后端开发】

岗位描述:

1、负责蚂蚁金服数据库基础平台、容器化、高可用体系等领域的平台研发;

2、通过平台化思路,持续优化系统维护工作效率,把控技术风险,用工程的思路解决遇到的问题;

3、负责蚂蚁金服数据库智能平台应用架构设计和系统实施,使系统体系化并具有前瞻性,能快速发现业务风险和及时管控;独立完成大型项目的系统分析设计,并负责核心模块研发;负责完成系统Code Review的任务,确保相关代码的有效性和正确性,并能够通过Code Review提供相关性能以及安全的建议。

【数据库SRE】

岗位描述:

1、负责数据库高可用平台体系、基础设施的开发和建设,追求100%的服务持续可用、秒级故障恢复能力;

2、负责数据库成本优化,通过新技术、新产品、新方案全方位地优化系统性能;

3、负责数据库相关平台和工具产品的建设,持续改进业务研发和系统维护效率,用工程的思路解决遇到的问题;

4、负责数据库架构设计,基于高可用、高性能、防资损等视角,与业务团队一起进行数据架构设计;

5、负责公司重大业务活动(如双11/双12)数据库保障,致力于让用户感觉丝般顺滑;

6、负责数据库新技术的探索及落地,如存储计算分离、数据库容器化等。

可直接发送简历到 qijie.tianqj@alibaba-inc.com,我们等的就是你!

OceanBase 2.0让百万支付不是梦?的更多相关文章

  1. 性能跃升50%!解密自主研发的金融级分布式关系数据库OceanBase 2.0

    小蚂蚁说: 相信大家对蚂蚁金服自主研发的金融级分布式关系数据库OceanBase的故事不再陌生了.在刚刚过去的2018年天猫双11中,成交额2135亿再次创造了新纪录,而支撑今年双11的支付宝核心链路 ...

  2. SpringBoot2.0小程序支付功能实现weixin-java-pay

    SpringBoot2.0小程序支付功能实现weixin-java-pay WxJava - 微信开发 Java SDK(开发工具包); 支持包括微信支付.开放平台.公众号.企业微信/企业号.小程序等 ...

  3. 从0开始搭建精灵宝可梦的检测APP

    从0开始搭建精灵宝可梦的检测APP 本文为本人原创,转载请注明来源链接 环境要求 Tensorflow1.12.0 cuda 9.0 python3.6.10 Android Studio Anaco ...

  4. phonegap支付宝2.0移动快捷支付插件IOS版

    坑爹的支付宝,一两年都没有更新sdk了,这两天突然更新sdk,而且更新的变化特别大,所以只能对之前的支付宝快捷支付插件重新写了一遍. 这样既顺应了支付宝的更新,同时也支持了ios8. 废话少说,集成过 ...

  5. yii2 支付宝支付教程 [ 2.0 版本 ]

    yii2 支付宝支付教程 [ 2.0 版本 ] 支付宝支付流程个人理解大致就这三步1.前台页面将支付信息数据通过立即支付按钮 ajax提交到订单处理层2.在订单处理层引用支付宝的接口 将支付数据写入 ...

  6. 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路

    本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...

  7. (转载)(收藏)OceanBase深度解析

    一.OceanBase不需要高可靠服务器和高端存储 OceanBase是关系型数据库,包含内核+OceanBase云平台(OCP).与传统关系型数据库相比,最大的不同点, 是OceanBase是分布式 ...

  8. 微信公开课(北京站)速记 微信、微信支付、O2O的定义与关联

    本文为4月29日微信公开课(北京站)微信产品部演讲全文速记,讲述了微信官方对微信.微信支付.O2O的定义与关联等问题的看法与观点. 作者:微信产品部 刘涵涛 吴毅 去年夏天有一个全民打飞机的盛况,这实 ...

  9. OceanBase迁移服务:向分布式架构升级的直接路径

    2019年1月4日,OceanBase迁移服务解决方案在ATEC城市峰会中正式发布.蚂蚁金服资深技术专家师文汇和技术专家韩谷悦共同分享了OceanBase迁移服务的重要特性和业务实践. 蚂蚁数据库架构 ...

随机推荐

  1. CentOS从源码安装Erlang

    ### 首先下载资源 wget http://erlang.org/download/otp_src_18.3.tar.gz ### 解压 .tar.gz ### 安装依赖包 yum install ...

  2. js中触摸相关变量touches,targetTouches和changedTouches的区别

    touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前事件的触摸点的列表 通过一个例子来区分一下触摸事件中 ...

  3. C和C指针小记(十七)-使用结构和指针-链表

    1.链表 链表(linked list)即使是一些包含数据的独立数据结构的(Node)集合. 链表中的每个节点通过链或指针链接在一起. 程序通过指针访问链表中的节点. 节点通常是动态分配的,但也有由节 ...

  4. TZOJ:区间问题

    描述 有n项工作,每项工作分别在 si时间开始,ti时间结束.对于每项工作你选择参与与否,如果选择 了参与,那么自始至终就必须全程参与.参与工作的时间段不可以重叠(即使是开始的瞬间和结束的瞬间重叠也是 ...

  5. 接口测试工具-Jmeter使用笔记(九:跨线程组传递变量)

    使用场景: 请求API需要授权令牌,但是授权令牌只需要获取一次,即可调用服务器上其他业务接口. 所以我想要把授权操作放在单独的一个线程,业务流放在其他线程. 这就需要我把从授权线程获取的令牌传入业务流 ...

  6. Python3学习之路~5.9 xml处理模块

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,以前在json还没诞生的时候,大家只能选择用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...

  7. ubuntu 使用dpkg手动安装deb包时发生循环依赖的解决办法

    将循环依赖的所有包放到同一个命令行里一起安装,如: sudo dpkg -i libnss3-nssdb_3.28.4-0ubuntu0.14.04.4_all.deb libnss3_3.28.4- ...

  8. HttpWebRequest请求http1.1的chunked的解析问题记录

    问题:我的请求获取不到URL对应的内容(换个浏览器可以). 第一步对比wirshark截包看HTTP请求头,发现我这缺失一部分请求头. 对着官方文档添加即可.https://msdn.microsof ...

  9. OAuth2认证和授权入门

    OAuth2四种授权方式 四种授权方式 OAuth 2.0定义了四种授权方式. 密码模式(resource owner password credentials) 授权码模式(authorizatio ...

  10. sublime-text3按tab跳出括号

    功能 通过按tab自动跳过右括号,右引号,虽然也可以按右方向键,但离得太远按起来太麻烦 在首选项->按键绑定里添加: { "keys": ["tab"], ...