资讯专栏INFORMATION COLUMN

Task一个轻量级的分布式任务计算系统

monw3c / 2343人阅读

摘要:已预留扩展,可以实现自己的模块你想好了吗你是否真的需要这样的一个工具,到底是异步还是同步,什么样的才可以称的上任务。异步分布执行虽然可以提高系统吞吐量,但它是在高于一定得计算量请求量的情况下才可以显现出来这一特点。

Task系统设计与使用

Task是一个轻量级的分布式任务计算系统,他可以帮助你快速编写一个可以在集群环境下运行的分布式方法,而这只需要你使用一行代码就可以在你原有的方法上做到.

一个简单例子:

public class Hello {

    public void say(String msg) throws InterruptedException {
        Thread.sleep(1000);
        System.out.println(msg);
    }
}


public class SetUp {

    public static void main(String[] args) throws InterruptedException {
        // 获取Hello对象的代理实例
        Hello hello = Task.registerASyncClass(Hello.class);
        // 此时say方法会被立即返回且是被集群中的某个节点给调用了
        hello.say("hello world");
    }
}
Task支持业务场景

Task的设计的目的是支持分布式任务计算,可以作为一款任务执行引擎.支持一下特点:

支持任务的开始暂停删除

采用多种调度算法,可以指定任务在特定节点消费在不同的Executor上执行

扩展性强,可以对接各种mq服务executor模块支持Spring的BeanFactory或者第三方DI容器

支持分布式任务执行,整个调用过程可以让开发者无感知

携带监控系统,可以随时了解系统运行的状态

Task系统架构

Task主要分为以下几个模块:

ClientProxy: 用于获取任务提交的代理对象,如上Task.registerASyncClass(Hello.class)可以获取Hello对象的代理实例,用于提交任务到mq服务。

Coding: 可以对方法的调用动作进行描述和重放方法的执行,并可以对描述信息进行序列化存取到mq服务和反序列化成一个Runnable对象

MQ: 用于存放方法调用信息描述的地方,默认支持Redis的List结构队列,并预留扩展用于对接各个MQ组件

Controller: 任务调度的控制中心,负责任务调度路由,任务的开始、暂停等动作

Diapatch: Task采用的是拉取的方式进行任务调用。Dispatch模块设计的目的主要是合适的时间去从MQ中拉取任务并监管任务的执行情况,异常处理

BeanFactory: 任务所属对象的Bean管理,默认采用google的guice管理,已预留扩展,可以方便支持其它DI容器,可以方便扩展Spring的BeanFactory

Executor: 任务真正执行的地方,Dispatch模块会把拉取到任务通过Coding转成Runnable对象,并交给Executor模块,Executor模块类似于本地的ExecutorService框架,用于本地的并发模型。已预留扩展,可以实现自己的Executor模块

你想好了吗

你是否真的需要这样的一个工具,到底是异步还是同步,什么样的才可以称的上任务。在使用前,希望你也可以考虑清楚这些问题。这里我需要声明的是,
能同步的最好不要异步。异步分布执行虽然可以提高系统吞吐量,但它是在高于一定得计算量请求量的情况下才可以显现出来这一特点。当你决定需要它时,
你就要决定放弃及时响应的特性,虽然它可以达到近实时的计算(在无压力下,一个任务默认可能会出现延迟1s执行,这个时间可以设置)。另外,你是否需要的是一个分布式的异步并行框架,
还是JDK自带的单机并发框架,如果executorservice就可以满足了,那你也不必使用它了,虽然我个人觉得这个在使用时会更方便,但我并不想让你那么做,能满足需求就好
方案永远不止一个,用你最熟悉的吧。

项目地址:https://github.com/WangJunTYTL/task

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66201.html

相关文章

  • hadoop需要哪些技术支持

    摘要:是在端的,是提前的,需要自己设置。如果在开源大数据框架上部署大快的开发框架,需要平台的组件支持如下数据源与引擎数据采集数据处理模块机器学习和模块上传服务器端包,直接支持搜索引擎模块不独立发布 hadoop是一个开源软件框架,可安装在一个商用机器集群中,使机器可彼此通信并协同工作,以高度分布式的方式共同存储和处理大量数据。最初,Hadoop 包含以下两个主要组件:Hadoop Distr...

    MartinHan 评论0 收藏0
  • 《从0到1学习Flink》—— Apache Flink 介绍

    摘要:扩展库还包括用于复杂事件处理,机器学习,图形处理和兼容性的专用代码库。事件时间机制使得那些事件无序到达甚至延迟到达的数据流能够计算出精确的结果。负责接受用户的程序代码,然后创建数据流,将数据流提交给以便进一步执行。 showImg(https://segmentfault.com/img/remote/1460000016902812); 前言 Flink 是一种流式计算框架,为什么我...

    flyer_dev 评论0 收藏0
  • python---协程

    摘要:随着我们对于效率的追求不断提高,基于单线程来实现并发又成为一个新的课题,即只用一个主线程很明显可利用的只有一个情况下实现并发。作为的补充可以检测操作,在遇到操作的情况下才发生切换协程介绍协程是单线程下的并发,又称微线程,纤程。 引子 之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。按道理来说我们已经算是把cpu的利用率提高很多了。...

    lolomaco 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<