摘要:已預(yù)留擴(kuò)展,可以實現(xiàn)自己的模塊你想好了嗎你是否真的需要這樣的一個工具,到底是異步還是同步,什么樣的才可以稱的上任務(wù)。異步分布執(zhí)行雖然可以提高系統(tǒng)吞吐量,但它是在高于一定得計算量請求量的情況下才可以顯現(xiàn)出來這一特點。
Task系統(tǒng)設(shè)計與使用
Task是一個輕量級的分布式任務(wù)計算系統(tǒng),他可以幫助你快速編寫一個可以在集群環(huán)境下運行的分布式方法,而這只需要你使用一行代碼就可以在你原有的方法上做到.
一個簡單例子:
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方法會被立即返回且是被集群中的某個節(jié)點給調(diào)用了 hello.say("hello world"); } }Task支持業(yè)務(wù)場景
Task的設(shè)計的目的是支持分布式任務(wù)計算,可以作為一款任務(wù)執(zhí)行引擎.支持一下特點:
支持任務(wù)的開始暫停刪除
采用多種調(diào)度算法,可以指定任務(wù)在特定節(jié)點消費在不同的Executor上執(zhí)行
擴(kuò)展性強(qiáng),可以對接各種mq服務(wù)executor模塊支持Spring的BeanFactory或者第三方DI容器
支持分布式任務(wù)執(zhí)行,整個調(diào)用過程可以讓開發(fā)者無感知
攜帶監(jiān)控系統(tǒng),可以隨時了解系統(tǒng)運行的狀態(tài)
Task系統(tǒng)架構(gòu)Task主要分為以下幾個模塊:
ClientProxy: 用于獲取任務(wù)提交的代理對象,如上Task.registerASyncClass(Hello.class)可以獲取Hello對象的代理實例,用于提交任務(wù)到mq服務(wù)。
Coding: 可以對方法的調(diào)用動作進(jìn)行描述和重放方法的執(zhí)行,并可以對描述信息進(jìn)行序列化存取到mq服務(wù)和反序列化成一個Runnable對象
MQ: 用于存放方法調(diào)用信息描述的地方,默認(rèn)支持Redis的List結(jié)構(gòu)隊列,并預(yù)留擴(kuò)展用于對接各個MQ組件
Controller: 任務(wù)調(diào)度的控制中心,負(fù)責(zé)任務(wù)調(diào)度路由,任務(wù)的開始、暫停等動作
Diapatch: Task采用的是拉取的方式進(jìn)行任務(wù)調(diào)用。Dispatch模塊設(shè)計的目的主要是合適的時間去從MQ中拉取任務(wù)并監(jiān)管任務(wù)的執(zhí)行情況,異常處理
BeanFactory: 任務(wù)所屬對象的Bean管理,默認(rèn)采用google的guice管理,已預(yù)留擴(kuò)展,可以方便支持其它DI容器,可以方便擴(kuò)展Spring的BeanFactory
Executor: 任務(wù)真正執(zhí)行的地方,Dispatch模塊會把拉取到任務(wù)通過Coding轉(zhuǎn)成Runnable對象,并交給Executor模塊,Executor模塊類似于本地的ExecutorService框架,用于本地的并發(fā)模型。已預(yù)留擴(kuò)展,可以實現(xiàn)自己的Executor模塊
你想好了嗎你是否真的需要這樣的一個工具,到底是異步還是同步,什么樣的才可以稱的上任務(wù)。在使用前,希望你也可以考慮清楚這些問題。這里我需要聲明的是,
能同步的最好不要異步。異步分布執(zhí)行雖然可以提高系統(tǒng)吞吐量,但它是在高于一定得計算量請求量的情況下才可以顯現(xiàn)出來這一特點。當(dāng)你決定需要它時,
你就要決定放棄及時響應(yīng)的特性,雖然它可以達(dá)到近實時的計算(在無壓力下,一個任務(wù)默認(rèn)可能會出現(xiàn)延遲1s執(zhí)行,這個時間可以設(shè)置)。另外,你是否需要的是一個分布式的異步并行框架,
還是JDK自帶的單機(jī)并發(fā)框架,如果executorservice就可以滿足了,那你也不必使用它了,雖然我個人覺得這個在使用時會更方便,但我并不想讓你那么做,能滿足需求就好,
方案永遠(yuǎn)不止一個,用你最熟悉的吧。
項目地址:https://github.com/WangJunTYTL/task
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66201.html
摘要:是在端的,是提前的,需要自己設(shè)置。如果在開源大數(shù)據(jù)框架上部署大快的開發(fā)框架,需要平臺的組件支持如下數(shù)據(jù)源與引擎數(shù)據(jù)采集數(shù)據(jù)處理模塊機(jī)器學(xué)習(xí)和模塊上傳服務(wù)器端包,直接支持搜索引擎模塊不獨立發(fā)布 hadoop是一個開源軟件框架,可安裝在一個商用機(jī)器集群中,使機(jī)器可彼此通信并協(xié)同工作,以高度分布式的方式共同存儲和處理大量數(shù)據(jù)。最初,Hadoop 包含以下兩個主要組件:Hadoop Distr...
摘要:擴(kuò)展庫還包括用于復(fù)雜事件處理,機(jī)器學(xué)習(xí),圖形處理和兼容性的專用代碼庫。事件時間機(jī)制使得那些事件無序到達(dá)甚至延遲到達(dá)的數(shù)據(jù)流能夠計算出精確的結(jié)果。負(fù)責(zé)接受用戶的程序代碼,然后創(chuàng)建數(shù)據(jù)流,將數(shù)據(jù)流提交給以便進(jìn)一步執(zhí)行。 showImg(https://segmentfault.com/img/remote/1460000016902812); 前言 Flink 是一種流式計算框架,為什么我...
摘要:隨著我們對于效率的追求不斷提高,基于單線程來實現(xiàn)并發(fā)又成為一個新的課題,即只用一個主線程很明顯可利用的只有一個情況下實現(xiàn)并發(fā)。作為的補充可以檢測操作,在遇到操作的情況下才發(fā)生切換協(xié)程介紹協(xié)程是單線程下的并發(fā),又稱微線程,纖程。 引子 之前我們學(xué)習(xí)了線程、進(jìn)程的概念,了解了在操作系統(tǒng)中進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位。按道理來說我們已經(jīng)算是把cpu的利用率提高很多了。...
閱讀 2710·2021-09-26 10:19
閱讀 2154·2021-09-24 10:27
閱讀 2534·2021-09-01 10:42
閱讀 2314·2019-08-29 16:09
閱讀 2495·2019-08-29 15:17
閱讀 1459·2019-08-29 15:09
閱讀 647·2019-08-29 11:14
閱讀 2314·2019-08-26 13:25