1.任务编排介绍

数据库是企业IT系统里的重要基础设施,里面存储了大量有价值的数据资产,如:交易数据、客户数据、订单数据,等等。其实,数据库在企业里一直扮演着一个数据生产者(Producer)的角色,日积月累这些数据会形成一个巨大的宝藏。但是,随着数据库中数据量的增长和数据形态的多样化,如何对数据进行存储、迁移和加工,并挖掘出其中的价值,是许多企业面临的难题。

为解决上述问题,阿里云DMS(Data Management Service)产品近期推出了一个新功能——任务编排。无论您的数据库部署在何处(阿里云/本地IDC/其他云厂商等),是何种类型(OLTP交易型数据库/OLAP分析型数据库),DMS任务编排都能够触达您的数据库,让您轻松地对数据库中的数据进行流转、加工和变换。DMS任务编排提供的主要功能和特性包括:

  • 丰富的数据迁移能力:可实现数据库与数据库之间(如:OLTP在线库与OLAP离线库)、数据库与弹性存储之间(如:MySQL与OSS)的数据自由流动;
  • 丰富的数据加工手段:单库SQL任务、跨库SQL任务、数据迁移任务、Spark任务、数据备份与恢复服务(建设中);不仅可以通过SQL语句对单个数据库或多个数据库里的数据进行加工,还可编写Spark任务进行复杂的数据处理和AI分析;
  • 任务流和定时调度:通过可视化的方式将多个任务节点进行编排形成任务流,灵活按需设置多种不同粒度间隔的定时调度;
  • 按模板一键创建任务流:为不同的场景(如:历史数据归档到OSS)内置了任务流模板,用户可一键生成模板任务流,通过简单的配置即可应用于生产;
  • 牢靠的数据安全保障:依托DMS强大的数据安全能力,任务编排会对用户权限进行严格检查,仅限有权限的用户才能执行相应的任务。

了解了DMS任务编排的功能,你一定开始好奇用DMS任务编排能做什么?下图展示了DMS任务编排支持的四类主要场景:

场景1:数据归档

目前比较流行的有两类数据库:传统单机版数据库(如:MySQL)和云原生数据库(如:阿里云PolarDB和AnalyticDB for MySQL)。前者的存储空间是有限的,后者虽然可以对存储扩容,但也要收取较高的费用。那么,当数据库中的数据量持续增长时,该如何降低存储成本呢?许多用户希望能将数据库中的冷数据/历史数据转储到可靠又低价的存储上,如:阿里云对象存储(OSS)。现在通过DMS任务编排,可轻松实现数据库数据周期归档(如:每日/每周)到OSS的需求。同时,DMS还有好地对接了阿里云数据湖分析产品(DLA),用户可在DMS里方便地访问DLA,对归档到OSS上的数据进行即席查询和分析。

场景2:数据集成

企业的数据可能分散在不同的数据源中(如:MySQL、SQL Server),也可能分散在不同的地域(例如:北京、杭州、深圳)。导致数据分散的原因有很多,比如:业务的垂直划分、微服务、应用的本地部署等等。数据的分散不可避免,但同时许多企业又有数据集成的需求,需要将各地的数据汇聚到一起进行全局分析(如:汇总和AI分析),典型的场景就是OLTP交易库的数据同步至OLAP分析库做离线分析。通过DMS任务编排,可以轻松实现这一需求。首先,DMS打通了各种网络环境(如:阿里云VPC/经典网络,本地IDC网络),可连接至各个地域的数据源。其次,DMS支持异构数据源间的数据集成,如:RDS MySQL到AnalyticDB。此外,通过DMS任务编排,还能满足各种集成方式的需求,如:单次全量集成、周期性增量集成。

场景3:数据加工

