興業證券基於Apache DolphinScheduler的應用實踐

来源:https://www.cnblogs.com/DolphinScheduler/p/18384752
-Advertisement-
Play Games

文 / 興業證券股份有限公司 劉洋 石良生 柳君 李致琪 本文來源於網路,如有侵權,請聯繫刪除 任務調度平臺,扮演著自動執行預設任務的重要角色,是業務開展過程中不可或缺的一環。隨著業務規模的不斷擴展,興業證券每日需要進行數以萬計的任務調度,因此,優化和提升任務調度平臺的性能與穩定性至關重要。本文通過 ...


文 / 興業證券股份有限公司 劉洋  石良生  柳君  李致琪

本文來源於網路,如有侵權,請聯繫刪除

任務調度平臺,扮演著自動執行預設任務的重要角色,是業務開展過程中不可或缺的一環。隨著業務規模的不斷擴展,興業證券每日需要進行數以萬計的任務調度,因此,優化和提升任務調度平臺的性能與穩定性至關重要。本文通過分析興業證券自身任務調度現狀,對分散式任務調度技術進行解析與探索,並總結了統一分散式任務調度平臺的實踐經驗。

file

興業證券金融科技部

總經理助理    劉洋

建設統一分散式任務調度平臺的必要性

在興業證券早期,任務調度平臺由項目組各自構建並維護,這在業務規模未產生爆髮式增長前,尚能夠滿足日常的業務需求。但隨著近年來業務量的迅猛增長,這種分散式管理的弊端開始逐漸顯現,導致開發成本日益增加、運維複雜度與日俱增。與此同時,由於各調度平臺自身功能不完善而導致的問題也日益突出。任務依賴管理及任務併發控制能力上的欠缺,給業務的正常開展帶來了一定的隱患。基於以上問題,現有的任務調度平臺迫切需要進行統一和整合,以提升系統的穩定性和高效性。通過構建一個統一分散式任務調度平臺,技術人員可以實現任務集中管理、統一監控和高效運維,從而降低運維成本,提高開發效率,確保數據的準確性和一致性(見圖1)。

file

圖1  分散式部署VS集中式部署

平臺的建設目標

經過對現有任務調度平臺的優缺點進行調研分析後,統一分散式任務調度平臺被期冀於實現以下目標和能力。

1.基礎功能要求。一是高可用性與穩定性:在部分節點故障時能無縫調度任務,確保業務流程不受干擾。二是告警機製成熟性:支持多種告警方式,並允許通過插件進行擴展。三是租戶隔離機制:任務對不同租戶進行許可權隔離,確保數據安全和操作的精確性。四是豐富的任務類型:支持多種任務類型,並允許通過插件進行擴展。五是跨環境配置相容性:支持測試環境和生產環境間一鍵配置遷移,避免手動修改配置。六是支持多維度任務調度:同時支持函數調度和進程調度,進程調度支持對任務的交付、部署及管理。

2.擴展與功能增強。一是資源線性擴展:通過水平擴展計算資源保持服務的高穩定性。二是動態任務調度:根據資源利用率、任務優先順序等因素,動態調整調度策略。三是日誌管理與分析:提供日誌收集、存儲和查詢功能,便於快速定位和解決潛在問題。四是安全性與許可權控制:確保數據的安全性和完整性,實施嚴格的許可權控制。

3.用戶體驗與集成性。一是直觀的任務編排工具:提供易用的可視化編排界面,減少依賴關係引起的錯誤。二是可擴展的API介面:允許第三方系統無縫集成,擴展平臺功能和應用場景。

4.性能與監控。一是性能監控與調優:實時監控關鍵性能指標,並根據監控結果進行針對性的優化。二是任務執行即時監控:提供直觀的任務執行狀態展示,幫助運維人員快速響應、處理異常。

5.故障處理與併發控制。一是故障轉移機制:在節點故障時,確保任務能夠無縫轉移到其他可用節點。二是併發控制策略:根據任務類型限制最大併發數,避免因併發數過高導致的性能問題。

平臺的技術方案

鑒於任務調度平臺的複雜性和高昂的建設成本,興業證券決定基於現有的成熟開源分散式任務調度平臺進行深度定製開發,以滿足特定的技術需求。經過對市場上成熟的開源產品進行詳細調研和對比分析,DolphinScheduler被挑選成為了統一分散式任務調度平臺的技術原型。興業證券通過在其基礎上進行定製化二次開發,對其部分功能進行了功能增強以及邏輯優化,實現對公司特定業務場景的最佳匹配。

平臺能力建設。(1)系統架構(見圖2)。統一分散式任務調度平臺架構設計的核心目標是保證平臺在分散式環境下的高可用及數據一致性。平臺主要由三個核心組件構成:API-Server,用於接收各類API請求;Master-Server,負責任務的智能分發以及集群節點的心跳監控;Worker-Server,專註於執行分配的任務。這三個組件均具備水平擴展能力,從而確保了系統始終維持高可用狀態。

file

圖2  系統架構設計

