深度| 每秒1.4亿次!再度刷新TPS记录的PolarDB如何应对双11“尖峰时刻”?

2020年是云原生数据库PolarDB全面支撑天猫双十一的第二年,天猫交易、买家、卖家以及物流等系统在双十一期间基于PolarDB为亿万客户提供了顺滑的体验。同时,PolarDB还刷新了去年由自己创造的数据库处理峰值(TPS)纪录,今年TPS峰值高达1.4亿次/秒,较去年提升了60%。

PolarDB是阿里自研的云原生数据库品牌, 通过独有的存储计算分离、分布式共享存储技术,解决了传统RDBMS容量有限、扩缩容时间长等问题, 在性能、容量、弹性、以及可用性上都有很大的突破:
 存储容量可达100TB,单库可扩展到16个节点,满足企业级大数据存储需求。
 高性能、高弹性、低成本,一写多读,分钟级扩缩容
 多AZ高可用,数据高可靠性。跨AZ六副本,故障快速容灾转移
PolarDB今年下半年发布了MySQL 5.7的兼容版。至此PolarDB成为全球唯一一家兼容 MySQL 所有在役版本的云数据库,可以覆盖更多的业务场景

性能优化

性能对于双十一大促来说是永恒的主题。在天猫的核心交易链路的数据库,在零点峰值场景中,会有大量的数据读写。而每一年随着峰值的增长,数据库会遇到更严峻的挑战。在过去的几年中,随着数据库硬件的不断进化,我们为PolarDB重点优化了索引结构、I/O子系统、锁系统以及事务系统来完成并发性能的提升。

首先是索引结构。众所周知传统的InnoDB 索引在这样的场景下会遇到频繁的页面分裂导致的并发瓶颈。所有的对索引结构的修改都要排队串行执行。为了解决这个问题, PolarDB引入了新的索引结构来替代传统索引,细化索引结构变更时的并发粒度,提升了接近20%的读写性能。新的索引结构使得原本需要将所有涉及索引分裂的页面加锁直到整个分裂动作完成后才释放的逻辑变成逐层加锁。这样原本被索引页面分裂阻塞的读操作会有机会在整个分裂动作中间进来:通过对每个节点增加一个后继链接的方式,使得在分裂的中间状态也可以完成对数据页面的安全的访问,从而提高读取性能。

640.png

其次是IO子系统。由于PolarDB是采用的用户态文件系统, 因此需要有一套对应的IO系统来确保对底层分布式存储的高效访问, InnoDB原有的AIO策略,是将所有异步IO请求按照目标地址进行组织存放在同一个IO数组中,方便将目标地址连续的小IO合并成大IO以提升IO的吞吐,但是在分布式存储的场景下连续的大IO操作,会使得同一时刻,只有一个或少量存储节点处在服务状态,其他的存储节点处于空闲状态,此外,分布式存储在高IO负载的场景中会出现网络中的Inflight IO较多的情况,IO任务数组中添加I和移除请求的开销都很大。为此PolarDB专门对IO系统进行了重新的设计,主要包括:合理的选择IO合并和拆解,充分利分布式存储的多节点优势;建立状态有序的IO服务队列,减少高负载下的IO服务开销。新的子系统让PolarDB在写入和读写混合的场景下性能和稳定性都得到了显著的性能提升。
640-2.png

再接下来是锁系统的优化。 PolarDB和MySQL一样都是采用MVCC的方式看来做事务之间的并发控制, 但是在处理写请求和写请求之间的并发时是通过两阶段的锁来做保护的。大量且频繁的插入更新删除带来了锁系统的负担和并发的瓶颈。 因此PolarDB采取了Partition Lock System的方式,将锁系统改造成由多个分片组成,每个分片中都有自己局部的并发控制,从而将这个瓶颈打散。尤其是在这种大压力的写入场景下明显的提升写入性能。

640-3.png

最后是事务系统。 PolarDB中支持Snapshot Isolation的隔离级别,通过保留使用的Undo版本信息来支持对不同版本的记录的访问,即MVCC。而实现MVCC需要事务系统有能力跟踪当前活跃及已经提交的事务信息。在之前的实现中每当有写事务开始时,需要分配一个事务ID,并将这个ID添加到事务系统中的一个活跃事务列表中。当有读请求需要访问数据时,会首先分配一个ReadView,其中包括当前已分配最大的事务ID,以及当前这个活跃事务列表的一个备份。每当读请求访问数据时,会通过从索引开始的指针访问到这个记录所有的历史版本,通过对比某个历史版本的事务ID和自己ReadView中的活跃事务列表,可以判断是不是需要的版本。然而,这就导致每当有读事务开始时,都需要在整个拷贝过程对这个活跃事务列表加锁,从而阻塞了新的写事务将自己的ID加入。同样写事务和写事务之间也有访问活跃事务列表的冲突。从而活跃事务列表在这里变成一个明显的性能瓶颈,在双十一这种大压力的读写场景下尤为明显。对此,我们将事务系统中的这个活跃事务列表改造成无锁Hash实现,写事务添加ID以及读事务拷贝到ReadView都可以并发进行。大大提升了性能。

