文 / 興業證券股份有限公司 劉洋 石良生 柳君 李致琪 本文來源於網路,如有侵權,請聯繫刪除 任務調度平臺,扮演著自動執行預設任務的重要角色,是業務開展過程中不可或缺的一環。隨著業務規模的不斷擴展,興業證券每日需要進行數以萬計的任務調度,因此,優化和提升任務調度平臺的性能與穩定性至關重要。本文通過 ...
文 / 興業證券股份有限公司 劉洋 石良生 柳君 李致琪
本文來源於網路,如有侵權,請聯繫刪除
任務調度平臺,扮演著自動執行預設任務的重要角色,是業務開展過程中不可或缺的一環。隨著業務規模的不斷擴展,興業證券每日需要進行數以萬計的任務調度,因此,優化和提升任務調度平臺的性能與穩定性至關重要。本文通過分析興業證券自身任務調度現狀,對分散式任務調度技術進行解析與探索,並總結了統一分散式任務調度平臺的實踐經驗。
興業證券金融科技部
總經理助理 劉洋
建設統一分散式任務調度平臺的必要性
在興業證券早期,任務調度平臺由項目組各自構建並維護,這在業務規模未產生爆髮式增長前,尚能夠滿足日常的業務需求。但隨著近年來業務量的迅猛增長,這種分散式管理的弊端開始逐漸顯現,導致開發成本日益增加、運維複雜度與日俱增。與此同時,由於各調度平臺自身功能不完善而導致的問題也日益突出。任務依賴管理及任務併發控制能力上的欠缺,給業務的正常開展帶來了一定的隱患。基於以上問題,現有的任務調度平臺迫切需要進行統一和整合,以提升系統的穩定性和高效性。通過構建一個統一分散式任務調度平臺,技術人員可以實現任務集中管理、統一監控和高效運維,從而降低運維成本,提高開發效率,確保數據的準確性和一致性(見圖1)。
圖1 分散式部署VS集中式部署
平臺的建設目標
經過對現有任務調度平臺的優缺點進行調研分析後,統一分散式任務調度平臺被期冀於實現以下目標和能力。
1.基礎功能要求。一是高可用性與穩定性:在部分節點故障時能無縫調度任務,確保業務流程不受干擾。二是告警機製成熟性:支持多種告警方式,並允許通過插件進行擴展。三是租戶隔離機制:任務對不同租戶進行許可權隔離,確保數據安全和操作的精確性。四是豐富的任務類型:支持多種任務類型,並允許通過插件進行擴展。五是跨環境配置相容性:支持測試環境和生產環境間一鍵配置遷移,避免手動修改配置。六是支持多維度任務調度:同時支持函數調度和進程調度,進程調度支持對任務的交付、部署及管理。
2.擴展與功能增強。一是資源線性擴展:通過水平擴展計算資源保持服務的高穩定性。二是動態任務調度:根據資源利用率、任務優先順序等因素,動態調整調度策略。三是日誌管理與分析:提供日誌收集、存儲和查詢功能,便於快速定位和解決潛在問題。四是安全性與許可權控制:確保數據的安全性和完整性,實施嚴格的許可權控制。
3.用戶體驗與集成性。一是直觀的任務編排工具:提供易用的可視化編排界面,減少依賴關係引起的錯誤。二是可擴展的API介面:允許第三方系統無縫集成,擴展平臺功能和應用場景。
4.性能與監控。一是性能監控與調優:實時監控關鍵性能指標,並根據監控結果進行針對性的優化。二是任務執行即時監控:提供直觀的任務執行狀態展示,幫助運維人員快速響應、處理異常。
5.故障處理與併發控制。一是故障轉移機制:在節點故障時,確保任務能夠無縫轉移到其他可用節點。二是併發控制策略:根據任務類型限制最大併發數,避免因併發數過高導致的性能問題。
平臺的技術方案
鑒於任務調度平臺的複雜性和高昂的建設成本,興業證券決定基於現有的成熟開源分散式任務調度平臺進行深度定製開發,以滿足特定的技術需求。經過對市場上成熟的開源產品進行詳細調研和對比分析,DolphinScheduler被挑選成為了統一分散式任務調度平臺的技術原型。興業證券通過在其基礎上進行定製化二次開發,對其部分功能進行了功能增強以及邏輯優化,實現對公司特定業務場景的最佳匹配。
平臺能力建設。(1)系統架構(見圖2)。統一分散式任務調度平臺架構設計的核心目標是保證平臺在分散式環境下的高可用及數據一致性。平臺主要由三個核心組件構成:API-Server,用於接收各類API請求;Master-Server,負責任務的智能分發以及集群節點的心跳監控;Worker-Server,專註於執行分配的任務。這三個組件均具備水平擴展能力,從而確保了系統始終維持高可用狀態。
圖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)。
圖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)。
圖4 Worker-Server宕機時的故障轉移實現
憑藉精心設計的故障轉移邏輯,統一分散式任務調度平臺實現了對任務執行可靠性的保證,確保任務在各種極端情況下依然能夠被正確處理。
(3)監控能力集成。在日常開發和運維過程當中,開發人員和運維人員更關註的是那些執行出現異常的工作流和任務。他們需要快速定位指定時間範圍內的異常工作流和任務,對問題展開排查。
為了滿足這一需求,平臺配備了工作流監控與任務監控功能。這些功能能夠提供給定時間範圍和特定條件下工作流和任務的執行狀態統計信息,幫助運維人員迅速定位出現問題的工作流或任務。此外,監控頁面還支持僅關註某一收藏組下的工作流和任務,這樣用戶就可以屏蔽非重要信息,專註於關鍵任務。用戶只需在工作流定義和任務定義菜單下將特定工作流或任務添加到所選收藏組,隨後在監控頁面選擇監控該收藏組即可,從而極大地方便了用戶過濾和關註指定工作流和任務。
(4)事件驅動整合(見圖5)。任務調度平臺的核心在於實現任務的精準調度,即根據預設的邏輯條件驅動相應任務的邏輯執行。驅動邏輯執行的方式主要分為三種:請求驅動、時間驅動和事件驅動。這三種方式在觸發機制和語義表達上具有各自的特點。
圖5 事件驅動架構應用
事件驅動是通過事件發佈者發佈特定事件,從而去觸發事件訂閱者執行相應的處理邏輯。在事件驅動架構中,事件發佈者無需關心訂閱者的數量和處理方式。事件訂閱者通過從事件匯流排中拉取事件來觸發相應的邏輯。
常見的分散式任務調度平臺均支持以API請求驅動和定時任務時間驅動兩種方式觸發任務邏輯,但在事件驅動方面則稍顯不足。為彌補這一短板,平臺在API-Server、Master-Server和Alert-Server中集成了興業證券事件驅動SDK,可賦予它們強大的事件發佈和訂閱功能。
經過集成優化,API-Server能夠精準處理事件匯流排中任務調度相關的主題事件,靈活觸發對應的任務調度邏輯;Master-Server在完成工作流和任務執行後,能夠迅速將執行結果上報至性能分析平臺,實現高效的數據流轉;而Alert-Server則能在告警事件觸發時迅速發佈任務調度告警事件,為多個下游系統提供及時的告警處理支持。事件驅動架構的引入,不僅顯著降低了任務調度平臺與其他系統之間的耦合度,還極大地提升了系統間交互的靈活性和響應速度。
思考與展望
經過不斷的建設和大力推廣,統一分散式任務調度平臺已順利跨越兩大重要里程碑:“系統開發完成”與“生產投入使用”。任務調度平臺的核心功能已完成開發併成功部署至生產環境,為公司的日常運營提供了堅實的技術支撐。目前,首批項目組已成功將他們的調度任務遷移至該平臺,每日執行的任務量已達萬條,充分證明瞭平臺的穩定性和高效性。預計到2024年年底,調度平臺的月執行任務數將會實現百萬級的飛躍。這一規模的迅速壯大,將為公司帶來更加統一、高效式的任務調度管理,大幅減少重覆建設的成本支出,同時縮短交付周期,為公司的持續發展築牢根基。
通過對開源分散式任務調度平臺進行定製化開發,興業證券成功打造了一個集調度與監控功能於一身、為開發與運維團隊量身定製的企業級分散式任務調度解決方案。未來,平臺將致力於對以下關鍵領域的能力進行持續迭代與擴展,以適應日益複雜多變的業務場景,併為公司業務的蓬勃發展提供堅實支撐。一是深度融合DevOps流程:計劃引入DevOps流水線插件,以簡化用戶操作,使其能夠將構建完成的製品一鍵上傳至調度平臺,並快速轉化為特定類型的調度任務。這能夠幫助實現進程任務調度的便捷化,進一步縮短軟體交付周期,並顯著提升開發效率,助力公司更快速地響應市場變化,提升競爭力。二是支持擴展多種任務類型:不斷豐富平臺所支持的任務類型,為項目組提供更加多樣化的調度選項,以滿足不同業務場景下的靈活需求。由於每個項目組都有其獨特的業務邏輯和調度要求,為此平臺將會提供更加豐富、更加精細化的調度選項,確保項目組能夠根據自己的實際需求,選擇最合適的任務類型進行調度。
(此文刊發於《金融電子化》2024年7月上半月刊)
本文由 白鯨開源 提供發佈支持!