數據庫是企業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的釘釘用戶服務羣進行交流和諮詢。