全球数据库技术

诸如AliExpress这一类针对海外消费者的购物大促,业务遍及各个大洲和国家等等。因此数据库的异地可读,数据同步有非常高的要求。在过去DTS承载了区域间数据同步任务,DTS订阅了二进制日志然后分发到不同的区域并进行高速应用以实现区域间数据状态一致性。今年PolarDB集成了全新的全球数据库技术来解决跨域访问以及容灾的问题,PolarDB全球数据库(PolarDB Global Database Network,PolarDB-GDN)采用了数据库物理日志异步复制的方案。但是达成以上目标需要解决几个关键难点:高网络延迟下的数据同步问题和跨Region的数据读写问题。针对这两点问题,PolarDB-GDN通过高并发流水线技术将同步速度提升7倍,将数据跨大洲同步延迟控制在2秒内。 全局读写分离技术结合多级别的一致性能力, 让业务不用做任何的改造的前提下降低整体的访问延迟。
640-4.png

热缓存技术

双十一对数据库的可用性要求非常高,核心应用在大促期间处于高负载的状态,长时间高负荷的运行不可避免会存在单一节点的故障,如何能快速恢复成为了一个重要的课题。过去的节点故障恢复需要经历相当长的时间的恢复时间,而重启拉起后的系统还需要缓存预热后才能达到最佳访问性能。

PolarDB今年在存储计算分离架构上继续往前迈进一大步,实现了计算和内存的分离。通过将内存缓冲池从计算节点剥离,让计算节点状态最小化 。计算节点重启后可以快速恢复到重启前的状态,避免大量耗时的缓存预热。传统数据库的错误恢复需要检查点开始扫描所有的redo日志、回放日志、事务恢复等步骤,该过程涉及大量磁盘IO、CPU计算等工作量,其时间往往很长。使用了热缓存技术的PolarDB在计算节点崩溃后,需要恢复的是缓存可能处于不一致的状态,如部分尚未修改完成的缓存页面以及内存结构等。而在CPU缓存分离的架构下只需要新的计算节点来根据各种控制信息和redo日志将这些被污染的内存恢复到一致的状态。因为无需重新构建缓存池,修复工作量小。在常规读写负载下,重启后的数据库最大吞吐下降到原来的5%以下,并在200秒后逐渐恢复正常水平,而利用了热缓存技术的实例几乎无任何性能下降。

跨AZ容灾能力

双十一的核心业务必须要能够跨AZ的容灾, PolarDB提供了跨AZ容灾RPO为0的方案。PolarDB 在存储层(PolarStore)提供3副本的同时,还可以通过自研的 X-Paxos 库提供跨节点、跨机房、跨 AZ 级别的数据同步能力,提供 RPO = 0 的容灾解决方案。这个方案利用 PolarDB 经过多年验证的物理复制技术和 X-Paxos 一致性协议库,提供高可靠、低延迟的数据复制技术。相比于 RDS/MySQL 的逻辑日志复制,PolarDB 在节点切换时,受大事务/DDL 的影响更小,RTO 小于1分钟。同时,这个方案在保证数据冗余的同时,尽量减少部署成本。PolarDB 跨AZ版可以部署Leader,Follower 和 Log 节点。其中 Log 节点只记录日志,不参与选主,不存储数据,部署成本相比于现有架构只增加了 active redo log ,显著降低了部署成本。

并行查询增强

双十一不仅是消费者的盛筵, 也是众多卖家的狂欢。 卖家经常需要实时的查询自己的销售数据以及做一些快速的分析。PolarDB拥有查询引擎,在众多场景下能满足一些即时查询的需求,它充分利用硬件多核优势,并基于COST自动选择并行查询引擎,显著提升了查询性能。今年PolarDB在该方向并没有停止脚步,利用并行查询引擎了优化更多的应用场景。在大规格的实例中, 并行的提升效果尤为显著。

在今年, PolarDB的并行查询新增加了众多场景的覆盖, 有联合(Union)子查询的并行优化,扩展并行查询引擎对联合(Union)子查询的支持;派生表(Derived Table)的并行优化;用户自定义临时表的并行优化;Count的并行优化;Limit的并行优化;条件下推优化,减少数据汇总代价;HASH JOIN 的并行优化,同时优化算子和执行的并行度。

