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

蚂蚁数据库架构的三代升级史

在过去的十多年时间里,蚂蚁在整个基础数据库架构上一共经历了三代升级。第一代数据架构是构建在IOE的基础之上——IBM的小型机、Oracle的商业数据库,还有EMC的共享存储。基于第一代IOE架构的运维成本是非常高的,同时稳定性的挑战也是非常大的。随着业务的快速发展,这套架构已经完全没有办法适应业务发展的增速。

随之诞生的是第二代架构,第二代架构的主体是OE——也就是Oracle和EMC,加上蚂蚁自身的分布式中间件,解决了业务的水平和垂直的弹性能力。这一代架构其实伴随着蚂蚁走了很多年。

随着4G、5G时代的到来和金融的普及化,人们的生活越来越离不开移动支付,业务井喷式的发展给底层的数据库提出了更高的要求。这些要求包括更高的稳定性,快速恢复能力和极致的弹性能力等。

于是最终演进到了我们如今的第三代架构。第三代架构是由OceanBase为代表的金融级云数据库和分布式中间件所构成。

数据库架构升级的挑战

伴随着整个蚂蚁的发展,整个数据库的架构也仅仅演进了三代。这其中一个很重要的原因就是对于任何企业而言,整个数据库的架构升级都是一件非常有挑战的事情。

蚂蚁金服资深技术专家师文汇说道,用一个我们内部经常说的比喻,就是数据库的架构升级就好像是在给一个高速运行的飞机更换引擎。”

更换引擎的目的是为了拥有更好的动力,做更多技术上的创新。但是横亘在眼前的问题是,如何才能做到稳妥创新,保证驾驶中的飞机平稳顺利的运行,这其实是有非常大的挑战。

在过去三代架构的演进中我们可以看到,本质上每一代架构的迭代基本上都是以两到三年为周期,这其中会有非常高的人力投入和成本开销

第二个挑战就是从传统的商业数据库迁移到OceanBase数据库之上,我们如何保证迁移过程中以及迁移以后的稳定性

另外一个非常大的挑战就是数据质量,在金融企业里,数据承载的不仅只是钱,更承载了数以亿计用户的信任。所以数据一条不能丢,一条不能错,这是我们做数据库的底线

当然,包括兼容性问题和性能风险也给数据库的架构升级带来重重挑战。

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

基于上述问题和挑战,同时经过蚂蚁十年数据库架构升级的先进经验,蚂蚁金服为客户打造了这款一站式数据迁移解决方案——OceanBase迁移服务(OceanBaseMigration Service,简称OMS)。

OMS的发展演进

OMS的演进是以业务为驱动,并且与OceanBase的架构升级和不断发展密不可分。

早在2014-2015年期间,蚂蚁主站上的一些核心业务,包括大家熟知的交易业务,支付业务和会员业务等,需要从Oracle迁移到OceanBase上。当时的OMS还是以一个工具类、模块化的形态支撑着这些项目。

所以在2015年我们开始对OMS的方案进行全面的调研,力求沉淀出通用的系统化的解决方案。

在2016年,OMS已经有了平台化的架构,引入了大规模编排的思想,将整个迁移特别是切换过程中繁琐易错的环节全部集成到平台。这一时期,OceanBase也完成了从0.5版本到1.0版本的架构升级,这一年OMS还支撑了网商银行、印度PayTM以及主站的核心业务升级到OceanBase 1.0版本。

到了2018年的时候,无论在基础功能层面还是任务编排层面,OMS都已经被打磨得日趋完善。今年OMS已经支持了蚂蚁森林,蚂蚁商户平台以及众多大量核心及非核心的业务从MySQL迁移到OceanBase之上。与此同时,在外部业务包括很多已经上线OceanBase的商业银行,也已经验证了使用OMS一键迁移到OceanBase的能力。

OMS的方案优势

OceanBase迁移服务其实主要解决了五个重要的问题。

1.负载回放验证:其中第一个核心的问题就是负载回放验证,通过采集源端数据库的SQL流量,在目标库OceanBase上回放,可以验证其在OceanBase上的功能是否兼容、性能是否出现问题等。同时基于蚂蚁DBA十多年的经验沉淀,OMS会为客户提供性能等方面的调优建议。

2.秒级数据校验:第二点就是数据校验,OMS有三层数据校验,可以做到秒级的延迟。举一个例子,比如说我们想把传统商业数据库替换成OceanBase,如果在迁移过程中任何一条数据出现了错误,在一秒钟内就可以快速发现。校验的延迟可以完全保证在一秒以内,根据蚂蚁线上的经验,大概在100-200毫秒之间。

3.分钟级即时回滚:第三点也是最重要的一点,就是OMS有随时回滚的能力,而且回滚是无损的。这也是我们前面所强调的稳妥创新的基石。

4.多种数据库类型支持:目前OMS支持源端数据库类型有Oracle、MySQL、OceanBase等等,支持全量迁移和增量数据同步。

