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中文社区 容器和镜像的导入和导出
随机推荐
- 【贪心】Emergency Evacuation
题目 大致题意 把指定的人从同一出口送出车外,且同一位置不能同时有两个人,求所需的最短时间. 分析 第一感觉就是利用贪心思想解决问题,但是这道题的数据范围用模拟的话肯定是会爆掉的,所以这是不可取的.我 ...
- 集成Swagger在线调试
SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...
- Redis系列(十):数据结构Set源码解析和SADD、SINTER、SDIFF、SUNION、SPOP命令
1.介绍 Hash是以K->V形式存储,而Set则是K存储,空间节省了很多 Redis中Set是String类型的无序集合:集合成员是唯一的. 这就意味着集合中不能出现重复的数据.可根据应用场景 ...
- 学习 Java 网站推荐给你
推荐几个非常不错的 Java 学习网站 LearnJava 在线 这是一个非常不错的学习 Java 的在线网站,纯免费.这是一个个人项目,旨在通过简单有效的在浏览器中进行练习让你快速掌握 Java 编 ...
- 奇妙的 CSS MASK
本文将介绍 CSS 中一个非常有意思的属性 mask . 顾名思义,mask 译为遮罩.在 CSS 中,mask 属性允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域 ...
- 不懂SpringApplication生命周期事件?那就等于不会Spring Boot嘛
学习方法之少废话:吹牛.装逼.叫大哥. 作者:A哥(YourBatman) 公众号:BAT的乌托邦(ID:BAT-utopia) 文末是否有彩蛋:有 目录 前言 正文 生命周期事件流程图 版本说明: ...
- BUUCTF-Misc-No.4
比赛信息 比赛地址:Buuctf靶场 内心os(蛮重要的) 我只想出手把手教程,希望大家能学会然后自己也成为ctf大佬,再来带带我QWQ 被偷走的文件 | SOLVED | foremost分离一下文 ...
- docker自动化部署前端项目实战一
docker自动化部署前端项目实战一 本文适用于个人项目,如博客.静态文档,不涉及后台数据交互,以部署文档为例. 思路 利用服务器node脚本,监听github仓库webhook push事件触发po ...
- Yii2源码分析(一):入口
写在前面,写这些随笔是记录下自己看Yii2源码的过程,可能会有些流水账,大部分解析放在注释里说明,由于个人水平有限,有不正确的地方还望斧正. web入口文件Index.php // 定义全局的常量,Y ...
- Flutter 1.17 新 Material motion 规范的预构建动画
老孟导读:在 Flutter 1.17 发布大会上,Flutter 团队还发布了新的 Animations 软件包,该软件包提供了实现新的 Material motion 规范的预构建动画. 软件包 ...