支付宝使用OceanBase的历史库实践分享

这篇具有很好参考价值的文章主要介绍了支付宝使用OceanBase的历史库实践分享。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为解决因业务增长引发的数据库存储空间问题,支付宝基于 OceanBase 数据库启动了历史库项目,通过历史数据归档、过期数据清理、异常数据回滚,实现了总成本降低 80%。

  • 历史数据归档:将在线库(SSD 磁盘)数据归档到廉价存储的历史库(SATA 盘),节省约三分之二存储成本,提高在线库性能和运维效率;

  • 过期数据清理:直接原地清理过期数据,100% 节省存储成本;

  • 异常数据回滚:数据归档后,发现异常后可以从历史库进行数据恢复,将数据回滚到在线库。

流水型业务的数据量通常会跟随时间不断增加,当增加到一定数量,便会影响数据库的性能,甚至引发数据系统的容量瓶颈。为了解决这个问题,常见做法是将一部分冷的、不经常访问的数据存放到历史库中。

所谓历史库,主要是指把线上数据库超过一定时间的数据迁移到另外一个数据库中,确保线上库的数据量可控,以及保持业务的可持续发展,而历史的数据如果需要也可以在历史库中进行查询。

众所周知,支付宝曾经历替换数据库的阶段,为了保证金融业务的数据一致性与系统高可用、高扩容能力,选择将全部业务陆续迁移到原生分布式数据库 OcenaBase 。在将数据迁移到历史库后,单位空间磁盘成本降低到线上机器的 30% ,总体成本下降 80% 左右,甚至有些业务的存储成本降低到了原来的 1/10。

那么,支付宝启动历史库的背景是什么?期间经历了怎样的改造和演进,以及为什么 OcenaBase 能拥有如此高的数据压缩能力?本文通过支付宝历史库实践及业务改造技术方案为大家讲述。

支付宝使用OceanBase的历史库实践分享,oceanbase

时光倒回十年前,天猫“双 11”自 2009 年举办开始,每年成交额呈指数级增长,与此同时,支撑用户抢购的交易系统面临的压力也逐年递增。为了保障“双 11”期间系统的平稳运行及用户的良好体验,支付宝必须面对新的挑战。

从 2013 年开始,支付宝交易核心已经面临架构上的水平拆分上限了,如果保持当前架构下仅针对业务进行水平拆分扩容,需要购买更多的 Oracle 数据库,这将带来数据库成本近乎直线的攀升。该如何平衡成本和稳定性?这个问题是彼时支付宝工程师面对的难题。

要么购买更多的机器并投入更大的精力进行业务拆分,能够保证短期内的数据库性能与稳定性,要么重新选择一款不丢数据且稳定性高的数据库,而这次选择也将决定支付宝未来的成本投入和技术走向。正在众人焦头烂额之时,已经在淘宝收藏夹、SQL 引擎等业务线默默耕耘三年的 OceanBase 尝试抓住这次发展机会。

OceanBase 是完全自研的原生分布式数据库,天然具备高性能、高稳定、数据强一致等特点。在 2014 年“双 11”交易系统测试期间,系统已经扩容到最大集群量仍然无法抵御预测的流量洪峰,作为备选的 OceanBase 经受住了流量试验,支撑住了系统的稳定性。此举不仅使交易系统数据库切换为 OceanBase,还迎来了 2015 年“双 11”支付系统 51% 的流量考验,OceanBase 再次扛起流量洪峰,保障了系统的稳定性与高性能。

2016 年,OceanBase 实现了支付宝全业务覆盖,其弹性伸缩的架构,使得 OceanBase 集群可以通过增加机器扩容存储容量。但在 2017 年新的问题又摆在支付宝 DBA 面前:在不采购新机器的前提下,如何基于现有机器支持支付宝业务的快速发展?

彼时在线库集群积压了近两年的历史数据,占用了大量机器资源,新的数据还在爆发式增长,存储空间的压力与日俱增。在此背景下,支付宝 DBA 不得不将在线库的历史数据剥离,释放在线库存储空间,提高资源利用率,历史库迁移提上日程。

支付宝使用OceanBase的历史库实践分享,oceanbase

历史数据从在线库迁移到历史库,需要保证数据在迁移过程中的安全可靠,以及速度可控,不影响线上业务或历史库性能,还需要保证迁移后的数据完整性和操作历史可查询,如任务日志等,方便审计排查问题。

整个迁移过程分为如下三个步骤:

第一,在线库历史数据迁移到历史库

按照迁移规则,迁移指定时间范围的历史数据到历史库。比如某时间节点之前的数据全部迁移到历史库,此时应用仍访问在线库。

