PowerJob 技術綜述,能領悟多少就看你下多少功夫了~
阿新 • • 發佈:2020-07-23
> 本文適合有 Java 基礎知識的人群
![](https://img2020.cnblogs.com/blog/759200/202007/759200-20200722220213940-1200153702.png)
作者:HelloGitHub-**Salieri**
HelloGitHub 推出的[《講解開源專案》](https://github.com/HelloGitHub-Team/Article)系列。從本章開始,就正式進入 PowerJob 框架的技術剖析環節了。作為技術系列文章開篇的第一章,本文會講述 PowerJob 整體的架構設計,同時介紹相關的技術,以便於後面的講解。
> 專案地址:
>
> https://github.com/KFCFans/PowerJob
## 一、架構設計
前面說過,PowerJob 的設計目標是企業級的分散式任務排程框架,適合統一部署排程中心成為公司內部的任務排程中介軟體。因此,在架構設計時,不同於 QuartZ 這種自產自銷一個 Jar 包搞定一切的模式,PowerJob 引入了排程中心來統一解決任務的配置和排程,具體的架構如下圖所示:
![](https://img2020.cnblogs.com/blog/759200/202007/759200-20200722220231399-131754418.png)
由圖可見,整個 PowerJob 系統由排程中心(powerjob-server)和執行器(powerjob-worker)構成。
排程中心是一個基於 SpringBoot 的 Web 應用,根據提供服務的物件可以劃分為對外和對內兩層。對外部分面向使用者,即提供 HTTP 服務,允許開發者在前端介面上視覺化得完成任務、工作流等資訊的配置與管理;對內部分則負責完成開發者所錄入任務的排程和派發,同時維護註冊到本註冊中心所有執行器叢集的狀態。
執行器是一個普通的 Jar 包,需要接入排程中心的應用依賴該 Jar 包並完成初始化後,powerjob-worker 便正式啟動並提供服務。執行器的整體邏輯非常簡單(複雜的是MapReduce、廣播等高階處理任務的實現,敬請期待後面的文章),就是監聽來自排程中心的任務執行請求,一旦接收到任務就開始分配資源、初始化執行器開始處理,同時維護著一組後臺執行緒定期上報自身的健康狀態、任務執行狀態。
排程中心和執行器之間通過 akka-remote 進行通訊。排程中心可以多例項部署來進行水平擴充套件,提升排程效能的同時做到排程中心高可用,執行器也可以通過叢集部署實現高可用,同時,如果開發者實現了 MapReduce 這一具有分散式處理能力的處理器,也可以調動整個叢集的計算資源完成任務的分散式計算。
## 二、知識點概覽
總體來講,PowerJob 中主要涉及了以下的知識點,通過閱讀原始碼和之後的一系列技術剖析文章,你將能學到:
- Java 基礎:Java 8 新特性(Stream、Optional、Lambda、FunctionalInterface)
- Java 進階:多執行緒與併發安全(執行緒池、併發容器、可重入鎖、分段鎖、ThreadLocal 等)、Java I/O(網路操作、檔案流操作)、熱載入(自定義類載入器、Jar包操作)
- Java Web:主要是 SpringBoot 相關的 Web 知識,包括基礎 Controller 用法、WebSocket、檔案上傳下載、ControllerAdvice 全域性處理異常、跨域 *CORS 等*
- Spring 相關:AOP(記錄 Web 日誌)、非同步方法(@Async)、定時任務(@Scheduled)、自建容器(ClassPathXmlApplicationContext)、上下文使用(各種 Aware)
- 資料庫:編寫資料庫無關的持久化層程式碼(Spring Data JPA)、資料庫基礎理論(各種SQL、索引用法等)、多資料來源配置、MongoDB (GridFS)的使用
- 演算法知識:圖(DAG)、引用計數器(實現小型 GC)、分散式唯一 ID 演算法(snowflake)、時間輪
- 分散式知識:遠端通訊、叢集高可用、服務發現、故障轉移與恢復、分散式一致性、分散式鎖(基於資料庫實現可靠的分散式鎖)
- 序列化相關:kryo、jackson-cbor、物件池技術
- Akka 基礎:Actor 模型、akka-remote、akka-serialization
如果你是初學的萌新,通過本專案和本教程,相信你能更好地掌握 Java 相關的基礎知識。
如果你是輕車熟路的老司機,通過本專案和本教程,相信你也會在分散式計算、任務排程等方面有所啟發。
## 三、總結與預告
本章介紹了 PowerJob 整體的架構設計以及專案中所涉及的相關技術知識點。下一章,我將會為大家帶來 PowerJob 的基石:Akka Toolkit 的介紹與使用教程。
那我們下期再見嘍~預告:下期內容很乾,需要帶足水!
> HelloGitHub 交流群現已全面開放(作者在 Java 群),新增微訊號:HelloGitHub 為好友入群,可同前端、Java、Go 等各界大佬談笑風生、切磋技術~
![](https://img2020.cnblogs.com/blog/759200/202007/759200-20200706214622307-1765002891.jpg)