做完数据集成之后,用户通常还要对汇聚的原始数据进行加工、清洗和分析,才能挖掘出其中的价值,例如:每日统计产品的用户数(UV),按周产生报表数据。DMS任务编排提供了任务流和定时调度能力,通过任务流可以将复杂加工任务进行拆解和编排,然后配置调度信息。DMS支持单次调度和周期调度(如:按日、周、月),此外还支持多类型的加工任务,用户可使用SQL进行数据加工,也可编写Spark程序进行复杂的数据处理和AI分析。通过丰富的调度配置和任务类型,DMS任务编排能满足各种简单/复杂场景的数据加工需求。

场景4:定时操作

在日常数据库的使用中,有许多DML/DDL/DCL操作需要定期执行,如:每周清理历史数据(DELETE)防止表过大、每日更新统计信息(ANALYZE TABLE)以获得更好的查询优化结果。有些数据库在内核层面已经提供了事件调度功能,如:MySQL Event,但是使用特殊的语法创建Event和维护Event都有一定的成本。DMS任务编排的调度功能提供了可视化的方式轻松创建定时任务,并且不依赖数据库引擎上的能力,因此更加简易灵活,适用范围更广。

2.任务编排实操 — DB数据周期归档

介绍完DMS任务编排的功能和使用场景,下面将以数据归档场景为例,介绍如何通过DMS任务编排和阿里云DLA服务将RDS MySQL数据周期地归档至OSS上。具体的实操步骤还可查阅DMS的使用文档

2.1 背景和需求

用户的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
);

2.2前置条件

1、已购买阿里云DLA服务,且DLA服务的区域(Region)和待归档的RDS MySQL区域一致,如:都是华东1(杭州)

2、已开通阿里云OSS服务,且服务的区域与DLA、RDS MySQL一致

3、已购买阿里云DMS服务

4、DLA实例已录入DMS中(请参考DMS实例录入)
各产品的购买要求和用途:

产品 购买产品的区域 用途
DMS 无限制 周期调度
DLA 与RDS MySQL同区域 RDS MySQL数据迁移至OSS;查询OSS上的归档数据
OSS 与RDS MySQL同区域 存储RDS MySQL归档的数据

2.3 配置任务流

下面介绍如何在DMS中操作实现RDS MySQL数据周期归档,主要包含5个步骤:

步骤1:创建DLA归档库

若要将数据归档至DLA上,首先要在DLA中创建一个用于归档的schema,用于存放归档表。在DMS首页的顶部菜单中,找到SQLConsole单库查询,并打开查询窗口,然后输入如下SQL语句并执行:

CREATE DATABASE demo_schema
WITH DBPROPERTIES (
catalog = 'oss',
location = 'oss://xxxxxx/dla_demo/'
)

步骤2:创建任务流

在DMS首页的顶部菜单中,选择数据工厂 -> 任务编排,进入任务编排的首页。在首页点击“新建任务流”,或者点击左侧tab进入开发空间,也可以快速地找到新建任务流的入口。在新建任务流的窗口,我们将任务流名称设为:rds_data_to_oss。

步骤3:配置任务节点

在任务流rds_data_to_oss中,依次新建三个DLA-SQL类型的任务节点:

  1. 创建RDS同步Schema:在DLA中创建Scheme映射到RDS
  2. 创建OSS备份表:在DLA中建立OSS备份表,用于存储历史数据
  3. 备份数据:实现RDS MySQL前一天数据的备份。

节点创建完以后,可在节点间添加连线,对节点的执行顺序进行编排,产生完整任务流。

下面对每个节点的内容进行设置:

节点1:创建RDS同步Schema

要让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白名单的配置方法可参考这个文档

节点2:创建OSS备份表

我们需要在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地址。

节点3:数据备份

该数据备份实现了将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个步骤来实现数据备份:

  1. DLA OSS中创建临时表:临时表oss_orders_tmp映射位置为oss_orders所在OSS之下的年/月/日目录中,临时表的数据会自动成为oss_orders一个分区;
  2. 备份日数据:直接使用insert-select SQL语句从RDS MySQL中的orders表中读取数据(对应到DLA中的dla_mysql_rds.orders),写入OSS中的临时表;
  3. 更新分区信息以及删除临时表:更新oss_orders元数据信息,然后删除临时表oss_orders_tmp。