迁移是通过查询条件获取主键,按主键顺序批量扫描数据,每次扫描 n 条( batchsize 可配置),批量插入历史库,同时记录每批迁移记录的主键、时间、源库、目标库等信息,保留在 metadb 中,可查询历史操作轨迹,以防止异常情况下重新开始。迁移程序需要关注历史库内存消耗情况,具备防导爆功能。

第二,应用修改历史数据切流时间配置,访问历史库

当所有表时间节点之前的历史数据全部迁移到 OceanBase 历史库后,应用调整历史库切流时间配置,将时间节点之前数据查询流量切到历史库,验证正确性。

此时在线库和历史库均包含时间节点之前的数据,如果发现异常时,应用可回滚。

第三,在线库删除历史数据,回收空间

第二步切流验证无误后,按同样的规则,根据中间库中的记录,批量查询历史库对应的记录全信息,主键匹配删除在线库记录,此时在线库删除的记录,肯定在历史库存有一份,不会丢失任何数据。

与正向迁移一样,反向删除在线库数据,需要记录位点,防止异常情况从头开始。同时关注在线库内存消耗,防止内存写爆。

支付宝使用OceanBase的历史库实践分享,oceanbase

一、历史库平台演进

历史库目的是为了解决因为业务增长引发的数据库存储空间问题。通过性能换成本的方式,将过去不再使用的业务数据或查询很少的数据,搬迁到性能低但存储量大的机型构成的集群中,降低线上数据库存储带来的开销。针对历史库的需求,需要一个迁移程序将冷数据从在线库迁移至历史库,并且保证在线库和历史库都持续可用,不需要停机切流。因此,有几点特殊的需求:

  • 考虑数据量比较大,需要支持断点续传。

  • 由于交易历史库有一些表之间有关联,需要具备主子表维度迁移的功能。

  • 需要具备删除已经迁移的数据的功能。

由于当时常用的数据迁移工具 DataX 和 DTS 都不支持主子表维度迁移,也不具备删除已迁移数据的能力,因此,支付宝及 OceanBase 的研发人员决定自研一套迁移工具供历史库迁移使用。自研的迁移工具包括迁移、校验、删除三种任务模式。通过多线程启动对应的任务,并将相关迁移任务、进度和结果写入 metadb ,以便监控任务进度和支持断点续传。

  • 任务模式

a. 迁移

通过生产者—消费者模型实现的 Writer 和 Reader 进程,实现表记录的迁移。当前支持读取源数据库和目标数据库的配置信息、迁移表以及流控、日志打印等参数配置,具备一定的通用性。

b. 校验

迁移完成后,从目标数据库读取主表和(所有)子表的记录,并与源数据库逐行逐字段做字符串匹配,效验数据一致性。当有不一致的数据,会将主键写入 metadb。

c. 删除

当前支持指定校验完成后是否从源数据库删除记录。通过主键匹配的方式。校验前对相关表记录加锁,校验完成后执行删除语句,提交事务。

  • 逻辑说明

工具中具体的迁移、校验、删除逻辑通过启动对应的线程实现。在工具启动时,根据配置文件初始化任务(job)和子任务(task),并写入 metadb 的 jobs 和 tasks 表,便于断点续传和进度统计。

工具使用多线程模型将一个迁移、效验任务(job)分割成若干个 task 并行执行,可以提高处理速度。线程的数目可配。

迁移逻辑使用多个 reader 同时从数据源读取数据,写入 buffer 。同时 writer 从 buffer 里获取数据,写入目标数据源。DataReader 从数据源读取主表的信息(如果有关联子表,则一起读取),返回一个 TransRecords 对象:

DataWriter 线程则从 buffer 获取到数据后,写入目标数据源。

  • 数据源封装

工具使用 oceanbase-connector-java 获取 OceanBase 连接,通过一个工厂类 DataSourceFactory 获取指定类型的数据源连接。用这种方式可以屏蔽数据源差异,做到不同源数据库之间的迁移和校验。当时已经支持 OceanBaseMySQL 数据源。

  • 限速及防导爆

为防止因数据查询或者清理过快导致线上产生抖动,或相应数据库下流订阅同步产生数据积压等问题,工具支持 OceanBase 的限速及防导爆功能。目前限速分为单表处理的行数、租户运行最大处理的并发数、租户最大网络读写流量、集群运行最大处理的并发数、集群最大网络读写流量这 5 个方面进行的限速。历史库平台在运行期间写入时还会对写入操作的租户 CPU 、内存使用情况进行检测,满足安全的区间内才会进行操作。

  • 断点续传

工具正常启动一个新任务,完成子任务切分后,会将任务信息写入 jobs 表,将子任务信息写入 tasks 表。如果工具异常退出,可以自动断点续传,不需要重新开始执行。

二、历史库平台架构