5.一键完成迁移:整个数据迁移链路和回滚机制的搭建基本上都是通过一键操作完成,使用简便。

OMS的技术架构

OMS的核心方案其实非常简单,我们把OceanBase变成Oracle/MySQL的一个备库。

传统的商业数据库一般都是有主库和备库的:主库承担写的流量,如果主库出现问题,我们会把数据切到备库,然后通过OMS提供的一整套虚拟主备库的解决方案完成切换。比如原来Oracle有一个主库一个备库,然后OceanBase其实变成了一个虚拟的备库。

整个数据库架构的升级也会变得异常简单,简单到只是做了一个主备切换。回滚也会变得非常简单,其实也是做了一次主备切换。

从OMS的整体架构来看,其实一个非常关键的点就是,我们在传统的商业数据库和OceanBase之间建立了一套虚拟的主备链路,整个OMS里用到的所有组件,其实都是在蚂蚁和阿里有很多年技术沉淀的,也都是基于真实场景所产生的。

OMS的迁移流程

OceanBase迁移服务的整体迁移流程其实只有七步。

1.评估:首先第一步是通过负载回放工具做兼容性分析;

2.PoC:接下来OceanBase云平台可以帮助客户部署一套PoC集群;

3.预迁移:然后OMS把线上的Oracle的数据预迁移到一个测试库里;

4.验证:在这个测试库里用负载回放工具去回放这些SQL,然后找到SQL里不兼容,性能或者数据质量不满足预期的部分,并提供优化建议;

5.正式迁移:前四步做完了以后,业务需要调整或者需要优化的SQL已经完成优化,然后就可以正式迁移了。首先把原有的全量数据迁过来,然后再把增量变化的那部分数据实时同步过来;

6.校验:等到所有的数据准备好以后,然后我们继续完成三级校验;

7.切换和回滚:等到所有的校验都完成以后,可以一键完成切换和回滚功能。

通过这七步就可以轻松完成从传统商业数据库到分布式数据库的完整迁移。

蚂蚁商户平台基于OMS的业务实践

蚂蚁商户平台承载着商户档案数据信息,订购关系、签约信息的数据和相应的服务能力。其中一部分业务使用的是MySQL数据库,还有一部分核心业务使用的是Oracle数据库。

随着商户的快速增长以及业务场景的不断丰富,商户平台数据增长迅速,数据规模相当庞大。尤其是MySQL的单表瓶颈日益明显,DDL变更、DML更新的性能与风险已经无法承担。

蚂蚁金服技术专家韩谷悦介绍道,“OceanBase能够支持数据的无限扩展,满足商户业务的容量与性能需求。那么如果我们换一种数据库底盘,其实所要面对的性能、稳定性和数据质量的风险同样不可避免。”

从蚂蚁商户平台的业务实践来看,使用OMS迁移与传统迁移进行对比,我们可以看到:

· 业务评估和改造

过去通常一个业务少则花费1-2个月的时间去做改造和适配;那么基于OMS自动化的SQL兼容性评估和负载回放的能力,蚂蚁商务平台业务的改造大概只用了一个星期的时间。

· 数据迁移和校验

客观来讲,迁移的总时长主要取决于业务数据模型,数据量和网络环境。在提高迁移效率方面,OMS目前增量迁移的延迟仅为毫秒级,跨城情况下最长只需要3秒。并且针对校验出的数据差异提供补齐的SQL和订正方案,使得迁移和校验的整体效率有了大幅度的提升。

· 业务切换

其实在切换之前,往往需要制定严密的切流方案和Failover方案,整个切换过程中需要检查与校验的细节非常繁琐,任何一步疏忽都有可能造成数据不一致的问题。那么OMS通过引入大规模编排的思想,把所有繁琐复杂的环节通通落到平台当中。所以从原来业务切换需要用时1-2周时间, 使用OMS后蚂蚁商户平台业务无论是切读还是切写的过程中都只用了几分钟的时间。

· 业务回滚

在过去,迁移之后的业务回滚要担负重大的决策风险,OMS使得业务回滚就像一次主备切换,可以瞬间完成并且不丢数据,所以让业务回滚不再成为难题。商户业务整体迁移的过程中也发生过业务抖动,使用OMS回滚的时候从登陆系统到完成回滚也只用了几分钟的时间。

所以全程下来蚂蚁商户平台这个业务的迁移时间大概在三个多星期的时间完成,那么无论从人力成本还是时间成本上,OMS都极大地提升了数据库的整体迁移效率。

最后,韩谷悦为大家展示了OMS一键迁移的demo演示。

当前, 越来越多的企业已经认识到分布式架构在实现业务灵活扩展以及敏捷开发等方面的巨大价值。OceanBase不断通过产品端的革新,为传统企业输送“互联网基因”,帮助更多客户向分布式架构转型。

