天天看點

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

一、cdp同步基本原理

資料內建(Data Integration)是阿裡巴巴集團提供的資料同步平台。該平台具備可跨異構資料存儲系統、可靠、安全、低成本、可彈性擴充等特點,可為 20 多種資料源提供不同網絡環境下的離線(全量/增量)資料進出通道。資料源類型的詳情請參見 支援資料源類型。

資料內建的原理:

資料內建在阿裡雲上提供一套分布式離線資料同步平台,同時提供一套抽象化的資料抽取插件(稱之為Reader)、資料寫入插件(稱之為Writer),并基于此架構設計一套簡化版的中間資料傳輸格式,進而達到任意結構化、半結構化資料源之間資料傳輸之目的。從使用者角度來看,一個資料內建同步任務運作Job示意圖如下所示:

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

上述中,紅色虛箭頭是代表通過collector狀态收集器監控資料傳回到髒資料管理伺服器進行資料分析,灰色方向箭頭代表資料流向。DI Service主要是包含資料總管、Job管理器、髒資料管理器、分布式服務、鑒權服務等。Job Container主要是将資料內建運作任務分成若幹個task,然後通過scheduler排程管理。TaskGroup Container主要是資料抽取通過資料通道(channel)将資料寫入。

• 使用資料內建Job啟動API,向資料內建服務端發起調用,送出一個離線資料同步Job。

• 資料內建收到Job API請求後,将負責做必要的安全和權限校驗,待校驗通過後,資料內建會下發相應的Job到執行叢集節點啟動離線資料同步任務。

• Job啟動後,根據您提供的源端(Reader)、目的端(Writer)的配置資訊,加載并初始化相關插件,連接配接兩端資料源,開始資料同步工作。

• Job運作過程中,将随心跳向資料內建彙報目前進度、速度、資料量等關鍵運作名額,可根據Job的狀态API實時擷取該Job運作狀态,直至Job運作結束(成功或者失敗)。

流程概述

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

步驟1:資料源端建立表。

步驟2:新增資料源。

步驟3:向導模式或腳本模式配置同步任務。

步驟4:運作同步任務,檢查目标端的資料品質。

因為DRDS不支援存儲過程,造一張實際生産的表有些複雜,是以采用通過RDS建立表資料,再導入到DRDS的方式

二、測試表準備:

通過RDS建立一張實際生産的表,資料量為一億行左右(主鍵為自增)

通過存儲結構插入資料(業務隻需要天數是随機的):

delimiter

dropprocedurehuayu2;CREATEPROCEDUREhuayu2()begindeclarevarint;setvar=0;whilevar<100000000doinsertintotpcsbillrecievehuayutestselectnull,1234567,210025002110010114117029000016,0,null,0,null,null,null,0,0,null,null,0,null,null,null,21100101,null,null,null,null,null,null,null,21002500,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,CONCAT(2018,′−′,′03′,′−′,LPAD(FLOOR(1+(RAND()∗31)),2,0),′′,′14:54:04′),null,null,′2017−11−1014:54:04′,null,null,null,2,4,null,null,null,null,null,0,null,null,null,null,null;setvar=var+1;endwhile;enddropprocedurehuayu2;CREATEPROCEDUREhuayu2()begindeclarevarint;setvar=0;whilevar<100000000doinsertintotpcsbillrecievehuayutestselectnull,1234567,210025002110010114117029000016,0,null,0,null,null,null,0,0,null,null,0,null,null,null,21100101,null,null,null,null,null,null,null,21002500,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,CONCAT(2018,′−′,′03′,′−′,LPAD(FLOOR(1+(RAND()∗31)),2,0),″,′14:54:04′),null,null,′2017−11−1014:54:04′,null,null,null,2,4,null,null,null,null,null,0,null,null,null,null,null;setvar=var+1;endwhile;end

三、測試要求

通過mysqldump在DRDS建立導入的表,以天為分表鍵,分表鍵的值是随機分布在3月1日-3月31日的。

将源表按分表鍵做拆分,1天拆成1個任務,并發向目标表裡進行同步,同時目标表按天做分區,找到最佳并發量。

