您可以使用云工作流和函數計算輕松構建ETL離線數據處理系統,實現更靈活、成本更低的數據處理解決方案。您無需管理底層服務器資源,從而更加聚焦于業務邏輯本身。
背景信息
隨著云計算、人工智能、物聯網等新技術的應用普及,人類產生的數據呈現出了爆發式增長的趨勢,對數據處理的需求能力也提出了越來越高的要求。數據成了重要資產,收集、處理數據的能力成為了核心競爭力,例如,應用服務的運行監控、運營數據的分析以及深度學習的數據過濾、預處理等,這些對已有數據的處理能力將直接影響服務的運營效率。我們可以使用現成的ETL系統完成上述目的,但是在很多情況下您可能希望自建服務。例如:
您的數據處理業務不定時運行,希望在無任務時,不消耗任何資源。
您的數據處理需求只有簡單的幾個步驟,使用自建服務更迅速。
您的數據處理業務流程有較多的自定義步驟,但現成系統靈活性不足,自建才能滿足業務需求。
您不希望消耗過多精力搭建和維護系統中使用的各類開源數據處理模塊,但希望在大并發數據處理請求的場景下能夠有良好的性能表現。
如果您有上述需求,或者希望實現一個高度靈活、高度可靠、低成本、高性能的離線數據處理系統,那么本文提供的Serverless技術方案將是您的最佳選擇。
使用場景
假設我們有一批待處理數據,數據的值為data_1
或data_2
。我們的數據處理目的是統計各類數據的出現次數,并將統計結果存儲到數據倉庫中。當數據量級達到一定程度,或數據源異構的情況下,我們很難一次性通過一個進程在短時間內快速處理完成,在這種場景下,云工作流 +函數計算的組合提供了高效的解決方案。
為方便展示數據處理方面的核心能力,在數據倉庫的存儲方面,我們使用阿里云對象存儲OSS來代表各種類型的數據庫等作為基礎存儲設施。
下述方案將展示如何使用云工作流+函數計算實現一個低成本高彈性的數據處理系統。在這個系統中,函數計算將根據數據量大小動態提供底層計算資源用于數據的處理、統計等工作,云工作流將協助實現復雜業務上下游的邏輯編排。
實現原理
在一般的數據處理業務中,主要關注點如下:
數據源:需要處理的數據源。一般情況下,我們的數據往往來源于各類數據庫、文本文件(日志文件)等。在本示例中,我們使用函數生成少量數據用作功能性的展示。在實際場景中,您可以使用各類自定義的數據源作為系統數據輸入來源。
處理框架/模式:MapReduce,本示例中使用云工作流實現。
目的端:數據倉庫。在本示例中,我們使用 OSS 作為數據倉庫,即最終處理后數據的目的端。
數據處理流程:
我們首先將原始數據隨機分成3~5個shards,每個shard中包含兩種類型的數據。對每個shard先分別進行類型統計,并將中間結果存儲(Map)。最后,我們統一處理各shard的統計結果,對結果求和并存儲最終結果(Reduce)。業務流程如下:
從數據源獲取數據;
對數據按照某種規則或隨機劃分 shard;
使用MapReduce提高數據并行處理能力,對數據進行處理;
存儲至最終目的源。
結合我們所使用的阿里云服務,系統的模塊及交互關系如下圖。
前提條件
操作步驟
在函數計算應用中心一鍵部署云工作流與函數。
單擊一鍵部署跳轉到函數計算的應用中心,開始快速部署應用。
在創建應用頁面,配置以下參數,然后單擊創建并部署默認環境。
重點參數配置如下,其余參數保持默認值即可。
參數名稱
參數說明
基礎信息
部署類型
選擇直接部署。
角色名稱
如果您使用的是阿里云賬號,第一次在應用中心創建應用,則需要單擊前往授權,跳轉至角色快捷創建頁面,創建
AliyunFCServerlessDevsRole
角色,然后單擊同意授權。如果您使用的是RAM用戶,請根據頁面提示,將復制的授權鏈接給到阿里云賬號進行授權。授權完成后,單擊已完成授權。
說明如果頁面提示無法獲取角色,請聯系對應的阿里云賬號給當前RAM用戶賦予
AliRAMReadOnlyAccess
、AliyunFCFullAccess
權限。具體操作,請參見通過阿里云賬號給RAM用戶授權。
高級配置
地域
選擇應用部署的地域。
工作流名執行角色
工作流執行使用的服務角色。請提前創建角色,并為其授予AliyunFCInvocationAccess權限策略。
函數服務角色
函數計算訪問其他云服務時使用的服務角色,如果沒有特殊要求,建議使用函數計算提供的默認服務角色AliyunFCDefaultRole。
對象存儲存儲桶名
填寫與工作流和函數相同地域下的Bucket名稱。
等待1~2分鐘后,應用部署成功,系統將自動創建3個函數以及對應的1個工作流
etl-data-processing-2q1i
,您可以分別登錄函數計算控制臺和云工作流控制臺查看創建結果。shards-spliter: 用于讀取數據源,并依據某種規則對源數據劃分shard,將shard返回給工作流。
mapper: MapReduce框架中的Map函數。在該函數中針對傳入的shard數據進行過濾、清洗、計算。往往一次數據處理流程中將會根據shard數并行生成多個函數實例以提高數據處理速度。每個map函數處理結束后,結果將會被存儲到OSS的特定目錄下。
reducer: MapReduce框架中的Reduce函數。在該函數中針對map的處理結果進行集成、合并,并推送最終結果至OSS。
您可從函數計算控制臺對應應用獲取本示例的全部代碼。
驗證結果。
登錄云工作流控制臺,然后在頂部菜單欄,選擇地域。
在工作流列表,單擊目標工作流
etl-data-processing-2q1i
,在工作流詳情頁面,選擇執行記錄頁簽,單擊啟動執行執行工作流。執行完成后,查看工作流的輸入和輸出。
登錄對象存儲OSS控制臺,查看分片內容與合并處理內容。