数据库是企业IT系统里的重要基础设施,里面存储了大量有价值的数据资产,如:交易数据、客户数据、订单数据,等等。其实,数据库在企业里一直扮演着一个数据生产者(Producer)的角色,日积月累这些数据会造成一个巨大的宝藏。可是,随着数据库中数据量的增加和数据形态的多样化,如何对数据进行存储、迁移和加工,并挖掘出其中的价值,是许多企业面临的难题。html
为解决上述问题,阿里云DMS(Data Management Service)产品近期推出了一个新功能——任务编排。不管您的数据库部署在何处(阿里云/本地IDC/其余云厂商等),是何种类型(OLTP交易型数据库/OLAP分析型数据库),DMS任务编排都可以触达您的数据库,让您轻松地对数据库中的数据进行流转、加工和变换。DMS任务编排提供的主要功能和特性包括:mysql
了解了DMS任务编排的功能,你必定开始好奇用DMS任务编排能作什么?下图展现了DMS任务编排支持的四类主要场景: sql
目前比较流行的有两类数据库:传统单机版数据库(如:MySQL)和云原生数据库(如:阿里云PolarDB和AnalyticDB for MySQL)。前者的存储空间是有限的,后者虽然能够对存储扩容,但也要收取较高的费用。那么,当数据库中的数据量持续增加时,该如何下降存储成本呢?许多用户但愿能将数据库中的冷数据/历史数据转储到可靠又低价的存储上,如:阿里云对象存储(OSS)。如今经过DMS任务编排,可轻松实现数据库数据周期归档(如:每日/每周)到OSS的需求。同时,DMS还有好地对接了阿里云数据湖分析产品(DLA),用户可在DMS里方便地访问DLA,对归档到OSS上的数据进行即席查询和分析。数据库
企业的数据可能分散在不一样的数据源中(如:MySQL、SQL Server),也可能分散在不一样的地域(例如:北京、杭州、深圳)。致使数据分散的缘由有不少,好比:业务的垂直划分、微服务、应用的本地部署等等。数据的分散不可避免,但同时许多企业又有数据集成的需求,须要将各地的数据汇聚到一块儿进行全局分析(如:汇总和AI分析),典型的场景就是OLTP交易库的数据同步至OLAP分析库作离线分析。经过DMS任务编排,能够轻松实现这一需求。首先,DMS打通了各类网络环境(如:阿里云VPC/经典网络,本地IDC网络),可链接至各个地域的数据源。其次,DMS支持异构数据源间的数据集成,如:RDS MySQL到AnalyticDB。此外,经过DMS任务编排,还能知足各类集成方式的需求,如:单次全量集成、周期性增量集成。安全
作完数据集成以后,用户一般还要对汇聚的原始数据进行加工、清洗和分析,才能挖掘出其中的价值,例如:每日统计产品的用户数(UV),按周产生报表数据。DMS任务编排提供了任务流和定时调度能力,经过任务流能够将复杂加工任务进行拆解和编排,而后配置调度信息。DMS支持单次调度和周期调度(如:按日、周、月),此外还支持多类型的加工任务,用户可以使用SQL进行数据加工,也可编写Spark程序进行复杂的数据处理和AI分析。经过丰富的调度配置和任务类型,DMS任务编排能知足各类简单/复杂场景的数据加工需求。网络
在平常数据库的使用中,有许多DML/DDL/DCL操做须要按期执行,如:每周清理历史数据(DELETE)防止表过大、每日更新统计信息(ANALYZE TABLE)以得到更好的查询优化结果。有些数据库在内核层面已经提供了事件调度功能,如:MySQL Event,可是使用特殊的语法建立Event和维护Event都有必定的成本。DMS任务编排的调度功能提供了可视化的方式轻松建立定时任务,而且不依赖数据库引擎上的能力,所以更加简易灵活,适用范围更广。运维
介绍完DMS任务编排的功能和使用场景,下面将以数据归档场景为例,介绍如何经过DMS任务编排和阿里云DLA服务将RDS MySQL数据周期地归档至OSS上。具体的实操步骤还可查阅DMS的使用文档。微服务
用户的RDS MySQL业务库中某张表(如:交易记录、登陆/操做日志)的数据持续增加,占用了大量的存储空间,甚至影响到了数据库性能。同时,这部分数据又是有价值的,好比:用于审计、报表和统计分析,不能随意删除。为解决这个问题,用户有三个核心的需求:工具
• 下降MySQL业务库的存储压力;性能
• 对历史业务数据作增量归档;
• 对归档数据作分区,可按分区过滤进行高效查询。
为知足这三个需求,咱们选择了阿里云DLA服务,由于其同时打通了OSS和RDS MySQL,可以对上面的数据进行迁移和即席分析。可是,DLA并不具有周期调度和增量数据迁移的能力,DMS任务编排正好能够与DLA互补,造成完整的解决方案知足用户需求。
在下面的实操中,咱们假设用户RDS MySQL中待归档的表为订单表orders,其表结构以下(created_date字段为订单建立日期):
create table orders( order_id bigint, product_name varchar(32), price double, total_amount double, created_date date );
一、已购买阿里云DLA服务,且DLA服务的区域(Region)和待归档的RDS MySQL区域一致,如:都是华东1(杭州)
二、已开通阿里云OSS服务,且服务的区域与DLA、RDS MySQL一致
三、已购买阿里云DMS服务
四、DLA实例已录入DMS中(请参考DMS实例录入)
各产品的购买要求和用途:
产品
购买产品的区域
用途
DMS
无限制
周期调度
DLA
与RDS MySQL同区域
RDS MySQL数据迁移至OSS;查询OSS上的归档数据
OSS
与RDS MySQL同区域
存储RDS MySQL归档的数据
下面介绍如何在DMS中操做实现RDS MySQL数据周期归档,主要包含5个步骤:
若要将数据归档至DLA上,首先要在DLA中建立一个用于归档的schema,用于存放归档表。在DMS首页的顶部菜单中,找到SQLConsole单库查询,并打开查询窗口,而后输入以下SQL语句并执行:
CREATE DATABASE demo_schema WITH DBPROPERTIES ( catalog = 'oss', location = 'oss://xxxxxx/dla_demo/' )
在DMS首页的顶部菜单中,选择数据工厂 -> 任务编排,进入任务编排的首页。在首页点击“新建任务流”,或者点击左侧tab进入开发空间,也能够快速地找到新建任务流的入口。在新建任务流的窗口,咱们将任务流名称设为:rds_data_to_oss。
在任务流rds_data_to_oss中,依次新建三个DLA-SQL类型的任务节点:
节点建立完之后,可在节点间添加连线,对节点的执行顺序进行编排,产生完整任务流。
下面对每一个节点的内容进行设置:
要让DLA顺利访问RDS MySQL的数据,须要在DLA中为RDS MySQL建立一个Schema,取名: dla_mysql_rds。咱们将以SQL的方式来建立Schema。首先,点击第一个任务节点,在右侧的内容设置Tab页中,输入以下SQL语句(其中部分参数需替换为RDS上的真实信息):
CREATE SCHEMA IF NOT EXISTS dla_mysql_rds WITH DBPROPERTIES ( CATALOG = 'mysql', LOCATION = 'jdbc:mysql://xxxxxx.rds.aliyuncs.com:3306/dmstest', USER = 'dmstest', PASSWORD = 'xxxxxxxxx', INSTANCE_ID = 'xxxxxx' ); MSCK REPAIR DATABASE dla_mysql_rds;
此外,为了让DLA顺利访问RDS MySQL,还须要在RDS MySQL中添加DLA的白名单,即:将IP地址段100.104.0.0/16加入到RDS的白名单列表中。RDS白名单的配置方法可参考这个文档。
咱们须要在DLA中建立OSS备份表(oss_orders),首先将节点的目标数据库设为demo_schema,而后将节点内容设置为以下的SQL语句。oss_orders表的结构与RDS中的orders表彻底一致,不一样的是oss_orders为分区表,按照年/月/日(y/m/d)分区:
CREATE EXTERNAL TABLE oss_orders ( order_id bigint, product_name varchar(32), price double, total_amount double, created_date date) PARTITIONED BY (y string, m string, d string) STORED AS TEXTFILE LOCATION 'oss://xxxxxx/dla_demo/';
其中,LOCATION参数须要填写一个OSS路径,即:归档数据储存的OSS地址。
该数据备份实现了将RDS MySQL数据备份至OSS的功能。配置节点须要选择目标数据库为DLA的demo_schema,设置时间变量,而且编写备份SQL语句。
配置三个时间变量,它们分别是:
• year:当前日期前一天的年份(格式为yyyy)
• month:当前日期前一天的月份(格式为MM)
• day:当前日期前一天的日(格式为dd)
注:关于DMS任务编排中变量的配置和使用,请参阅该文档。bizdate为DMS任务编排里的系统参数,对应到任务运行时间的前一天,其余自定义变量也会随着任务执行时间的变化而自动更新。
设置数据备份SQL语句
/* 建立临时表 */ CREATE EXTERNAL TABLE oss_orders_tmp ( order_id bigint, product_name varchar(32), price double, total_amount double, created_date date) STORED AS TEXTFILE LOCATION 'oss://xxxxxx/dla_demo/y=${year}/m=${month}/d=${day}' TBLPROPERTIES('auto.create.location'= 'true'); /* 备份日数据 */ insert into oss_orders_tmp SELECT * FROM dla_mysql_rds.orders where created_date = '${bizdate}'; /* 更新备份表分区信息以及删除临时表 */ msck repair table oss_orders; drop table oss_orders_tmp;
上面的SQL脚本本质上包括3个步骤来实现数据备份:
这里的巧妙之处在于,合理地利用了DMS任务编排里变量的功能,以及DLA OSS表的分区功能。临时表对应的OSS路径正好是全局备份表的一个分区路径。随着任务每日执行,变量的值会自动更新,由此产生新的OSS目录和分区,RDS MySQL的增量数据也自动地归档至新分区下。例如:RDS中created_date为2020-06-01的数据,将归档至oss://xxxxxx/dla_demo/y=2020/m=06/d=01的路径下。
最后,再介绍一下如何对任务流的调度进行配置。点击任务流空白处,调出右侧的调度配置页面。首先将该任务流的调度进行开启,而后将运行时间设为RDS MySQL的业务低峰期(如:凌晨5点),并将调度周期设为“日”。这样设置之后,该任务流将在天天的5点钟按期执行,无需人工干预。若是要查看任务流的执行历史,可点击左侧的运维中心,其中还会展现每一次执行的时间和日志。
为了节省用户手动建立和配置任务流的时间,DMS任务编排还提供了多种模板。这些模板一般包含了内置好的任务节点和SQL内容;它们从具体的场景出发,通过悉心的设计来解决实际问题,而且来源于DMS用户的真实案例,例如:第二节介绍的RDS数据周期归档OSS场景就来自于某知名跨国汽车厂商。
经过模板,用户可一键建立任务流,而后通过简单的配置,如:设置节点的目标数据库和SQL中的部分参数,便可生成可运行的任务流。目前,咱们已经上线了多个任务流模板,欢迎访问DMS任务编排的首页进行查看,咱们也将持续补充模板,让任务编排的使用更加便捷。
DMS是阿里云用户很是喜好的一款数据库工具产品,能帮助用户打通各类网络环境,对数据库进行管理和操做。除了常规的数据库增删改查和DDL操做,愈来愈多的用户须要对数据库中的数据进行归档、迁移、备份和加工。为了知足这些需求,DMS推出了任务编排功能,它打通了数据库与其余系统/存储之间的通道,让数据库再也不成为数据孤岛。此外,DMS任务编排还提供了丰富的任务类型,以及任务流和定时调度能力,能够帮助用户轻松地对数据库中的数据进行清洗加工,把数据转变成商业智能。
DMS任务编排虽然在公共云上发布不久,但已经积累了来自各个行业的众多用户,包括:互联网、零售、支付、交通、汽车、美妆等等。若是您想了解更多DMS任务编排的详细功能,欢迎登陆DMS的控制台首页进行体验,或者查看咱们的产品文档。也欢迎您扫码加入DMS的钉钉用户服务群进行交流和咨询。