注意:分庫鍵的選擇為自增主鍵,不能是固定,否則hash的時候隻落在一個庫裡面,分表鍵也是随機的日期,這樣資料就能均衡的分布在各個庫裡面

四、具體實施步驟

1、将RDS的表導入到測試環境DRDS

mysqldump –urds_xncs_qps8 –p –P3306 –h 10.1.1.1 database test1 –t > /home/hy.sql

這裡加上了-t參數,目的是不備份表的結構,這樣做的好處是,導入到DRDS的時候,在DRDS端建一個相同名字的資料庫,并且可以自定義分庫分表鍵,這樣就省略了再次去修改備份的.sql檔案而達到分庫分表的目的。當然,如果隻是需要一個單表,那就複制表結構跟資料就好了           

2、 将複制的表資料導入到DRDS

2.1、 通過mysql -udrds_uat_pcs –P3306 –h10.3.3.3 drds_uat_pcs -p < /home/hy.slq

2.2、 進入到目标表所在的資料庫,執行source /home/hy.sql

這兩種方式大同小異,第一種稍微快些,第二種會有過程在螢幕上展示。習慣用第二種

在剛開始導入的時候會一些報錯,但是對實際的導入不會影響

3、具體測試

資料量:

mysql> select count(*) from t_pcs_bill_recieve_huayutest ;
count(*)
78322075

1、 一個工作流,分十個同步任務執行,

每個同步任務where條件對應3天,每一個同步任務對應一個分區,共10個分區

最大速率上線10M/s,

結構圖:

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

各個任務耗時:

1、========================================================================

任務啟動時刻 : 2018-03-28 11:47:15 任務結束時刻 : 2018-03-28 11:57:28 任務總計耗時 : 612s 任務平均流量 : 1.69MB/s 記錄寫入速度 : 20753rec/s 讀出記錄總數 : 12638734 讀寫失敗總數 : 0

2、========================================================================

任務啟動時刻 : 2018-03-28 11:47:15 任務結束時刻 : 2018-03-28 11:56:18 任務總計耗時 : 543s 任務平均流量 : 1.14MB/s 記錄寫入速度 : 14038rec/s 讀出記錄總數 : 7580943 讀寫失敗總數 : 0

3、========================================================================

任務啟動時刻 : 2018-03-28 11:47:17 任務結束時刻 : 2018-03-28 11:56:23 任務總計耗時 : 545s 任務平均流量 : 1.14MB/s 記錄寫入速度 : 14004rec/s 讀出記錄總數 : 7576202 讀寫失敗總數 : 0

4、========================================================================

任務啟動時刻 : 2018-03-28 11:47:17 任務結束時刻 : 2018-03-28 11:56:26 任務總計耗時 : 548s 任務平均流量 : 1.13MB/s 記錄寫入速度 : 13933rec/s 讀出記錄總數 : 7579645 讀寫失敗總數 : 0

5、========================================================================

任務啟動時刻 : 2018-03-28 11:47:10 任務結束時刻 : 2018-03-28 11:56:17 任務總計耗時 : 546s 任務平均流量 : 1.14MB/s 記錄寫入速度 : 13979rec/s 讀出記錄總數 : 7576799 讀寫失敗總數 : 0

6、========================================================================

任務啟動時刻 : 2018-03-28 11:47:15 任務結束時刻 : 2018-03-28 11:56:28 任務總計耗時 : 553s 任務平均流量 : 1.12MB/s 記錄寫入速度 : 13774rec/s 讀出記錄總數 : 7575981 讀寫失敗總數 : 0

7、========================================================================

任務啟動時刻 : 2018-03-28 11:47:17 任務結束時刻 : 2018-03-28 11:56:18 任務總計耗時 : 541s 任務平均流量 : 1.15MB/s 記錄寫入速度 : 14115rec/s 讀出記錄總數 : 7579924 讀寫失敗總數 : 0

8、========================================================================

9、========================================================================