在功能上,為了支持Java方法任務調度,Worker-Server下游設置了Batch-Server層級用於遠程執行Java任務。通過集成Batch-ServerSDK,項目組應用便能成為Batch-Server,輕鬆獲取調度執行Java方法任務的能力。同時,該層級同樣支持故障轉移,確保任務執行的連續性與穩定性,避免因單點故障而影響整個系統的運行。項目組可以在Batch-Server上引入持久化模塊,以資料庫、緩存、文件等多種方式對任務執行結果進行持久化,實現無感前提下的冪等性,嚴格保證Java任務不會因為網路波動或其他外部因素而被重覆執行,進而極大地增強了任務執行的穩定性和可靠性。

(2)故障轉移實現。統一分散式任務調度平臺在保障平臺整體服務連續性的同時,也專註於保障具體任務的執行穩定性。

當負責執行任務的Worker-Server節點宕機時,Master-Server能夠通過Worker-Server註冊在ZooKeeper上的心跳節點及時感知到具體Worker-Server的下線行為,隨即將該Worker-Server上正在執行的任務重新分發至其他存活的Worker-Server,實現任務故障轉移,保障任務的正常執行。Java任務與其他任務類型相比,顯得更為特殊。由於其執行節點並非Worker-Server,而是Batch-Server,因此常規任務類型的故障轉移邏輯對其並不適用。

當負責執行Java任務的Batch-Server節點宕機時,負責分發此次任務的Worker-Server可通過ZooKeeper上的心跳節點感知到此次調度的Batch-Server下線,隨即挑選集群內另一臺可用的Batch-Server發起任務調度。Batch-Server在任務執行過程中使用了分散式鎖機制,即使是由於網路波動而引起的Batch-Server的“虛假下線”也不會造成多台Batch-Server上重覆執行同一任務,從而確保了任務執行的高效、穩定(見圖3)。

file

圖3  Batch-Server“虛假下線”時的故障轉移實現

當負責此次Java任務分發的Worker-Server節點宕機時,Master-Server會先按照常規故障轉移邏輯,挑選另一臺存活的Worker再次進行Java任務分發。在此過程中,新的Worker-Server會將任務回調地址由宕機的Worker-Server地址更改為本機地址,從而確保Batch-Server在任務完成後的回調請求能夠被準確無誤地發送至新的Worker-Server,而不是已經下線的Worker-Server,造成任務執行狀況異常。新的Worker-Server在分發環節會隨機挑選一臺可用的Batch-Server進行調度,但是由於先前的Batch-Server仍持有分散式鎖,因此本次調度並不具有實際效果,不會引起任務的重覆執行(見圖4)。

file

圖4  Worker-Server宕機時的故障轉移實現

憑藉精心設計的故障轉移邏輯,統一分散式任務調度平臺實現了對任務執行可靠性的保證,確保任務在各種極端情況下依然能夠被正確處理。

(3)監控能力集成。在日常開發和運維過程當中,開發人員和運維人員更關註的是那些執行出現異常的工作流和任務。他們需要快速定位指定時間範圍內的異常工作流和任務,對問題展開排查。

為了滿足這一需求,平臺配備了工作流監控與任務監控功能。這些功能能夠提供給定時間範圍和特定條件下工作流和任務的執行狀態統計信息,幫助運維人員迅速定位出現問題的工作流或任務。此外,監控頁面還支持僅關註某一收藏組下的工作流和任務,這樣用戶就可以屏蔽非重要信息,專註於關鍵任務。用戶只需在工作流定義和任務定義菜單下將特定工作流或任務添加到所選收藏組,隨後在監控頁面選擇監控該收藏組即可,從而極大地方便了用戶過濾和關註指定工作流和任務。

(4)事件驅動整合(見圖5)。任務調度平臺的核心在於實現任務的精準調度,即根據預設的邏輯條件驅動相應任務的邏輯執行。驅動邏輯執行的方式主要分為三種:請求驅動、時間驅動和事件驅動。這三種方式在觸發機制和語義表達上具有各自的特點。

file

圖5  事件驅動架構應用

事件驅動是通過事件發佈者發佈特定事件,從而去觸發事件訂閱者執行相應的處理邏輯。在事件驅動架構中,事件發佈者無需關心訂閱者的數量和處理方式。事件訂閱者通過從事件匯流排中拉取事件來觸發相應的邏輯。

常見的分散式任務調度平臺均支持以API請求驅動和定時任務時間驅動兩種方式觸發任務邏輯,但在事件驅動方面則稍顯不足。為彌補這一短板,平臺在API-Server、Master-Server和Alert-Server中集成了興業證券事件驅動SDK,可賦予它們強大的事件發佈和訂閱功能。

經過集成優化,API-Server能夠精準處理事件匯流排中任務調度相關的主題事件,靈活觸發對應的任務調度邏輯;Master-Server在完成工作流和任務執行後,能夠迅速將執行結果上報至性能分析平臺,實現高效的數據流轉;而Alert-Server則能在告警事件觸發時迅速發佈任務調度告警事件,為多個下游系統提供及時的告警處理支持。事件驅動架構的引入,不僅顯著降低了任務調度平臺與其他系統之間的耦合度,還極大地提升了系統間交互的靈活性和響應速度。