历史库平台为数据提供了更长生命周期管理能力。历史库平台通常由在线数据库、历史库客户端、历史库管控平台、历史数据库集群组成,为用户提供一站式的数据存储、归档解决方案。

通过历史库管控平台,用户可以方便地配置迁移任务,指定规则将符合条件的非活跃数据从在线数据库迁移到成本更低的历史 OceanBase 数据库集群中。同时,历史库平台提供多维度的限速能力,以及多项目间优先级调度功能。用户通过配置限速减少迁移时对业务的影响,通过配置优先级可管理多套集群,满足多项目同时运行。待数据迁移完成后,提供数据校验、校验成功后删除在线数据配套功能,方便实用。

经过支付宝业务的打磨,历史库平台(见下图)已经支撑支付宝内部交易、支付、账务等多个重要系统,节省了支付宝内部数据存储成本。同时,在网商银行也有广泛的使用场景。

支付宝使用OceanBase的历史库实践分享,oceanbase

从图中可见,历史库平台包含三大板块:在线数据库、历史数据库集群、历史库管控平台。

  • 在线数据库,用于存放应用常常需要访问的数据。通常会采用更高规格配置的服务器,提供高性能的处理能力。目前已支持  OceanBase,MySQL,Oracle 作为数据源。

  • 历史数据库集群用于存放应用产生的终态数据,根据应用需求不同,即可以作为数据归档存储的集群不对应用提供访问,也可以满足应用的访问需求。采用成本更低的 SATA 盘来搭建 OceanBase 数据库集群。其中的历史库客户端用于处理用户发起的迁移、校验、删除任务。支付宝内部实现了多维度的限速,根据需求不同可以灵活地提供集群限速和表限速功能,最大程度的避免了任务对在线库应用流量的影响。

  • 历史库管控平台是用户对历史库进行各项操作的运维管理平台,提供权限管理、任务配置、任务监控等功能。

支付宝使用OceanBase的历史库实践分享,oceanbase

当前已建设 20 多个历史库集群,在支付宝内部已覆盖交易、支付、充值、会员、账务等几乎所有核心业务,总数据量 95 PB,每月增量 3 PB。其中,最大的交易支付集群组,数据量 15 PB,每日数据增量可达到 50 TB。支付宝历史库的实践,带来的收益显著,主要包括以下三点:

第一,成本下降 80% 左右。

由于历史库采用成本更低的 SATA 盘来搭建 OceanBase 数据库集群,单位空间磁盘成本降低到线上机器的 30%。同时使用更高压缩比的 zstd 压缩算法,使得总体成本下降 80% 左右。

如果线上是 MySQL、Oracle 等传统数据库,那么成本会降低更多。因为 OceanBase 本身的数据编码、压缩以及 LSM-Tree 的存储架构等,使得存储成本只有传统数据库的 1/3。

第二,弹性伸缩能力降低运维成本。

历史库使用 OceanBase 三副本架构,每个 zone 中有多个 OBServer ,通过分区将数据分散到多个 unit 中。OceanBase 具备业务无感知的弹性伸缩能力,并且可以通过扩容节点增加容量、提升性能。这意味着历史库可以不再受限于磁盘大小,通过少数集群就可以涵盖所有业务的历史库,降低运维成本。

目前历史数据是永久保存的,随着时间的推移,历史库的容量占用也会越来越高。依赖 OceanBase 本身的高扩展性,通过横向扩展 OBServer ,增加 unit_number 即可实现容量的扩容。

第三,数据强一致,故障快速修复。

数据迁移相当于一份数据归档及逻辑备份,如果这些数据发生了丢失,那么后续需要做审计、历史数据查询的时候,数据就对不上了。这对于很多业务尤其是金融业务而言是无法忍受的。

OceanBase 底层使用 Paxos 一致性算法,当单台 OBServer 宕机时,可以在 30s 内快速恢复,并保证数据的强一致,降低对线上查询及归档任务的影响。

支付宝使用OceanBase的历史库实践分享,oceanbase

随着支付宝的交易、支付、账务、充值、会员等几乎所有核心业务都搭载了 OceanBase 作为历史库,历史数据的存储不再受限于磁盘大小,业务的发展也不再受限于数据库系统的容量。支付宝携手 OceanBase,实现历史库的总体成本下降 80% 左右,存储成本只有传统数据库的 1/3 ,降本增效成果显著,助力支付宝从容应对业务持续增长。

支付宝基于 OceanBase 数据库启动历史库项目实现降本增效,不仅是支付宝内部业务发展和数据库运维的关键诉求,对于整个金融行业的历史数据存储也意义重大,为后续重要业务的历史库迁移改造提供了可靠的成功案例,为 OceanBase 数据库走向政企、泛互等其他重要领域树立了典型示范。文章来源地址https://www.toymoban.com/news/detail-698122.html