这里的巧妙之处在于,合理地利用了DMS任务编排里变量的功能,以及DLA OSS表的分区功能。临时表对应的OSS路径正好是全局备份表的一个分区路径。随着任务每日执行,变量的值会自动更新,由此产生新的OSS目录和分区,RDS MySQL的增量数据也自动地归档至新分区下。例如:RDS中created_date为2020-06-01的数据,将归档至oss://xxxxxx/dla_demo/y=2020/m=06/d=01的路径下。

2.4 配置任务流调度

最后,再介绍一下如何对任务流的调度进行配置。点击任务流空白处,调出右侧的调度配置页面。首先将该任务流的调度进行开启,然后将运行时间设为RDS MySQL的业务低峰期(如:凌晨5点),并将调度周期设为“日”。这样设置以后,该任务流将在每天的5点钟定期执行,无需人工干预。如果要查看任务流的执行历史,可点击左侧的运维中心,其中还会展示每一次执行的时间和日志。

3 快速任务流构建 — 任务流模板

为了节省用户手动创建和配置任务流的时间,DMS任务编排还提供了多种模板。这些模板通常包含了内置好的任务节点和SQL内容;它们从具体的场景出发,经过悉心的设计来解决实际问题,并且来源于DMS用户的真实案例,例如:第二节介绍的RDS数据周期归档OSS场景就来自于某知名跨国汽车厂商。

通过模板,用户可一键创建任务流,然后经过简单的配置,如:设置节点的目标数据库和SQL中的部分参数,即可生成可运行的任务流。目前,我们已经上线了多个任务流模板,欢迎访问DMS任务编排的首页进行查看,我们也将持续补充模板,让任务编排的使用更加便捷。

4 总结

DMS是阿里云用户非常喜爱的一款数据库工具产品,能帮助用户打通各种网络环境,对数据库进行管理和操作。除了常规的数据库增删改查和DDL操作,越来越多的用户需要对数据库中的数据进行归档、迁移、备份和加工。为了满足这些需求,DMS推出了任务编排功能,它打通了数据库与其他系统/存储之间的通道,让数据库不再成为数据孤岛。此外,DMS任务编排还提供了丰富的任务类型,以及任务流和定时调度能力,可以帮助用户轻松地对数据库中的数据进行清洗加工,把数据转变成商业智能。