思考與展望

經過不斷的建設和大力推廣,統一分散式任務調度平臺已順利跨越兩大重要里程碑:“系統開發完成”與“生產投入使用”。任務調度平臺的核心功能已完成開發併成功部署至生產環境,為公司的日常運營提供了堅實的技術支撐。目前,首批項目組已成功將他們的調度任務遷移至該平臺,每日執行的任務量已達萬條,充分證明瞭平臺的穩定性和高效性。預計到2024年年底,調度平臺的月執行任務數將會實現百萬級的飛躍。這一規模的迅速壯大,將為公司帶來更加統一、高效式的任務調度管理,大幅減少重覆建設的成本支出,同時縮短交付周期,為公司的持續發展築牢根基。

通過對開源分散式任務調度平臺進行定製化開發,興業證券成功打造了一個集調度與監控功能於一身、為開發與運維團隊量身定製的企業級分散式任務調度解決方案。未來,平臺將致力於對以下關鍵領域的能力進行持續迭代與擴展,以適應日益複雜多變的業務場景,併為公司業務的蓬勃發展提供堅實支撐。一是深度融合DevOps流程:計劃引入DevOps流水線插件,以簡化用戶操作,使其能夠將構建完成的製品一鍵上傳至調度平臺,並快速轉化為特定類型的調度任務。這能夠幫助實現進程任務調度的便捷化,進一步縮短軟體交付周期,並顯著提升開發效率,助力公司更快速地響應市場變化,提升競爭力。二是支持擴展多種任務類型:不斷豐富平臺所支持的任務類型,為項目組提供更加多樣化的調度選項,以滿足不同業務場景下的靈活需求。由於每個項目組都有其獨特的業務邏輯和調度要求,為此平臺將會提供更加豐富、更加精細化的調度選項,確保項目組能夠根據自己的實際需求,選擇最合適的任務類型進行調度。

(此文刊發於《金融電子化》2024年7月上半月刊)

本文由 白鯨開源 提供發佈支持!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Redis概述安裝與基本數據類型 1. 什麼是NoSQL NoSQL( Not Only SQL ),意即不僅僅是SQL, 泛指非關係型的資料庫。Nosql這個技術門類,早期就有人提出,發展至2009年趨勢越發高漲。 2. NoSQL的廣泛應用 隨著大數據的興起,數據量的暴增,數據類型的豐富,傳統的 ...
  • CRISP-DM是一個數據挖掘項目規劃的開放標準流程框架模型,主要分為業務理解、數據理解、數據準備、建模、評估、部署六個階段。 ...
  • 寫在前面 今天我們繼續學習 Redis。 Redis 常用數據類型 在 Redis 中,每個存儲的鍵值對中,鍵是 String 類型,值可以是不同的數據類型。Redis 的索引是含頭含尾的。 String 記憶體模型 常用指令 設置值 SET key value: 設置一個 key/value。 MS ...
  • 一開始沒有讓自我介紹,三個項目問了兩個,就是介紹一下項目,技術棧是哪些,整個項目流程是怎麼樣的,然後提出了一些優化問題,主要是資料庫資料庫方面的,還有網路通信,總體難度自我感覺中等偏上,八股幾乎沒問,我把面試過程中基本上問到的所有問題都整理了在下麵了,附上答案,如有問題請指出。 1. 資料庫使用uu ...
  • 通過 T-SQL 語句來添加、刪除或修改鏈接伺服器配置 進行跨資料庫、跨實例或甚至跨資料庫系統的數據集成和查詢 SELECT * FROM sysservers 可以查出當前 SQL Server 實例上配置的所有鏈接伺服器的列表及其相關信息 示例使用 Transact-SQL 創建與其他 SQL ...
  • 近年來,政府將數據要素納入了經濟發展的重要指示性文件當中,數據作為一種新型生產要素,已經成為第五大生產要素。 要實現數據要素的市場效能,真正發揮數據生產要素的作用,離不開數據資產化,而數據資產化自然也離不開數據資產管理這一基礎工作。數據資產管理是釋放數據要素價值、推動數據要素市場發展的重要前提。 全 ...
  • 最近在看Apache DolphineScheduler,發現DolphinScheduler在處理任務時,通過先將任務快速的存儲在資料庫中,然後基於對應的Task,將Task放入隊列中,然後將Task進行快速消費的思路。 這種模型在很多框架中,都有體現。 我們知道在Master模塊時處理任務的核心 ...
  • 寫在前面 今天我們來學習一下 Redis 。Redis 是一個高性能的開源記憶體數據存儲系統,支持多種數據結構,如字元串、列表、集合、有序集合和哈希表。 NoSQL 概述 隨著大數據的興起,數據量的暴增,數據類型的豐富,傳統的關係資料庫在應付動態網站,特別是超大規模和高併發的純動態網站時已經顯得力不從 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...