到了这里,关于支付宝使用OceanBase的历史库实践分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OceanBase—01(入门篇——使用docker安装OceanBase以及介绍连接OB的几种方式)

    1.1.1 安装前提 安装了docker Linux下安装docker以及docker安装Oracle19c的全部详细过程及各种问题解决. 1.1.2 参考 参考官网: 使用 Docker 部署 OceanBase 数据库. 提示:这是安装之后的操作,需要的话可以,安装之后可以跳到这里看修改密码!!! 安装后默认密码为空,可以修改也可以

    2024年02月09日
    浏览(47)
  • OceanBase使用规范

    降低故障率和维护成本 所有使用OceanBase的数据库 关于分区表创建时的注意事项。 。 单表行数可能超过10亿行或者单表容量超过200GB,推荐进行创建分区表。 。如果预计三年后的数据量根本达不到这个级别,请不要在创建表时使用分区表。 分区表在表创建的时候需要指定,后续不

    2024年01月24日
    浏览(37)
  • 【容器化】Oceanbase镜像构建及使用

    通过该篇文章可以在国产X86-64或ARM架构上构建商业版oceanbase,只需要替换pkg安装包即可 。下面截图主要以国产X86-64安装为例,作为操作截图: 镜像构建目录说明 pkg:用来存放安装包及脚本,抛出rpm其他是脚步,这些rpm包可以下载不同系统架构的包,构建镜像时该目录只需要保

    2024年02月14日
    浏览(37)
  • Apache DolphinScheduler 支持使用 OceanBase 作为元数据库啦!

    DolphinScheduler是一个开源的分布式任务调度系统,拥有分布式架构、多任务类型、可视化操作、分布式调度和高可用等特性,适用于大规模分布式任务调度的场景。目前DolphinScheduler支持的元数据库有Mysql、PostgreSQL、H2,如果在业务中需要更好的性能和扩展性,可以在DolphinSche

    2024年02月12日
    浏览(37)
  • 如何使用蚂蚁集团自动化混沌工程 ChaosMeta 做 OceanBase 攻防演练?

    当前,业界主流的混沌工程项目基本只关注如何制造故障的问题,而经常做演练相关工作的工程师应该明白,每次演练时还会遇到以下痛点: 检测当前环境是否符合演练预设条件(演练准入); 业务流量是否满足(流量注入); 注入后判断故障效果是否符合预期(故障度量

    2024年02月09日
    浏览(38)
  • 【实战】OceanBase之OMS迁移Oracle至oceanbase

    背景 最近公司因为需要做Oracle2OceanBase的数据迁移后做测试,但是数据接近2T,对于超大数据表的迁移使用ETL工具,效率太慢了。综合考虑使用OMS,以下是做数据迁移的具体步骤,给大家提供一些借鉴。 把源端和目标端添加进去,源断是Oracle_ods,目标端是oceanbase_ods 选择好源

    2024年02月08日
    浏览(40)
  • 【oceanbase】centos7/kylinv10部署oceanbase(x86版本)

    1. 修改系统​ vim /etc/sysctl.conf fs.file-max = 102400 net.nf_conntrack_max = 1024000 net.netfilter.nf_conntrack_max = 1024000 2. 修改 ulimit 的 open file,系统默认的 ulimit 对文件打开数量的限制是 1024 vim /etc/security/limits.conf # 加入以下配置,重启即可生效 * hard nofile 102400 * soft nofile 102400 3. 资源下载: o

    2024年02月07日
    浏览(49)
  • 「OceanBase 4.1 体验」OceanBase:解读领先的分布式数据库系统,功能与体验全解析

    本文旨在介绍 OceanBase 4.1 版本的特点、更新内容和初体验,帮助读者了解和掌握这个开源分布式关系型数据库管理系统。如果你对大规模数据存储和处理的挑战感兴趣,或者正在寻找一种满足互联网领域高并发、高可靠性和高扩展性要求的数据库解决方案,本文将为你提供有

    2024年02月05日
    浏览(52)
  • OceanBase写入限速源码解读

    OceanBase中的写入限速机制旨在控制系统中写入操作(一般写入操作包括插入、更新和删除等)的速率,目的是为了提高数据库系统的稳定性。本文主要通过以下2个参数来解释写入限速的实现机制。 **1.**writing_throttling_trigger_percentage:设置写入速度的阈值百分比。当内存使用达

    2024年02月03日
    浏览(37)
  • OceanBase基础概念

    一个集群由多个Zone组成,给集群内的一批机器打上同一个tag,则属于同一个Zone 不同的Zone可以对应不同城市、一个城市的不同机房、或者一个机房的不同机架 Zone个数=3,建议是奇数 每个zone均有且只有一份完整的副本;单Zone的故障不影响业务 每台OBServer相对独立,有独立计

    2024年01月21日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包