新聞中心
翼支付云原生數(shù)據(jù)開發(fā)與治理平臺實踐
作者:尹春光 2023-04-12 07:26:58
云計算
云原生
大數(shù)據(jù) 本文主要分享翼支付在大數(shù)據(jù)平臺建設與研發(fā)方面的經(jīng)驗。

10年積累的網(wǎng)站制作、成都網(wǎng)站制作經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先建設網(wǎng)站后付款的網(wǎng)站建設流程,更有通渭免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
本次分享分為四大部分,第一部分總體介紹翼支付公司概況和業(yè)務,在數(shù)據(jù)治理過程面臨的場景、目標、挑戰(zhàn);第二部分介紹數(shù)據(jù)開發(fā)與治理平臺,其中涉及到的任務開發(fā)與雙環(huán)境部署運行;第三部分介紹數(shù)據(jù)平臺的架構,分享在系統(tǒng)架構、調(diào)度引擎選型、數(shù)據(jù)總線、質(zhì)量監(jiān)控與資源隔離、計算優(yōu)化等實踐經(jīng)驗;第四部分與大家共同探討未來面臨的問題和可以優(yōu)化的方面,展望更優(yōu)的平臺目標。
一、翼支付公司與業(yè)務介紹
?天翼電子商務有限公司(以下簡稱“翼支付”)是中國電信集團有限公司的成員企業(yè),是國資委雙百改革和發(fā)改委第四批混改“雙試點”企業(yè),也是“雙試點”企業(yè)中唯一的金融科技公司。公司以翼支付 APP 為載體,面向 7000 萬月活用戶,提供民生繳費、消費購物、金融理財?shù)确諆?nèi)容,依托區(qū)塊鏈、云計算、大數(shù)據(jù)、人工智能等技術,賦能超 1000 萬家線下商戶門店及 170 余家線上知名電商。秉持“響應監(jiān)管、服務民生、資源共享、合作多贏”的理念,聚焦“開放、安全、便捷”的核心產(chǎn)品力,翼支付堅持通過服務投入與產(chǎn)品升級,構建貼合需求的管理與業(yè)務體系,以交流融合的業(yè)務實踐,推動產(chǎn)業(yè)各方實現(xiàn)數(shù)字化轉(zhuǎn)型。
構建數(shù)據(jù)開發(fā)與治理平臺的業(yè)務場景:滿足數(shù)倉、各業(yè)務部門快速開發(fā)、離線計算、數(shù)據(jù)集成、實時數(shù)據(jù)開發(fā)、數(shù)據(jù)服務等功能,提升數(shù)據(jù)開發(fā)與治理效率。
我們的目標:構建先樞-數(shù)據(jù)開發(fā)與治理平臺,集成數(shù)據(jù)集成、離線計算、實時計算、數(shù)據(jù)服務,提供一個一體的集成化開發(fā)平臺,一站式滿足數(shù)據(jù)開發(fā)人員研發(fā)訴求。
我們所面對的挑戰(zhàn):海量數(shù)據(jù)處理、高并發(fā)請求、低延遲時效性?、業(yè)務多樣性、場景復雜性。
二、數(shù)據(jù)開發(fā)與治理平臺介紹
1、任務開發(fā)流程
任務開發(fā)首先需要創(chuàng)建業(yè)務流程,這里的業(yè)務流程(Flow)用來管理一組任務,任務主要是數(shù)倉的離線調(diào)度,涉及到數(shù)據(jù)集成、發(fā)布以及 SparkSQL 的離線任務。在開發(fā)完任務腳本之后,再進行任務核心參數(shù)的設置,比如運行的優(yōu)先級隊列、任務的相互依賴關系、運行參數(shù),在配置完參數(shù)后,接著對任務可以測試執(zhí)行,測試運行通過后可以對任務進行上線。這里任務以業(yè)務流程(Flow)為單位進行上線,上線完成后,交給管理員的任務審核,審核主要檢查任務消耗資源、并行度、開發(fā)規(guī)范等,審核通過后發(fā)布到生產(chǎn)環(huán)境中。發(fā)布到生產(chǎn)環(huán)境后,通過提交到調(diào)度引擎進行日常定時調(diào)度工作。
數(shù)據(jù)開發(fā)中包含了一些功能,在畫布中新建業(yè)務流程,拖拽相關任務節(jié)點到畫布上,進行任務節(jié)點依賴配置。根據(jù)業(yè)務分類,提供了一系列任務開發(fā)功能,包含了五種任務類型:
① 數(shù)據(jù)同步:包含像 Oracle、OceanBase、Mysql、SFTP、Hbase 的數(shù)據(jù)接入與發(fā)布;
② Spark任務:SparkSQL 的離線計算;
③ 機器學習:AI 模型任務;
④ Kylin 任務:調(diào)度 Kylin 數(shù)倉 job;
⑤ 觸發(fā)型任務:滿足外部平臺的接口觸發(fā)數(shù)據(jù)治理平臺啟動數(shù)據(jù)任務,比如外部系統(tǒng)進行人群圈選數(shù)據(jù)推送、其他數(shù)據(jù)加工相關工作。
SparkSQL 任務開發(fā)編輯器頁面,包含的功能有:
① 新建 SparkSQL 任務:通過拖拽建立 SparkSQL 任務節(jié)點并編寫腳本,完成編輯后,可通過語法校驗,提示 SQL 編寫報錯問題;
② 單次執(zhí)行:Spark 任務提交到集群運行,測試通過后,可以進行提交,最終保存,經(jīng)過任務審核后,即可部署到生產(chǎn)進行運行;
③ 自動任務依賴配置:系統(tǒng)會自動通過 SQL 語法解析到任務來源表,數(shù)倉按照統(tǒng)一開發(fā)規(guī)范,每一個任務有唯一的去向表,做到任務之間最細粒度統(tǒng)一,便于管理,來源表可以有多個,通過 SQL 解析拿到對應源表,通過任務解析,找到上下游節(jié)點,自動生成邊關系;
④ 手動添加依賴:通過手動搜索任務,添加任務到依賴上;
⑤ SparkSQL 權限解析:根據(jù)從元數(shù)據(jù)配置的用戶相關權限,進行用戶對應數(shù)據(jù)庫表的操作權限;
⑥ 血緣關系:如圖展示一個任務流程 Flow 下面的所有任務跨 Flow 血緣關系。
早期數(shù)據(jù)開發(fā)與治理平臺是單環(huán)境架構,但在平臺任務上線時,會遇到一些偶發(fā)問題,比如線上任務緊急修復上線時,SQL 腳本未經(jīng)過審核,導致任務會占用過多資源,還有 SQL 相關代碼不規(guī)范等問題,因此使用了雙環(huán)境上線流程解決腳本流程規(guī)范。
所有的 Flow 在開發(fā)和生產(chǎn)各有一份,通過鏡像的操作,每個 Flow 和 Task 有相關的 code 標識一一對應,唯一區(qū)別是開發(fā)環(huán)境的 Flow 的 code 有 dev 前綴,比如開發(fā)環(huán)境任務 code 為 dev0001,那么生產(chǎn)環(huán)境的任務 code 對應為 0001,方便系統(tǒng)和用戶區(qū)分。
在調(diào)度層面,這樣的區(qū)分方式可以避免底層調(diào)度引擎、數(shù)倉層感受到上層的變化,比如 dev 環(huán)境的 Flow 有相關任務在運行,而其對應的生產(chǎn)任務也在運行,但是通過唯一的任務 code 進行區(qū)分,能使這些任務同時運行在兩個環(huán)境,生產(chǎn)正常調(diào)度,開發(fā)環(huán)境并行開發(fā)。
在底層設計層面,開發(fā)環(huán)境去掉前綴,即可映射到生產(chǎn)環(huán)境任務,同時在應用層可以統(tǒng)一存儲,也就是生產(chǎn)環(huán)境和開發(fā)環(huán)境的 Flow 和 Task,可以分別在一張 Flow 表和 Task 表中進行存儲,簡化設計,令底層數(shù)倉和調(diào)度層無感知。
版本管理為了滿足數(shù)倉開發(fā)腳本的、任務之間依賴、業(yè)務流程配置、調(diào)度更改的版本回溯的需求,針對所有 Task 和 Flow 進行版本管理,再發(fā)布到生產(chǎn),生產(chǎn)同步到開發(fā)環(huán)境,都可選擇任意版本進行發(fā)布和回滾。
三、平臺技術架構實踐
1、整體架構概述
上圖展示了整體系統(tǒng)架構:上面模塊是應用層,下面是調(diào)度層。
配置管理:包含業(yè)務空間管理、成員管理和庫映射管理。空間、成員管理是對應部門人員之間的資源、數(shù)據(jù)權限隔離;庫映射管理,適用于解決來源庫與去向庫映射關系,比如數(shù)據(jù)接入時,落到哪些倉庫,可以通過配置進行管理;
數(shù)據(jù)開發(fā):包含數(shù)據(jù)集成、離線開發(fā)、數(shù)據(jù)發(fā)布、實時作業(yè)和 FlinkSQL 指標開發(fā)。
任務管理:包含業(yè)務流程管理、任務上下線、任務重跑補數(shù)操作以及任務的血緣依賴管理。
外部服務:元數(shù)據(jù)功能,主要用于在用戶創(chuàng)建表后,對表詳情進行查看,以及從中獲取所有表、庫、權限;用戶中心功能,主要用于配置相關平臺用戶賬戶管理和各子平臺的權限管理;AI 服務功能,主要用于管理機器學習模型任務,通過接口調(diào)用該機器學習服務;質(zhì)量作業(yè)功能,主要用于在數(shù)據(jù)任務開發(fā)完成后,核驗數(shù)據(jù)的質(zhì)量。
調(diào)度層:Airflow 是調(diào)度的核心模塊,橙色部分為圍繞 Airflow 擴展開發(fā)的組件,包括任務管理,自定義 Operator(支持 SparkSQL 和數(shù)據(jù)交換相關的任務提交)。
2、調(diào)度引擎
關于調(diào)度引擎,最初對比的有 Zeus、Airflow、Azkaban。Zeus 支持分布式調(diào)度,但對 Hadoop、Spark、數(shù)據(jù)交換調(diào)度不完善,社區(qū)活躍度下降;Airflow 的 Python 擴展方便,功能完善穩(wěn)定,2.X 支持多 Master 分布式調(diào)度,社區(qū)活躍;Azkaban,由 Java 開發(fā),但調(diào)度任務功能相對簡單;最終選擇 Airflow1.10(技術選型時 2.x 版本還未穩(wěn)定)作為生產(chǎn)離線調(diào)度引擎。
Airflow 目前僅提供一些 Web 界面上的管理操作,沒有提供相關 Rest 接口,用戶將 Airflow 的 DAG 文件放在 DAG Directory,Scheduler 進行掃描,會把對應的 DAG 的元數(shù)據(jù)存儲到 MetaData 的 DataBase,DAG 對應上層應用的業(yè)務流程 Flow,管理了一組任務。Workers 支持擴展,分布式部署多節(jié)點。在生產(chǎn)環(huán)境中 Airflow 主要適合使用 CalaryExector 部署,本地環(huán)境使用 LocalExector 進行任務的調(diào)度。在翼支付生產(chǎn)中使用 Redis 作為 Celery 任務緩存隊列,來加速任務調(diào)度性能。
Airflow 1.10 提供的 WebApi 比較少,在原生功能中使用 Git 或 Ceph 進行 DAG 文件存儲,用戶需要自己生成 DAG 文件放到集群節(jié)點,從流程來看引入對應組件,復雜性會提高,用戶側(cè)需要涉及生成對應的 DAG,上層應用生成 DAG 及業(yè)務流程管理工作。為了解決這些問題,通過擴展開發(fā) Rest 接口功能,管理 DAG 的生成和 DAG 任務元數(shù)據(jù),上面應用層通過 Rest 參數(shù)傳遞,幫助屏蔽底層調(diào)度引擎相關工作。DAG 文件上傳到對應 Scheduler 和 Worker 節(jié)點后,Scheduler 會以 5 分鐘為周期掃描,掃描到任務 DAG,才能完成任務的上線,之后進行 Dag 上線的回調(diào)動作,通過底層完成上線回調(diào)上層應用,避免了上層應用對上線的任務定期輪詢狀態(tài),DagWorker 等待 DAG 上線成功進行回調(diào)完成任務的上線。
對于 DAG 文件的生成如上圖所示。
external_task:對應外部任務,task >> task2,表示任務 2 依賴任務 1,同時也依賴了外部任務 ExternalTask1。整個 Python 文件就是 Airflow 調(diào)度的 DAG,AirFlow 內(nèi)部會解析其中的 DAG 及其依賴關系,生成調(diào)度的元數(shù)據(jù)。
3、數(shù)據(jù)總線
我們使用 Datax 作為數(shù)據(jù)總線的核心模塊,基于以上模板文件來執(zhí)行任務,其調(diào)度是單機運行,但是 Datax 擴展性很好,并且預留了任務調(diào)度器接口,擴展 Source、Sink 以及數(shù)據(jù)轉(zhuǎn)換邏輯、過濾開發(fā),基于 Datax 封裝了數(shù)據(jù)總線的任務管理功能。用戶在頁面輸入?yún)?shù),通過 Reader、Writer 插件來渲染生成 Datax 模板文件,Datahub 模塊將文件通過 Yarn api 提交給對應的 Yarn 集群,之所以選用 Yarn 調(diào)度,是因為 Datax 是單機運行,不能做好多節(jié)點任務的調(diào)度。對比了 YarnCluster 與 K8S,暫時離線計算任務沒有完全 K8S 容器化,采用 Yarn 的統(tǒng)一大數(shù)據(jù)離線調(diào)度任務提交到 Yarn 集群離線計算。
4、資源隔離、計算優(yōu)化
資源隔離主要是對實時離線、不同任務之間集群隔離,比如數(shù)倉之間的業(yè)務轉(zhuǎn)換、推數(shù)、任務分發(fā)不同類型作業(yè)。
數(shù)倉核心任務置于一級隊列,其他部門基于其上,劃分了子任務隊列,有核心、重要、普通,三級優(yōu)先級隊列的資源隔離。
動態(tài)限流低優(yōu)先級任務保障核心任務并發(fā),當任務隊列滿了,先不提交普通任務,普通任務大多凌晨調(diào)度,新任務的限流可以保障普通任務的并發(fā)限制,避免普通任務優(yōu)先調(diào)度,占用資源,核心任務需要等待計算資源。
在凌晨之前做普通任務的監(jiān)控,避免普通任務調(diào)度之前被其他日常任務運行資源占滿。
Spark 任務的優(yōu)化包括:小文件治理,任務優(yōu)化主要是資源優(yōu)化、數(shù)據(jù)傾斜、Join 優(yōu)化,以及任務拆分。
5、數(shù)據(jù)質(zhì)量監(jiān)控
質(zhì)量監(jiān)控主要在五大方面:及時性、準確性、完整性、一致性以及數(shù)據(jù)有效性進行分析改進。
數(shù)據(jù)質(zhì)量監(jiān)控的架構如上圖所示,上面會配置相關的質(zhì)量監(jiān)控規(guī)則以及監(jiān)控任務,質(zhì)量規(guī)則分為強規(guī)則和弱規(guī)則,針對強規(guī)則進行任務熔斷,對于弱規(guī)則進行事后分析改進。規(guī)則通過 SQL 對任務的數(shù)據(jù)一致性校驗,整個規(guī)則任務以 SparkSQL 作業(yè)提交上進行計算生成規(guī)則報告,最后進行分析改進任務。
上面是作業(yè)的運行詳情,質(zhì)量作業(yè)通過 SQL 模板生成任務、作業(yè)名稱,每條模板生成一條規(guī)則與記錄,針對單個表會啟動多個規(guī)則進行校驗,單表的多字段校驗,輸出規(guī)則。若針對一張表有十個規(guī)則,第一個優(yōu)先規(guī)則不滿足,就會中斷校驗,直接返回流程。
6、云原生實踐
數(shù)據(jù)開發(fā)平臺流程涉及到實時、離線、數(shù)據(jù)總線、質(zhì)量作業(yè)、監(jiān)控、先覺 AI 模型,平臺服務基于微服務架構進行拆分到不同子服務,滿足業(yè)務快速迭代,從開發(fā)初期一直到最后上線經(jīng)過多版本開發(fā),模塊變動對其他服務影響比較大,傳統(tǒng)的大后端服務開發(fā)模式進行開發(fā),模塊的耦合影響重,通過對各個服務的拆分很好的解決了這些問題。
通過公司 KCS 的 CI/CD 平臺提供服務的快速測試,迭代,部署上線?;A設施配有統(tǒng)一監(jiān)控告警功能及自動擴容能力,提升服務穩(wěn)定性。
整個開發(fā)平臺迭代中,也伴隨著數(shù)據(jù)治理流程,工作成效比較顯著。整體計算成本降低 87%,模型特征計算時效提前 7.5 小時,看板數(shù)據(jù)查詢時效提升 40 倍。
四、未來展望
數(shù)據(jù)開發(fā)與治理平臺拆分的服務較多,與離線調(diào)度緊密相關,需要更好的性能與擴展。
可觀測性:可以及時發(fā)現(xiàn)服務的不穩(wěn)定性問題。比如當任務越來越多,任務之間狀態(tài)會有并發(fā)沖突,帶來的性能問題需要及時解決。
計算效率:目前有比較多的 SparkSQL 作業(yè),需要根據(jù)專家經(jīng)驗和實際場景針不斷優(yōu)化離線 SQL。
異地容災:現(xiàn)在的大數(shù)據(jù)集群部署在同一個機房,包括離線、實時計算。單機房會有異地備份訴求,需要多機房進行數(shù)據(jù)災備,以及實時計算跨集群、在線數(shù)據(jù)服務應用實現(xiàn)跨機房容災。
五、問答環(huán)節(jié)
Q1:數(shù)據(jù)權限是怎樣管控和實現(xiàn)的?
A1:數(shù)據(jù)權限分為兩塊,用戶在平臺所屬組織的權限與空間管理的那塊進行了部分綁定,用戶所屬部門的操作權限限定了平臺的數(shù)據(jù)權限;在元數(shù)據(jù)模塊有設置用戶對庫表的相關權限,UDF 的需要加解密的敏感數(shù)據(jù)也會關聯(lián)到用戶,用戶新建任務,其 SQL 解析后會涉及相關的表,與相關表的操作權限進行校驗綁定。
Q2:數(shù)據(jù)治理是怎樣做的,如何提升效果?
A2:早期的煙囪式的開發(fā),計算成本相對高,計算性能較低,數(shù)倉針對其任務,伴隨著數(shù)倉數(shù)據(jù)治理過程的需求,平臺迭代研發(fā)滿足數(shù)倉的開發(fā)作業(yè)的流程,平臺針對調(diào)度任務的性能以及計算任務的性能優(yōu)化作了相關支持,整體計算資源可以達到更好的效果。
當前名稱:翼支付云原生數(shù)據(jù)開發(fā)與治理平臺實踐
本文URL:http://m.5511xx.com/article/dhpjhcg.html


咨詢
建站咨詢
