玩轉DB裏的數據 — 阿里雲DMS任務編排之簡介和實操

作者:同叔


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任務編排還提供了豐富的任務類型,以及任務流和定時調度能力,可以幫助用戶輕鬆地對數據庫中的數據進行清洗加工,把數據轉變成商業智能。

DMS任務編排雖然在公共雲上發佈不久,但已經積累了來自各個行業的衆多用戶,包括:互聯網、零售、支付、交通、汽車、美妝等等。如果您想了解更多DMS任務編排的詳細功能,歡迎登錄DMS的控制檯首頁進行體驗,或者查看我們的產品文檔。也歡迎您掃碼加入DMS的釘釘用戶服務羣進行交流和諮詢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章