星图

本贴最后更新于 2561 天前,其中的信息可能已经时异事殊

项目介绍

  • 在 web 集群中启用定时任务,往往需要对定时任务进行额外的处理。星图的思路是使 web 集群的每个节点都能作为任务执行节点去执行定时任务,但又不需担心任务多次执行的问题。
  • 星图是基于 Dubbo 设计思路的分布式任务分发执行服务,控制中心用于将定时任务分发到多个任务执行节点去执行,任务执行成功之后会将执行结果返回给控制中心,以扩展任务执行能力。
  • 需求:JAVA8,maven3
  • 项目地址

模块介绍

  • console:控制中心,用来分发任务,获取任务结果。
  • task:任务执行节点,可单独部署,也可集成作为 web 服务的模块。
  • registry:注册中心,用来管理任务执行节点地址。
  • loadBalance:负载均衡,用来获取当前可执行节点。

模块

控制中心

目前使用 spring scheduled,采用变成方式来增加定时任务,具体的任务执行逻辑则存储在脚本中。触发时由 org.eddy.schedule.ScheduleSender 来推送执行脚本到具体的执行节点。通过异步的 future org.eddy.future.StarFuture 来获取任务执行结果。

通信协议

默认使用基于 netty4 的 TCP 长链接通信。

注册中心

默认使用 zookeeper 作为注册中心。

任务执行

默认使用 groovy 作为任务脚本去执行任务。

模块扩展

每个被添加了 org.eddy.extension.Extension 注解的接口均可自定义扩展,扩展实现需要使用和星图相同的 spring context 来管理。org.eddy.extension.ExtensionLoader 会根据注解的 value 作为 key 来从配置文件中获取匹配的 spring bean name。

sandbox

为了防止任务脚本越权调用 spring context 中的其他模块,sandbox 用来为任务脚本构建沙箱环境,使得任务执行与其他服务能够隔离开来。是否开启 sandbox 功能需要主动增加 -Dstar.policy.path= JVM 变量。sandbox 边界需要在方法上增加 org.eddy.permission.annotation.Permission 注解。

demo

所有 demo 都是用过 spring boot 来构建,启动也是通过执行 Main 函数。

  • task 启动类:org.eddy.TaskApplicationStart
  • console 启动类:org.eddy.ConsoleApplicationStart

如果使用单机同时启动 task 和 console,可以通过指定 web 服务监听端口 -Dserver.port=8082 来防止端口被占用导致的 spring boot 启动报错。

存在的问题

  1. 控制中心存在单点问题,但控制中心无需执行任务且异步获取结果,前期无需扩展。
  2. 仅支持编程式地增加执行任务。
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • 任务
    2 引用 • 1 回帖

相关帖子

1 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...