同时OceanBase也在不断提高服务客户的深度和广度。深度意味着在同样的业务场景下,随着业务的发展和体量的壮大,帮助更多企业承担起业务所带来的极致压力。广度则针对的是随着新型技术形态和业务场景的出现,帮助更多企业快速响应,通过技术创新而适应变化所带来的新的市场契机。

OceanBase致力于将蚂蚁自身业务多年沉淀下来的最浓缩,最经典和最普世的方法论输出给广大的企业客户,同时做到深度和广度并存,真正帮助客户实现稳妥创新

OceanBase迁移服务:向分布式架构升级的直接路径的更多相关文章

  1. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

  2. 分布式架构核心RPC原理

    在应用的迭代演进过程中,随着系统访问量提高,业务复杂度提高,代码复杂度提高,应用逐渐从单体式架构向面向服务的分布式架构转变.RPC(Remote Procedure Call Protocol远程过程 ...

  3. 【分布式架构】“spring cloud”与“dubbo”微服务的对比

      秉承站在巨人的肩膀上,同时我也不想重复制造轮子,我发现了一系列关于“分布式架构”方面,我需要,同时能够解决我的一些疑惑.问题的博客,转载过来,原文链接: http://blog.csdn.net/ ...

  4. 资深P7架构师详解淘宝服务端高并发分布式架构演进之路

    1. 概述 本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则. ...

  5. 服务端高并发分布式架构演进之路 转载,原文地址:https://segmentfault.com/a/1190000018626163

    1. 概述 本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则. 特 ...

  6. 大型分布式架构设计与实现-第一章SOA(面向服务的体系架构)

    拜读了大型分布式架构设计与实现,觉得该书作为入门不错,但内容过于简单,描述过于琐碎,小节之间连续性不强,不适合深入钻研学习.但为了更多的希望向架构师行业靠拢的工程师学习需要,本博客将对上书进行简化讲解 ...

  7. 分布式架构和微服务CI/CD的范本技术解读

    随笔分类 - 分布式架构--http://www.cnblogs.com/hujihon/category/858846.html (ZooKeeper.activemq.redis.kafka)的分 ...

  8. 服务端高并发分布式架构 ESB 企业服务总线

    服务端高并发分布式架构演进之路 - 个人文章 - SegmentFault 思否 https://segmentfault.com/a/1190000018626163 ESB 企业服务总线讲解 ht ...

  9. Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构

    Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...

随机推荐

  1. API网关学习及介绍

    一.什么是API网关 API网关是一个服务器,是系统的后端统一入口.首先,它会提供最基本的路由服务,将调用转发到上游服务.其次,作为一个入口,它还可以进行认证,鉴权,限流等操作,对上游服务保护.所以说 ...

  2. angular当router使用userhash:false时路由404问题

    angular当router使用userhash:false时路由404问题 安装iis urlrewrite2.0组件 在根目录下创建 Web.config <configuration> ...

  3. OO第二次博客

    过去三周里,我们完成了多线程电梯的程序设计与构造.这是我第一次接触多线程编程.我感觉最大的困难在于多个线程中的操作,谁先谁后,不是像以前写的单线程程序那样严格确定,所以心里常常会比较慌.尤其是因为多线 ...

  4. sping_依赖注入的三种方式

    1.  set注入:通过setxxx()给属性赋值 <!--id是对象--> <!--class是类--> <bean id = "student" ...

  5. SQL Server get SP parameters and get output fields type information

    Summary 本文主要介绍一下,SQL里面的两个很实用的两个操作: 获取存储过程的参数信息 SELECT * FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPE ...

  6. PHP----------php封装的一些简单实用的方法汇总

    1.xml转换成array,格式不对的xml则返回false function xml_parser($str){    $xml_parser = xml_parser_create();    i ...

  7. php通过pecl方式安装扩展

    安装pecl cd /usr/local/php/bin/ wget http://pear.php.net/go-pear.phar -O go-pear.php php go-pear.php # ...

  8. Windows7 IIS 出现错误,并非所有的功能被成功更改

    (1)进入UAC,将其调至最低. 具体操作方法:点击[开始],在程序搜索中输入UAC,回车后则进入UAC控制界面. UAC,用户帐户控制设置如下,这个设置主要是避免Windows7种由于用户帐户权限控 ...

  9. Javascript基础语法(一)

    一.Javascript简介 1. 定义 基于事件和对象驱动,并具有安全性能的脚本语言. 2. 出现背景 上世纪90年代,在美国有出现,当时有上网的环境,并且有网站服务在运行. 注册服务 上图涉及的问 ...

  10. 为什么越来越多的人偏爱go语言

    如果你是一个开发者或者程序员,你大概应该听过Go语言或者Golang语言.当然,如果没有听过也没关系,看到这篇文章的同学,就说明你对Golang是关注的,只需要这一点就够了.今天来聊聊关于Golang ...