除此之外, POLARDB对GROUP BY / Distinct / SEMI-JOIN / 常量表以及包含Window函数的子查询也做了并行优化,通过利用更多的CPU资源, 有效降低了这些场景下的查询耗时。在标准的TPC-H场景下,POLARDB的并行查询框架取得了非常好的表现。

640-5.png

并行schema变更

在阿里的业务中大量的POLARDB承载了超大规模的数据,然而业务的需求是实时变化的。过去对这些大表做DDL会持续数小时甚至数天,如此之高的延迟是难以容忍的。以创建二级索引为例,过高延迟的DDL操作会阻塞后续依赖新索引查询的DML操作。DDL操作会消耗CPU/Memory/IO资源,对业务DML带来一定的影响,因此用户往往在业务低峰期进行schema变更,但是如果不能确保变更在业务低峰期之内完成会对业务的稳定性产生严重的影响。

我们认为大表DDL运行缓慢的根本原因在于传统的DDL操作是针对单核和传统硬盘设计的。随着多核处理器的日益发展和高速存储的普及,DDL的并行化是可以取得非常好的效果的。

Online DDL分为创建临时表扫描拷贝全量数据加上增量应用期间的变更等几个主要阶段。以增加索引为例需要扫描主键所有记录,生成新的二级索引记录,写入磁盘文件中;对所有二级索引记录进行排序,写入磁盘文件;将有序的二级索引记录插入到新的二级索引中。

POLARDB可以对索引树进行并行扫描、并行多路归并的Merge Sort、并行的Bulk Load索引。 在8core32G规格的实例中针对CPU Bound 和 IO Bound的场景分别进行了测试,都可以达到6-13倍的速度提升。

640-6.png

总结

今年的双十一对PolarDB在性能和功能上提出了更高的要求。 PolarDB在并发性能、跨域、弹性以及可用性上都更进了一步,POLARDB不仅承载着整个阿里集团的实时OLTP数据业务,而且在云上为更为广大的客户提供服务。 我们的目标是将云原生的数据库技术普惠所有的企业客户,帮助客户更好的实现业务价值。

 

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

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

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

相关文章

Hologres是如何完美支撑双11智能客服实时数仓的?

简介: 本文重点介绍Hologres如何帮助阿里巴巴客户体验部(CCO),构建集实时化、自助化、系统化于一体的用户体验实时数仓,完美助力双11场景,支持上千服务大屏,削峰30%,节约成本近30%。…

云原生与AI时代的存储该是什么样?新华三发布全NVMe智能闪存与智慧中枢数据平台

编辑 | 宋慧 出品 | CSDN云计算 7月8日,紫光股份旗下新华三集团以“智以致用速达未来”为主题,召开“2021新华三存储新品发布会”,重磅推出云智原生的新一代端到端NVMe闪存存储H3C/HPE Alletra、分布式融合存储H3C UniStor X10000&#xff0…

java客户端程序用什么自动化测试_五大Java自动化测试框架

51CTO官微技术资讯/行业精华/产品心得多年来,Java一直是服务器端应用开发的首选编程语言。随着时间的推移和自动化测试的兴起,业界出现了许多基于Java,并根据不同的业务逻辑而发展起来的开源框架。在此,我向大家介绍并比较五种用到…

微服务框架Go-Micro集成Nacos实战之服务注册与发现

简介: 本文主要介绍如何使用 Golang 生态中的微服务框架 Go-Micro(v2) 集成 Nacos 进行服务注册与发现。(Go-Micro 目前已经是 v3 版本,但由于某些原因项目已经更名为 nitro 具体原因大家可以去 github 中查看) 相关背景知识 Go-Micro Go Micro 是一个…

「深度学习知识体系总结(2021版)」开放下载了!

随着世界技术的迭代与发展,人工智能和机器学习正在超自动化领域,扮演着越来越重要的角色。2020年的冠状病毒疫情突发,整个世界都在防疫的道路上披荆斩棘。人工智能发挥了重大作用,智能测温、智能消毒、智能建设都能看到AI的影子。…

2020双11,阿里巴巴集团数万数据库系统全面上云揭秘

作者:阿里云高级技术专家 改天阿里云高级产品专家 胜通 2020年天猫双十一成交额突破4982亿,在双十一走过12个年头之际,我们的订单创建峰值达到58.3万笔/秒,再次刷新全球在线交易系统的记录。历年双十一都是对技术人的一次大考&…

以 Kubernetes 为代表的容器技术,已成为云计算的新界面

简介: 可以说,以 Kubernetes 为代表的容器技术正成为云计算新界面。容器提供了应用分发和交付标准,将应用与底层运行环境进行解耦。Kubernetes 作为资源调度和编排的标准,屏蔽底层架构差异性,帮助应用平滑运行在不同基…