玩转DB里的数据 — 阿里云DMS任务编排之简介和实操的更多相关文章

  1. 阿里云DMS发布数据库网关服务: 打通网络限制 开启数据库统一管理的万能钥匙

    概述 阿里云数据管理DMS在云端可提供专业的数据库服务,除对标本地数据库软件的基础功能外,还包含性能诊断.数据追踪.跨实例SQL查询(含异构数据库类型之间)等专业性功能,同时提供审计安全和企业级数据库 ...

  2. 微信小程序里如何用阿里云上传视频,图片。。

    纯手写,踩了半天多的坑干出来了... 网上也有对于阿里云如何在微信小程序里使用,但是很不全,包括阿里云文档的最佳实践里. 话不多说上代码了. upvideo(){ var aliOssParams = ...

  3. 如何在DJANGO里,向有外键(一对多和多对多)的DB里插入数据?

    需要插入的数据表结构如下: class UserInfo(models.Model): user_id =models.AutoField(primary_key=True) user_name=mo ...

  4. 玩转阿里云server——安装WebserverTomcat7

    1. 以root用户身份登录阿里云server 2. 使用apt-get install安装Tomcat7 sudo apt-get install tomcat7 3.安装后.Tomcat在启动时报 ...

  5. AWS、阿里云、Azure、Google Cloud、华为云、腾讯云 各种云服务器价格收费对比(上)

    他来了,他来了~ 他带着六家公有云厂商的资源价格走来了~ 不久前,我们上线了一款小工具——[多云成本计算器]1.0版,公众号菜单栏可以直接体验.详细介绍可以戳这里<3秒即得最低价,速石上线「多云 ...

  6. 阿里云部署Redis服务器远程连接问题

    昨天在阿里云免费领了一个月的云服务器,就着最近学的SpringBoot,准备做一个SpringBoot与Redis的整合. 因为以前用的Redis都是安装在本地的,使用过程中没遇到什么大问题,可是一旦 ...

  7. 【阿里云ACP】-02(弹性储存、对象储存OSS)

    弹性网卡 弹性网卡: 是一种可以附加到专有网络VPC类型ECS实例上的虚拟网卡.通过弹性网卡,您可以在任何阿里云地域下实现高可用集群搭建.低成本故障转移和精细化的网络管理. 弹性网卡属性: 属性 规格 ...

  8. 【阿里云ACP】-01(阿里云综述、弹性计算)

    课程能力 课程范围 ECS 磁盘 实例 磁盘 快照 镜像 网络 安全组 AS 伸缩组 伸缩配置 伸缩规则 伸缩活动 伸缩触发任务 伸缩模式 冷却时间 SLB 定义 实现原理 支持的协议 绘画保持 健康 ...

  9. 阿里云服务器 ECS Ubuntu系统安装配置

    1. 登陆服务器 系统开通成功后手机会收到阿里云发来的短信,包含公网IP及root登录密码. WEB管理后台方式 可通过阿里云管理后台选择“连接管理终端…”进行登录 提示输入VNC密码 登录成功后显示 ...

  10. 阿里云重磅发布DMS数据库实验室 免费体验数据库引擎

    2月27日,阿里云数据管理DMS发布年度巨献——数据库实验室,用户可在该实验室环境下免费体验数据库引擎.以及DMS各项产品功能.数据库实验室是DMS所提供的体验空间,免费赠送数据库引擎资源. 用户只需 ...

随机推荐

  1. 修改Tomcat服务器Server Locations

    首先双击我们集成好的Tomcat服务器  修改Server Locations选项  Specify the server path (i.e. catalina.base) and deploy p ...

  2. Spring之事务传播属性

    在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量. 在使用Spring时,大部分会用到他的声明式事务,简单的在配置文件中进行一些规则 ...

  3. 3DCAT云流送技术如何搅动各大行业

    在不久前结束的数字会展上,3DCAT展位的实时云流送技术技惊四座,带来不一样的视觉体验,到访的客户都无法分辨这些数字内容是在本地还是云端运行的,每一个粒子都真实可见,有现场的参观者瞪大了双眼,直呼不可 ...

  4. linux下永久添加静态路由-不同

    linux下永久添加静态路由-不同 添加路由的命令: 1,route add route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0#添加一 ...

  5. 记录--Vue3+TS(uniapp)手撸一个聊天页面

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Vue3+TS(uniapp)手撸一个聊天页面 前言 最近在自己的小程序中做了一个智能客服,API使用的是云厂商的API,然后聊天页面.. ...

  6. 记录--教你用three.js写一个炫酷的3D登陆页面

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言: 该篇文章用到的主要技术:vue3.three.js 我们先看看成品效果: 高清大图预览(会有些慢): 座机小图预览: 废话不多说, ...

  7. golang gc的内部优化

    今天讲一个常见的gc compiler(也就是官方版本的go编译器和runtime)在垃圾回收的扫描标记阶段做的优化. 我对这个优化的描述印象最深的是在bigcache的注释里,大致内容是如果map的 ...

  8. C#人脸对比服务(基于虹软人脸识别SDKV4.1封装)

    软件截图   项目截图 部分代码 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  9. Linux下Bochs,NASM安装和使用

    安装环境 以Ubuntu为例,先更新一下: sudo apt-get update sudo apt-get upgrade 然后安装Bochs环境: sudo apt-get install bui ...

  10. 对OpenHarmony中LiteOS的内核分析——超时原理和应用

    前言 在软件世界里面,超时是一个非常重要的概念.比如 ● 当前线程暂时休眠1秒钟,休眠结束后继续执行 ● 每5秒钟采集一下CPU利用率 ● 数据发送失败,2秒钟以后再试一试 ● 等待某种数据,但最多等 ...