任務啟動時刻 : 2018-03-28 11:47:15 任務結束時刻 : 2018-03-28 11:56:27 任務總計耗時 : 551s 任務平均流量 : 1.13MB/s 記錄寫入速度 : 13856rec/s 讀出記錄總數 : 7579604 讀寫失敗總數 : 0

10、========================================================================

任務啟動時刻 : 2018-03-28 11:47:17 任務結束時刻 : 2018-03-28 11:55:20 任務總計耗時 : 482s 任務平均流量 : 877.38KB/s 記錄寫入速度 : 10522rec/s 讀出記錄總數 : 5050713 讀寫失敗總數 : 0

整體耗時:630秒

![image](https://yqfile.alicdn.com/8d8f3acb4098f6860aa698d56277bcdbf9c4f975.png)           

2、 一個工作流,分五個同步任務執行,

每個同步任務where條件對應6天,每一個同步任務對應一個分區,共5個分區

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

任務同步耗時:

任務啟動時刻 : 2018-03-28 14:27:49 任務結束時刻 : 2018-03-28 14:37:42 任務總計耗時 : 593s 任務平均流量 : 2.09MB/s 記錄寫入速度 : 25605rec/s 讀出記錄總數 : 15158472 讀寫失敗總數 : 0

任務啟動時刻 : 2018-03-28 14:27:53 任務結束時刻 : 2018-03-28 14:37:36 任務總計耗時 : 583s 任務平均流量 : 2.12MB/s 記錄寫入速度 : 26093rec/s 讀出記錄總數 : 15160230 讀寫失敗總數 : 0

任務啟動時刻 : 2018-03-28 14:27:43 任務結束時刻 : 2018-03-28 14:37:33 任務總計耗時 : 589s 任務平均流量 : 2.10MB/s 記錄寫入速度 : 25775rec/s 讀出記錄總數 : 15156082 讀寫失敗總數 : 0

任務啟動時刻 : 2018-03-28 14:27:45 任務結束時刻 : 2018-03-28 14:37:36 任務總計耗時 : 591s 任務平均流量 : 2.10MB/s 記錄寫入速度 : 25729rec/s 讀出記錄總數 : 15154873 讀寫失敗總數 : 0

任務啟動時刻 : 2018-03-28 14:27:43 任務結束時刻 : 2018-03-28 14:38:01 任務總計耗時 : 617s 任務平均流量 : 2.34MB/s 記錄寫入速度 : 28768rec/s 讀出記錄總數 : 17692418 讀寫失敗總數 : 0

整體耗時:629秒

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

3、 一個工作流,分十五個同步任務執行,

每個同步任務where條件對應2天,每一個同步任務對應一個分區,共15個分區

![image](https://yqfile.alicdn.com/068c1c56b16baa1c3cc270eb286f7d46ff1a8990.png)           

總體耗時:623秒

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

4、 一個工作流,分一個同步任務執行

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

同步任務耗時:

任務啟動時刻 : 2018-03-28 15:42:05 任務結束時刻 : 2018-03-28 15:57:16 任務總計耗時 : 910s 任務平均流量 : 7.02MB/s 記錄寫入速度 : 86257rec/s 讀出記錄總數 : 78322075 讀寫失敗總數 : 0

總耗時:928秒

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

5、 一個工作流,分三個同步任務執行

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

總耗時:699秒

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

6、 一個工作流,分四個同步任務執行

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

總耗時:672秒

DRDS到MaxCompute(原ODPS)資料歸檔性能優化測試

測試結果:

并發數    10        5        15       1        3       4         總耗時    630秒    629秒    623秒    928秒    699秒    672秒         并發數    1         3        4        5        10       15         總耗時    928秒    699秒    672秒    629秒    630秒    623秒           

初步結論:

在并發為5、10、15的情況下,同步資料的速率基本沒有變化630秒左右,在并發為1、2、3、4的情況下,速率由930秒提升到630秒左右,進而可以得出結論,在并發為5的情況下,同步速率已經達到最大,再增加并發對于速率的增加效果不明顯。

轉自袋鼠雲

繼續閱讀