2020双11养猫技术大揭秘

简介: 你养猫了没? 作者 | 淘系-珑晴 在电商领域,互动是一个重要的用户增长方案,在提升用户黏性、活跃以及拉新上都发挥着重要的作用。今年双11,淘系互动团队推出了“超级星秀猫”,我们不盖楼、不开车&…

GitHub 遭抵制!AI 代码生成神器竟成“抄袭工具”?

整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)上周,微软、GitHub、OpenAI 三方联手推出的 AI 代码生成神器 GitHub Copilot 一经官宣便引起巨大关注:试问哪个开发者不想要这么一位“虚拟程序员”来解放自己的双手&#xff1f…

阿里云性能测试工具PTS介绍

简介: 性能测试 PTS(Performance Testing Service)是具备强大的分布式压测能力的 SaaS 压测平台,可模拟海量用户的真实业务场景,全方位验证业务站点的性能、容量和稳定性。 阿里云 阿里云智能GTS-平台技术部-SRE团队 1…

php微信公众号的服务器配置,微信公众号服务器配置选项PHP示例代码

最近微信公众号遇到有点奇怪的问题,使用的是tp框架,之前配置都ok的,最近有需求重新填写url选项,可配置时一直显示token失败,解决方案,参考以下php示例代码来修改,同时最好把输出注释掉。最后通过…

Dubbo 3.0 前瞻系列 | 2020双11,Dubbo3.0 在考拉的超大规模实践

很多开发者一直以来好奇:阿里自己有没有在用Dubbo,会不会用Dubbo?在刚刚结束的双11,我们了解到阿里云今年提出了“三位一体”的理念,即将“自研技术”、“开源项目”、“商业产品”形成统一的技术体系,最大…

OpenStack管理界面开源啦!

日前,木兰开源社区TOC召开了孵化项目审议会议,其项目分别覆盖数据库、大数据处理、网络、流媒体、云计算等关键领域。其中,浪潮数据纯自研产品Skyline成功入围。 自开源至今,OpenStack常被诟病的一点是原生界面不太好用&#xff…

厂商 push 不通排查指南

简介: MPS 集成多个三方渠道,保障 push 使命必达的必须知道的几件事。 为了提升「MPS 消息推送」的推送的到达率,mPaaS 集成了华为、小米等厂商的推送功能,从而有效地提高用户留存率,提升用户体验。在日常运维过程中&a…

Hologres助力飞猪双11实时数据大屏秒级响应

简介: 本文重点介绍Hologres如何落地阿里巴巴飞猪实时数仓场景,并助力飞猪双11实时数据大屏3秒起跳,全程0故障。 摘要:刚刚结束的2020天猫双11中,MaxCompute交互式分析(下称Hologres)实时计算F…

燧原科技首发国内第二代人工智能训练芯片“邃思2.0”

7月7日,燧原科技发布第二代人工智能训练产品——“邃思2.0”芯片、基于邃思2.0的“云燧T20”训练加速卡和“云燧T21”训练OAM模组,全面升级的“驭算TopsRider”软件平台以及全新的“云燧集群”,成为国内首家发布第二代人工智能训练产品组合的…

高德最佳实践:Serverless 规模化落地有哪些价值?

作者 | 何以然(以燃) 导读:曾经看上去很美、一直被观望的 Serverless,现已逐渐进入落地的阶段。今年的"十一出行节",高德在核心业务规模化落地 Serverless,由 Serverless 支撑的业务在流量高峰期…

Java全能手册火了!Redis/Nginx/Dubbo/Spring全家桶/啥都有

前言本文是为了帮大家快速回顾了Java中知识点,这套面试手册涵盖了诸多Java技术栈的面试题和答案,相信可以帮助大家在最短的时间内用作面试复习,能达到事半功倍效果。本来想将文件上传到github上,但由于文件太大有的都无法显示所以…

存储计算解耦合,构建中国人英语语音数据库

简介: 通过阿里云为流利说量身打造的数据湖解决方案,解决了流利说多种应用的各类数据的统一存储,帮助流利说构建数据规模高达上千亿的“中国人英语语音数据库”。 公司介绍 流利说是世界领先的科技驱动的教育公司,作为智能教育的…

Hologres+Flink流批一体首次落地4982亿背后的营销分析大屏

简介: 本篇将重点介绍Hologres在阿里巴巴淘宝营销活动分析场景的最佳实践,揭秘FlinkHologres流批一体首次落地阿里双11营销分析大屏背后的技术考验。 概要:刚刚结束的2020天猫双11中,MaxCompute交互式分析(下称Hologr…