PowerJob 技术综述,能领悟多少就看你下多少功夫了~
本文适合有 Java 基础知识的人群

作者:HelloGitHub-Salieri
HelloGitHub 推出的《讲解开源项目》系列。从本章开始,就正式进入 PowerJob 框架的技术剖析环节了。作为技术系列文章开篇的第一章,本文会讲述 PowerJob 整体的架构设计,同时介绍相关的技术,以便于后面的讲解。
项目地址:
一、架构设计
前面说过,PowerJob 的设计目标是企业级的分布式任务调度框架,适合统一部署调度中心成为公司内部的任务调度中间件。因此,在架构设计时,不同于 QuartZ 这种自产自销一个 Jar 包搞定一切的模式,PowerJob 引入了调度中心来统一解决任务的配置和调度,具体的架构如下图所示:

由图可见,整个 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 等各界大佬谈笑风生、切磋技术~

PowerJob 技术综述,能领悟多少就看你下多少功夫了~的更多相关文章
- 看了下opengl相关的资料,踩了一个坑,记录一下
2019/03/10 下午看了下关于opengl的资料,然后把敲了下代码,然后程序报错了.代码如下: #include <glad/glad.h> #include <GLFW/gl ...
- AI佳作解读系列(五) - 目标检测二十年技术综述
计算机视觉中的目标检测,因其在真实世界的大量应用需求,比如自动驾驶.视频监控.机器人视觉等,而被研究学者广泛关注. 上周四,arXiv新出一篇目标检测文献<Object Detection ...
- 【转载】HRTF音频3D定位技术综述
1. 序 您一定有过这样的经验:在一个炎热的夏夜,讨厌的蚊子在你的耳边飞舞.此时,没有比除掉这个祸害更急所的了,对吧?做到这一点,不必睁大了眼去找蚊子,只需依靠敏锐的听力,一样可以确定蚊子的方位,在漆 ...
- 【OCR技术系列之五】自然场景文本检测技术综述(CTPN, SegLink, EAST)
文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是识别的前提条件,若文字都找不到,那何谈文字识别.今天我们首先来谈一下当今流行的文字检测技术有哪些. 文本检测不是一件简 ...
- 【转】如果有人让你推荐Python技术书,请让他看这个列表
入门级 <Head First Python>+ 入门级 + 微信49票 + 豆瓣评分 9.5 推荐语: 66:浅显易懂,编排的顺序特别,有大量插图.对话,不感觉枯燥 古心:通熟易懂,配有 ...
- XPath注入技术综述
一次完整的 XPath 注入攻击应该包括使用特殊构造的查询来提取一个 XML 数据库内的 数据或者信息.作为一门新的技术,XPath 注入在一定程度上和 SQL 注入漏洞有着惊人的相 似之处,通过下面 ...
- 《Cortex-M0权威指南》之Cortex-M0技术综述
转载请注明来源:cuixiaolei的技术博客 Cortex-M0 处理器简介 1. Cortex-M0 处理器基于冯诺依曼架构(单总线接口),使用32位精简指令集(RISC),该指令集被称为Thum ...
- Portal技术综述
从上世纪八十年代起,随着个人计算机(PC)的发展,企事业单位逐步建立起计算机应用系统来处理传统事务.从简单的单机应用逐步发展到局域网系统,进而建立跨地区垮国家的广域网系统.从单纯的以科学计算和数据管理 ...
- Docker技术综述
从技术入门到实战:docker初步尝试 docker中文社区 容器和镜像的导入和导出
随机推荐
- Spring Boot]SpringBoot四大神器之Actuator
论文转载自博客: https://blog.csdn.net/Dreamhai/article/details/81077903 https://bigjar.github.io/2018/08/19 ...
- weblogic高级进阶之ssl配置证书
1.首先需要明白ssl的原理 这里我们使用keytool的方式为AdminServer配置ssl证书 配置证书的方式如下所示: C:\Users\Administrator\Desktop\mykey ...
- 动力节点 mysql 郭鑫 34道经典的面试题二
13.有3个表S(学生表),C(课程表),SC(学生选课表) S(SNO,SNAME)代表(学号,姓名) C(CNO,CNAME,CTEACHER)代表(课号,课名,教师) SC(SNO,CNO,SC ...
- 且谈 Apache Spark 的 API 三剑客:RDD、DataFrame 和 Dataset
作者:Jules S. Damji 译者:足下 本文翻译自 A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets ,翻译已 ...
- html+css快速入门教程(3)
练习: 1.画盒子 2.相框 5 基础选择器 5.1 id选择器 ID选择器与类选择器的定义与引用方式类似,只是定义的符号不一样.ID通常表示唯一值,因此,ID选择器在CSS 中通常只出现一次.如果出 ...
- The meaningless Game
题目 Slastyona and her loyal dog Pushok are playing a meaningless game that is indeed very interesting ...
- LeetCode60. 第k个排列
解法一:用next_permutation()函数,要求第k个排列,就从"123...n"开始调用 k - 1 次 next_permutation()函数即可. class So ...
- Kali Day1
一.最新版本的Kali Linux的账号名和密码都是kali. 如何切换root 步骤如下: 1. 设置密码 sudo passwd root 2. 切换身份 su 3. 图示 二.快捷键 1. K ...
- Pytorch迁移学习实现驾驶场景分类
Pytorch迁移学习实现驾驶场景分类 源代码:https://github.com/Dalaska/scene_clf 1.安装 pytorch 直接用官网上的方法能装上但下载很慢.通过换源安装发现 ...
- Java编程资料
Java相关免费编程书籍推荐(都是PDF版) 编程进阶 2017年9月11日 IDE IntelliJ IDEA 简体中文专题教程 https://github.com/judasn/IntelliJ ...