本文适合有 Java 基础知识的人群

作者:HelloGitHub-Salieri

HelloGitHub 推出的《讲解开源项目》系列。从本章开始,就正式进入 PowerJob 框架的技术剖析环节了。作为技术系列文章开篇的第一章,本文会讲述 PowerJob 整体的架构设计,同时介绍相关的技术,以便于后面的讲解。

项目地址:

https://github.com/KFCFans/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 技术综述,能领悟多少就看你下多少功夫了~的更多相关文章

  1. 看了下opengl相关的资料,踩了一个坑,记录一下

    2019/03/10 下午看了下关于opengl的资料,然后把敲了下代码,然后程序报错了.代码如下: #include <glad/glad.h> #include <GLFW/gl ...

  2. AI佳作解读系列(五) - 目标检测二十年技术综述

    计算机视觉中的目标检测,因其在真实世界的大量应用需求,比如自动驾驶.视频监控.机器人视觉等,而被研究学者广泛关注.   上周四,arXiv新出一篇目标检测文献<Object Detection ...

  3. 【转载】HRTF音频3D定位技术综述

    1. 序 您一定有过这样的经验:在一个炎热的夏夜,讨厌的蚊子在你的耳边飞舞.此时,没有比除掉这个祸害更急所的了,对吧?做到这一点,不必睁大了眼去找蚊子,只需依靠敏锐的听力,一样可以确定蚊子的方位,在漆 ...

  4. 【OCR技术系列之五】自然场景文本检测技术综述(CTPN, SegLink, EAST)

    文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是识别的前提条件,若文字都找不到,那何谈文字识别.今天我们首先来谈一下当今流行的文字检测技术有哪些. 文本检测不是一件简 ...

  5. 【转】如果有人让你推荐Python技术书,请让他看这个列表

    入门级 <Head First Python>+ 入门级 + 微信49票 + 豆瓣评分 9.5 推荐语: 66:浅显易懂,编排的顺序特别,有大量插图.对话,不感觉枯燥 古心:通熟易懂,配有 ...

  6. XPath注入技术综述

    一次完整的 XPath 注入攻击应该包括使用特殊构造的查询来提取一个 XML 数据库内的 数据或者信息.作为一门新的技术,XPath 注入在一定程度上和 SQL 注入漏洞有着惊人的相 似之处,通过下面 ...

  7. 《Cortex-M0权威指南》之Cortex-M0技术综述

    转载请注明来源:cuixiaolei的技术博客 Cortex-M0 处理器简介 1. Cortex-M0 处理器基于冯诺依曼架构(单总线接口),使用32位精简指令集(RISC),该指令集被称为Thum ...

  8. Portal技术综述

    从上世纪八十年代起,随着个人计算机(PC)的发展,企事业单位逐步建立起计算机应用系统来处理传统事务.从简单的单机应用逐步发展到局域网系统,进而建立跨地区垮国家的广域网系统.从单纯的以科学计算和数据管理 ...

  9. Docker技术综述

    从技术入门到实战:docker初步尝试 docker中文社区 容器和镜像的导入和导出

随机推荐

  1. 【String注解驱动开发】你了解@PostConstruct注解和@PreDestroy注解吗?

    写在前面 在之前的文章中,我们介绍了如何使用@Bean注解指定初始化和销毁的方法,小伙伴们可以参见<[Spring注解驱动开发]如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!& ...

  2. ora-06502 ORA-06512问题解决

    Plsql报错:ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小  ORA-06512:等 这里网上常见解决方案是加大变量长度,但是我发现加大长度也没什么用,实际问题出在变量赋值上 例 ...

  3. SQL注入之Boolean型盲注

    什么是Boolean型注入 Boolean型的注入意思就是页面返回的结果是Boolean型的,通过构造SQL判断语句,查看页面的返回结果是否报错,页面返回是否正常等来判断哪些SQL判断条件时成立的,通 ...

  4. IDEA创建SpringBoot的多模块项目教程

    最近在写一个多模块的SpringBoot项目,基于过程总了一些总结,故把SpringBoot多个模块的项目创建记录下来. 首先,先建立一个父工程: (1)在IDEA工具栏选择File->New- ...

  5. LeetCode第29场双周赛题解

    第一题 用一个新数组newSalary保存去掉最低和最高工资的工资列表,然后遍历newSalary,计算总和,除以元素个数,就得到了平均值. class Solution { public: doub ...

  6. Redis系列(十二):数据结构SortedSet跳跃表中基本操作命令和源码解析

    1.SkipList Redis的sortedSet数据结构是有序不重复的(索引为唯一的,数据(score)却可以重复), 跳表是redis的一个核心组件,也同时被广泛地运用到了各种缓存地实现当中,它 ...

  7. SQL注入原理及代码分析(一)

    前言 我们都知道,学安全,懂SQL注入是重中之重,因为即使是现在SQL注入漏洞依然存在,只是相对于之前现在挖SQL注入变的困难了.而且知识点比较多,所以在这里总结一下.通过构造有缺陷的代码,来理解常见 ...

  8. H5调用手机的相机/摄像/录音等功能 _input:file的capture属性说明

    H5使用input标签调用系统默许相机,摄像,录音功能.使用input:file标签, 去调用系统默认相机,摄像,录音功能,其实是有个capture属性,直接说明需要调用什么功能: <input ...

  9. CSS五种方式实现 Footer 置底

    页脚置底(Sticky footer)就是让网页的footer部分始终在浏览器窗口的底部.当网页内容足够长以至超出浏览器可视高度时,页脚会随着内容被推到网页底部:但如果网页内容不够长,置底的页脚就会保 ...

  10. 02-springboot整合elasticsearch初识

    1.ReactiveElasticsearchOperations     根据springboot官网提供的Elasticsearch操作,除了用rest风格的,还有reactiveElasticS ...