文 / 興業證券股份有限公司 劉洋 石良生 柳君 李致琪
本文來源於網路,如有侵權,請聯絡刪除
任務排程平臺,扮演著自動執行預設任務的重要角色,是業務開展過程中不可或缺的一環。隨著業務規模的不斷擴充套件,興業證券每日需要進行數以萬計的任務排程,因此,最佳化和提升任務排程平臺的效能與穩定性至關重要。本文透過分析興業證券自身任務排程現狀,對分散式任務排程技術進行解析與探索,並總結了統一分散式任務排程平臺的實踐經驗。
興業證券金融科技部
總經理助理 劉洋
建設統一分散式任務排程平臺的必要性
在興業證券早期,任務排程平臺由專案組各自構建並維護,這在業務規模未產生爆發式增長前,尚能夠滿足日常的業務需求。但隨著近年來業務量的迅猛增長,這種分散式管理的弊端開始逐漸顯現,導致開發成本日益增加、運維複雜度與日俱增。與此同時,由於各排程平臺自身功能不完善而導致的問題也日益突出。任務依賴管理及任務併發控制能力上的欠缺,給業務的正常開展帶來了一定的隱患。基於以上問題,現有的任務排程平臺迫切需要進行統一和整合,以提升系統的穩定性和高效性。透過構建一個統一分散式任務排程平臺,技術人員可以實現任務集中管理、統一監控和高效運維,從而降低運維成本,提高開發效率,確保資料的準確性和一致性(見圖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月上半月刊)
本文由 白鯨開源 提供釋出支援!