任務調度系統設計
本文透過 'NotebookLM' 整理 Youtube 上影片內容,用於紀錄與學習,來源: https://youtu.be/fvygzszm4ac
覺得有幫助的話可以給頻道主點個讚支持 😇
摘要
文本來源對設計任務調度系統進行了深入討論。
文章強調了在系統設計中進行權衡取捨的重要性,並以任務調度系統為 例,探討了系統類型(內部/外部)、調度類型以及任務類型等方面的初步決策。
隨後,作者闡述了設計最低可行產品 (MVP) 的必要性,並確定了使用者可以提交任務和查看執行結果等核心功能需求。
文章還討論了非功能性需求,如低延遲、可擴展性和可靠性,並進一步探討了數據模型設計和任務狀態轉換。
最後,文章提出了不同的系統架構方案,包括使用數據庫或消息隊列作為數據存儲和任務分發機制,並分析了工作節點與任務協調者之間的通信模式。
討論也觸及了資源管理與優化以及如何實現定時任務和任務依賴等進階功能。
內容分析
這個設計是針對一個任務調度系統 (Job Scheduling System)。在系統設計時,需要在不同方向進行權衡取捨。
首先,討論從定義系統的範圍 (scope) 開始:
- 內部系統 (Internal System) vs. 公開系統 (Public System):假設這是一個內部系統 (Internal System),用戶量大約在幾萬人 (10K) 左右。如果對外公開 (public),用戶可能超過一百萬 (1M)。對於內部系統,可討論的點可能多一點。
- 調度器類型 (Scheduler Type):提到了一些現有的調度器,如 Cron、Spark、Linc job。需要設計一個特定類型的調度器。
- 任務類型 (Task Type):任務可以是短暫執行的腳本 (script) 或長時間運行的服務 (long-running service),例 如監聽 web 或一直運行。設計應包含這兩種類型 (job can be all type)。
設計過程強調先實現一個最小可行產品 (Minimum Viable Product, MVP),滿足最基本的功能,並限定初步的範圍。設想一個最基礎的調度器來進行設計。
功能需求 (Functional Requirements) 包括:
- 用戶可以提交 (submit) 任務.
- 系統在後台執行任務 (System background execution).
- 用戶可以查看任務的執行結果 (task result).
進階功能 (Advanced Future) 可能包括:
- 調度未來的任務 (schedule some task in future).
- 設定定時任務 (cron service),如每隔 30 分鐘執行或每天特定時間執行.
- 支持有任務依賴關係的 DAG (Directed Acyclic Graph) 任務,例如任務 A 跑完後才能跑任務 B 和 C.
非功能需求 (Non-functional Requirements) 考慮了:
- 延遲 (Latency):提交的任務應在 1 秒內執行 (task execution within 1 second)。查看結果的儀表板 (dashboard) 可以在 60 秒內更新 (dashboard within 60 seconds)。
- 可擴展性 (Scalability):系統應能擴展以處理大量任務.
- 可靠性 (Reliability):系統需要考慮到可靠性問題。如果系統崩潰後重啟,需要重新撿起正在執行的任務。
任務數據模型 (Job Data Model) 的設計包括兩部分:
- 可執行文件 (executable file) 或配置 (config),它們可以被抽象成一個可執行的二進制文件 (binary file)。這部分可以存儲在一個獨立的倉庫 (repository) 或對象存儲服務中,如 AWS S3.
- 元數據 (Meta Data),包含任務相關的資訊。例如:
- ID
- OwnerId
- 可執行文件的二進制 URL (Binary URL)
- Input 和 Output 路徑 (Input and Output paths)
- 創建時間 (Create time)
- 執行結果 (Execution result)
- 重試次數 (Number of retries)