
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業務庫的存儲壓力;
• 對曆史業務資料做增量歸檔;
• 對歸檔資料做分區,可按分區過濾進行高效查詢。
為滿足這三個需求,我們選擇了
服務,因為其同時打通了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服務的區域(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歸檔的資料 |
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類型的任務節點:
- 建立RDS同步Schema:在DLA中建立Scheme映射到RDS
- 建立OSS備份表:在DLA中建立OSS備份表,用于存儲曆史資料
- 備份資料:實作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個步驟來實作資料備份:
- DLA OSS中建立臨時表:臨時表oss_orders_tmp映射位置為oss_orders所在OSS之下的年/月/日目錄中,臨時表的資料會自動成為oss_orders一個分區;
- 備份日資料:直接使用insert-select SQL語句從RDS MySQL中的orders表中讀取資料(對應到DLA中的dla_mysql_rds.orders),寫入OSS中的臨時表;
- 更新分區資訊以及删除臨時表:更新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任務編排還提供了豐富的任務類型,以及任務流和定時排程能力,可以幫助使用者輕松地對資料庫中的資料進行清洗加工,把資料轉變成商業智能。
DMS任務編排雖然在公共雲上釋出不久,但已經積累了來自各個行業的衆多使用者,包括:網際網路、零售、支付、交通、汽車、美妝等等。如果您想了解更多DMS任務編排的詳細功能,歡迎登入
DMS的控制台首頁進行體驗,或者檢視我們的
産品文檔。也歡迎您掃碼加入DMS的釘釘使用者服務群進行交流和咨詢。