如今微服務(wù)架構(gòu)討論的如火如荼冰寻。但在企業(yè)架構(gòu)里除了大量的OLTP交易外,還存在海量的批處理交易皿渗。在諸如銀行的金融機構(gòu)中斩芭,每天有3-4萬筆的批處理作業(yè)需要處理轻腺。針對OLTP,業(yè)界有大量的開源框架划乖、優(yōu)秀的架構(gòu)設(shè)計給予支撐贬养;但批處理領(lǐng)域的框架確鳳毛麟角。是時候和我們一起來了解下批處理的世界哪些優(yōu)秀的框架和設(shè)計了琴庵,今天我將以Spring Batch為例误算,和大家一起探秘批處理的世界。
- 初識批處理典型場景
- 探秘領(lǐng)域模型及關(guān)鍵架構(gòu)
- 實現(xiàn)作業(yè)健壯性與擴展性
- 批處理框架的不足與增強
批處理典型業(yè)務(wù)場景
對賬是典型的批處理業(yè)務(wù)處理場景迷殿,各個金融機構(gòu)的往來業(yè)務(wù)和跨主機系統(tǒng)的業(yè)務(wù)都會涉及到對賬的過程儿礼,如大小額支付、銀聯(lián)交易贪庙、人行往來蜘犁、現(xiàn)金管理、POS業(yè)務(wù)止邮、ATM業(yè)務(wù)这橙、證券公司資金賬戶、證券公司與證券結(jié)算公司导披。
下面是某行網(wǎng)銀的部分日終跑批實例場景需求。
涉及到的需求點包括:
- 批量的每個單元都需要錯誤處理和回退鹰晨;
- 每個單元在不同平臺中運行;
- 需要有分支選擇止毕;
- 每個單元需要監(jiān)控和獲取單元處理日志模蜡;
- 提供多種觸發(fā)規(guī)則,按日期扁凛,日歷忍疾,周期觸發(fā);
除此之外典型的批處理適用于如下的業(yè)務(wù)場景:
- 定期提交批處理任務(wù)(日終處理)
- 并行批處理:并行處理任務(wù)
- 企業(yè)消息驅(qū)動處理
- 大規(guī)模的并行處理
- 手動或定時重啟
- 按順序處理依賴的任務(wù)(可擴展為工作流驅(qū)動的批處理)
- 部分處理:忽略記錄(例如在回滾時)
- 完整的批處理事務(wù)
與OLTP類型交易不同谨朝,批處理作業(yè)兩個典型特征是批量執(zhí)行與自動執(zhí)行(需要無人值守):前者能夠處理大批量數(shù)據(jù)的導入卤妒、導出和業(yè)務(wù)邏輯計算;后者無需人工干預字币,能夠自動化執(zhí)行批量任務(wù)则披。
在關(guān)注其基本功能之外洗出,還需要關(guān)注如下的幾點:
- 健壯性:不會因為無效數(shù)據(jù)或錯誤數(shù)據(jù)導致程序崩潰士复;
- 可靠性:通過跟蹤、監(jiān)控翩活、日志及相關(guān)的處理策略(重試判没、跳過蜓萄、重啟)實現(xiàn)批作業(yè)的可靠執(zhí)行;
- 擴展性:通過并發(fā)或者并行技術(shù)實現(xiàn)應(yīng)用的縱向和橫向擴展澄峰,滿足海量數(shù)據(jù)處理的性能需求嫉沽;
苦于業(yè)界真的缺少比較好的批處理框架,Spring Batch是業(yè)界目前為數(shù)不多的優(yōu)秀批處理框架(Java語言開發(fā))俏竞,SpringSource和Accenture(埃森哲)共同貢獻了智慧绸硕。
Accenture在批處理架構(gòu)上有著豐富的工業(yè)級別的經(jīng)驗魂毁,貢獻了之前專用的批處理體系框架(這些框架歷經(jīng)數(shù)十年研發(fā)和使用玻佩,為Spring Batch提供了大量的參考經(jīng)驗)。
SpringSource則有著深刻的技術(shù)認知和Spring框架編程模型席楚,同時借鑒了JCL(Job Control Language)和COBOL的語言特性咬崔。2013年JSR-352將批處理納入規(guī)范體系,并被包含在了JEE7之中烦秩。這意味著垮斯,所有的JEE7應(yīng)用服務(wù)器都會有批處理的能力,目前第一個實現(xiàn)此規(guī)范的應(yīng)用服務(wù)器是Glassfish 4只祠。當然也可以在Java SE中使用兜蠕。
但最為關(guān)鍵的一點是:JSR-352規(guī)范大量借鑒了Spring Batch框架的設(shè)計思路,從上圖中的核心模型和概念中可以看出究竟抛寝,核心的概念模型完全一致熊杨。
通過Spring Batch框架可以構(gòu)建出輕量級的健壯的并行處理應(yīng)用,支持事務(wù)、并發(fā)盗舰、流程晶府、監(jiān)控、縱向和橫向擴展,提供統(tǒng)一的接口管理和任務(wù)管理钻趋。
框架提供了諸如以下的核心能力,讓大家更關(guān)注在業(yè)務(wù)處理上爷绘。更是提供了如下的豐富能力:
- 明確分離批處理的執(zhí)行環(huán)境和應(yīng)用
- 將通用核心的服務(wù)以接口形式提供
- 提供“開箱即用” 的簡單的默認的核心執(zhí)行接口
- 提供Spring框架中配置、自定義进倍、和擴展服務(wù)
- 所有默認實現(xiàn)的核心服務(wù)能夠容易的被擴展與替換土至,不會影響基礎(chǔ)層
- 提供一個簡單的部署模式,使用Maven進行編譯
批處理關(guān)鍵領(lǐng)域模型及關(guān)鍵架構(gòu)
先來個Hello World示例猾昆,一個典型的批處理作業(yè)陶因。
典型的一個作業(yè)分為3部分:作業(yè)讀垂蜗、作業(yè)處理楷扬、作業(yè)寫解幽,也是典型的三步式架構(gòu)。整個批處理框架基本上圍繞Read烘苹、Process躲株、Writer來處理。除此之外镣衡,框架提供了作業(yè)調(diào)度器霜定、作業(yè)倉庫(用以存放Job的元數(shù)據(jù)信息,支持內(nèi)存廊鸥、DB兩種模式)望浩。
完整的領(lǐng)域概念模型參加下圖:
Job Launcher(作業(yè)調(diào)度器)是Spring Batch框架基礎(chǔ)設(shè)施層提供的運行Job的能力惰说。通過給定的Job名稱和作Job Parameters磨德,可以通過Job Launcher執(zhí)行Job。
通過Job Launcher可以在Java程序中調(diào)用批處理任務(wù)吆视,也可以在通過命令行或者其它框架(如定時調(diào)度框架Quartz)中調(diào)用批處理任務(wù)典挑。
Job Repository來存儲Job執(zhí)行期的元數(shù)據(jù)(這里的元數(shù)據(jù)是指Job Instance、Job Execution揩环、Job Parameters搔弄、Step Execution、Execution Context等數(shù)據(jù))丰滑,并提供兩種默認實現(xiàn)顾犹。
一種是存放在內(nèi)存中;另一種將元數(shù)據(jù)存放在數(shù)據(jù)庫中褒墨。通過將元數(shù)據(jù)存放在數(shù)據(jù)庫中炫刷,可以隨時監(jiān)控批處理Job的執(zhí)行狀態(tài)。Job執(zhí)行結(jié)果是成功還是失敗郁妈,并且使得在Job失敗的情況下重新啟動Job成為可能浑玛。Step表示作業(yè)中的一個完整步驟,一個Job可以有一個或者多個Step組成噩咪。
批處理框架運行期的模型也非常簡單:
Job Instance(作業(yè)實例)是一個運行期的概念,Job每執(zhí)行一次都會涉及到一個Job Instance胃碾。
Job Instance來源可能有兩種:一種是根據(jù)設(shè)置的Job Parameters從Job Repository(作業(yè)倉庫)中獲取一個涨享;如果根據(jù)Job Parameters從Job Repository沒有獲取Job Instance,則新創(chuàng)建一個新的Job Instance仆百。
Job Execution表示Job執(zhí)行的句柄厕隧,一次Job的執(zhí)行可能成功也可能失敗。只有Job執(zhí)行成功后,對應(yīng)的Job Instance才會被完成吁讨。因此在Job執(zhí)行失敗的情況下髓迎,會有一個Job Instance對應(yīng)多個Job Execution的場景發(fā)生。
總結(jié)下批處理的典型概念模型建丧,其設(shè)計非常精簡的十個概念排龄,完整支撐了整個框架。
Job提供的核心能力包括作業(yè)的抽象與繼承涣雕,類似面向?qū)ο笾械母拍睢τ趫?zhí)行異常的作業(yè)闭翩,提供重啟的能力挣郭。
框架在Job層面疗韵,同樣提供了作業(yè)編排的概念兑障,包括順序、條件蕉汪、并行作業(yè)編排流译。
在一個Job中配置多個Step者疤。不同的Step間可以順序執(zhí)行福澡,也可以按照不同的條件有選擇的執(zhí)行(條件通常使用Step的退出狀態(tài)決定),通過next元素或者decision元素來定義跳轉(zhuǎn)規(guī)則驹马;
為了提高多個Step的執(zhí)行效率革砸,框架提供了Step并行執(zhí)行的能力(使用split進行聲明,通常該情況下需要Step之間沒有任何的依賴關(guān)系糯累,否則容易引起業(yè)務(wù)上的錯誤)算利。Step包含了一個實際運行的批處理任務(wù)中的所有必需的信息,其實現(xiàn)可以是非常簡單的業(yè)務(wù)實現(xiàn)泳姐,也可以是非常復雜的業(yè)務(wù)處理效拭,Step的復雜程度通常是業(yè)務(wù)決定的。
每個Step由ItemReader缎患、ItemProcessor、ItemWriter組成阎肝,當然根據(jù)不同的業(yè)務(wù)需求挤渔,ItemProcessor可以做適當?shù)木啞M瑫r框架提供了大量的ItemReader盗痒、ItemWriter的實現(xiàn),提供了對FlatFile、XML俯邓、Json骡楼、DataBase、Message等多種數(shù)據(jù)類型的支持稽鞭。
框架還為Step提供了重啟鸟整、事務(wù)、重啟次數(shù)朦蕴、并發(fā)數(shù)篮条;以及提交間隔、異常跳過吩抓、重試涉茧、完成策略等能力≌钊ⅲ基于Step的靈活配置伴栓,可以完成常見的業(yè)務(wù)功能需求。其中三步走(Read雨饺、Processor钳垮、Writer)是批處理中的經(jīng)典抽象。
作為面向批的處理饺窿,在Step層提供了多次讀、處理移斩,一次提交的能力肚医。
在Chunk的操作中,可以通過屬性commit-interval設(shè)置read多少條記錄后進行一次提交叹哭。通過設(shè)置commit-interval的間隔值忍宋,減少提交頻次,降低資源使用率风罩。Step的每一次提交作為一個完整的事務(wù)存在糠排。默認采用Spring提供的聲明式事務(wù)管理模式,事務(wù)編排非常方便超升。如下是一個聲明事務(wù)的示例:
框架對于事務(wù)的支持能力包括:
- Chunk支持事務(wù)管理,通過commit-interval設(shè)置每次提交的記錄數(shù)室琢;
- 支持對每個Tasklet設(shè)置細粒度的事務(wù)配置:隔離界別乾闰、傳播行為、超時盈滴;
- 支持rollback和no rollback涯肩,通過skippable-exception-classes和no-rollback-exception-classes進行支撐轿钠;
- 支持JMS Queue的事務(wù)級別配置;
另外病苗,在框架資深的模型抽象方面疗垛,Spring Batch也做了極為精簡的抽象。
僅僅使用六張業(yè)務(wù)表存儲了所有的元數(shù)據(jù)信息(包括Job贷腕、Step的實例,上下文咬展,執(zhí)行器信息泽裳,為后續(xù)的監(jiān)控、重啟破婆、重試涮总、狀態(tài)恢復等提供了可能)。
- BATCH_JOB_INSTANCE:作業(yè)實例表荠割,用于存放Job的實例信息
- BATCH_JOB_EXECUTION_PARAMS:作業(yè)參數(shù)表妹卿,用于存放每個Job執(zhí)行時候的參數(shù)信息,該參數(shù)實際對應(yīng)Job實例的蔑鹦。
- BATCH_JOB_EXECUTION:作業(yè)執(zhí)行器表夺克,用于存放當前作業(yè)的執(zhí)行信息,比如創(chuàng)建時間嚎朽,執(zhí)行開始時間铺纽,執(zhí)行結(jié)束時間,執(zhí)行的那個Job實例哟忍,執(zhí)行狀態(tài)等狡门。
- BATCH_JOB_EXECUTION_CONTEXT:作業(yè)執(zhí)行上下文表,用于存放作業(yè)執(zhí)行器上下文的信息锅很。
- BATCH_STEP_EXECUTION:作業(yè)步執(zhí)行器表其馏,用于存放每個Step執(zhí)行器的信息,比如作業(yè)步開始執(zhí)行時間爆安,執(zhí)行完成時間叛复,執(zhí)行狀態(tài),讀寫次數(shù)扔仓,跳過次數(shù)等信息褐奥。
- BATCH_STEP_EXECUTION_CONTEXT:作業(yè)步執(zhí)行上下文表,用于存放每個作業(yè)步上下文的信息翘簇。
實現(xiàn)作業(yè)的健壯性與擴展性
批處理要求Job必須有較強的健壯性撬码,通常Job是批量處理數(shù)據(jù)、無人值守的版保,這要求在Job執(zhí)行期間能夠應(yīng)對各種發(fā)生的異常呜笑、錯誤夫否,并對Job執(zhí)行進行有效的跟蹤。
一個健壯的Job通常需要具備如下的幾個特性:
1. 容錯性
在Job執(zhí)行期間非致命的異常叫胁,Job執(zhí)行框架應(yīng)能夠進行有效的容錯處理慷吊,而不是讓整個Job執(zhí)行失敗曹抬;通常只有致命的、導致業(yè)務(wù)不正確的異常才可以終止Job的執(zhí)行急鳄。
2. 可追蹤性
Job執(zhí)行期間任何發(fā)生錯誤的地方都需要進行有效的記錄谤民,方便后期對錯誤點進行有效的處理。例如在Job執(zhí)行期間任何被忽略處理的記錄行需要被有效的記錄下來疾宏,應(yīng)用程序維護人員可以針對被忽略的記錄后續(xù)做有效的處理张足。
3. 可重啟性
Job執(zhí)行期間如果因為異常導致失敗,應(yīng)該能夠在失敗的點重新啟動Job坎藐;而不是從頭開始重新執(zhí)行Job为牍。
框架提供了支持上面所有能力的特性岩馍,包括Skip(跳過記錄處理)碉咆、Retry(重試給定的操作)、Restart(從錯誤點開始重新啟動失敗的Job):
- Skip蛀恩,在對數(shù)據(jù)處理期間疫铜,如果數(shù)據(jù)的某幾條的格式不能滿足要求,可以通過Skip跳過該行記錄的處理双谆,讓Processor能夠順利的處理其余的記錄行壳咕。
- Retry,將給定的操作進行多次重試顽馋,在某些情況下操作因為短暫的異常導致執(zhí)行失敗谓厘,如網(wǎng)絡(luò)連接異常、并發(fā)處理異常等寸谜,可以通過重試的方式避免單次的失敗竟稳,下次執(zhí)行操作時候網(wǎng)絡(luò)恢復正常,不再有并發(fā)的異常程帕,這樣通過重試的能力可以有效的避免這類短暫的異常住练。
- Restart铃在,在Job執(zhí)行失敗后劣挫,可以通過重啟功能來繼續(xù)完成Job的執(zhí)行。在重啟時候店诗,批處理框架允許在上次執(zhí)行失敗的點重新啟動Job岭埠,而不是從頭開始執(zhí)行盏混,這樣可以大幅提高Job執(zhí)行的效率蔚鸥。
對于擴展性,框架提供的擴展能力包括如下的四種模式 :
- Multithreaded Step 多線程執(zhí)行一個Step;
- Parallel Step 通過多線程并行執(zhí)行多個Step;
- Remote Chunking 在遠端節(jié)點上執(zhí)行分布式Chunk操作;
- Partitioning Step 對數(shù)據(jù)進行分區(qū)许赃,并分開執(zhí)行;
我們先來看第一種的實現(xiàn)Multithreaded Step:
批處理框架在Job執(zhí)行時默認使用單個線程完成任務(wù)的執(zhí)行,同時框架提供了線程池的支持(Multithreaded Step模式)混聊,可以在Step執(zhí)行時候進行并行處理弹谁,這里的并行是指同一個Step使用線程池進行執(zhí)行,同一個Step被并行的執(zhí)行句喜。使用tasklet的屬性task-executor可以非常容易的將普通的Step變成多線程Step预愤。
Multithreaded Step的實現(xiàn)示例:
需要注意的是Spring Batch框架提供的大部分的ItemReader咳胃、ItemWriter等操作都是線程不安全的植康。
可以通過擴展的方式顯現(xiàn)線程安全的Step。
下面為大家展示一個擴展的實現(xiàn):
需求:針對數(shù)據(jù)表的批量處理销睁,實現(xiàn)線程安全的Step,并且支持重啟能力存崖,即在執(zhí)行失敗點可以記錄批處理的狀態(tài)冻记。
對于示例中的數(shù)據(jù)庫讀取組件JdbcCursorItemReader,在設(shè)計數(shù)據(jù)庫表時来惧,在表中增加一個字段Flag檩赢,用于標識當前的記錄是否已經(jīng)讀取并處理成功,如果處理成功則標識Flag=true违寞,等下次重新讀取的時候贞瞒,對于已經(jīng)成功讀取且處理成功的記錄直接跳過處理。
Multithreaded Step(多線程步)提供了多個線程執(zhí)行一個Step的能力趁曼,但這種場景在實際的業(yè)務(wù)中使用的并不是非常多军浆。
更多的業(yè)務(wù)場景是Job中不同的Step沒有明確的先后順序,可以在執(zhí)行期并行的執(zhí)行挡闰。
Parallel Step:提供單個節(jié)點橫向擴展的能力
使用場景:Step A、Step B兩個作業(yè)步由不同的線程執(zhí)行摄悯,兩者均執(zhí)行完畢后赞季,Step C才會被執(zhí)行。
框架提供了并行Step的能力奢驯∩旯常可以通過Split元素來定義并行的作業(yè)流,并制定使用的線程池瘪阁。
Parallel Step模式的執(zhí)行效果如下:
每個作業(yè)步并行處理不同的記錄邮偎,示例中三個作業(yè)步,處理同一張表中的不同數(shù)據(jù)义黎。
并行Step提供了在一個節(jié)點上橫向處理禾进,但隨著作業(yè)處理量的增加,有可能一臺節(jié)點無法滿足Job的處理廉涕,此時我們可以采用遠程Step的方式將多個機器節(jié)點組合起來完成一個Job的處理泻云。
Remote Chunking:遠程Step技術(shù)本質(zhì)上是將對Item讀、寫的處理邏輯進行分離狐蜕;通常情況下讀的邏輯放在一個節(jié)點進行操作壶愤,將寫操作分發(fā)到另外的節(jié)點執(zhí)行。
遠程分塊是一個把step進行技術(shù)分割的工作,不需要對處理數(shù)據(jù)的結(jié)構(gòu)有明確了解娇哆。
任何輸入源能夠使用單進程讀取并在動態(tài)分割后作為"塊"發(fā)送給遠程的工作進程湃累。
遠程進程實現(xiàn)了監(jiān)聽者模式,反饋請求碍讨、處理數(shù)據(jù)最終將處理結(jié)果異步返回治力。請求和返回之間的傳輸會被確保在發(fā)送者和單個消費者之間。
在Master節(jié)點勃黍,作業(yè)步負責讀取數(shù)據(jù)宵统,并將讀取的數(shù)據(jù)通過遠程技術(shù)發(fā)送到指定的遠端節(jié)點上,進行處理覆获,處理完畢后Master負責回收Remote端執(zhí)行的情況马澈。
在Spring Batch框架中通過兩個核心的接口來完成遠程Step的任務(wù),分別是ChunkProvider與ChunkProcessor弄息。
ChunkProvider:根據(jù)給定的ItemReader操作產(chǎn)生批量的Chunk操作痊班;
ChunkProcessor:負責獲取ChunkProvider產(chǎn)生的Chunk操作,執(zhí)行具體的寫邏輯摹量;
Spring Batch中對遠程Step沒有默認的實現(xiàn)涤伐,但我們可以借助SI或者AMQP實現(xiàn)來實現(xiàn)遠程通訊能力。
Step本地節(jié)點負責讀取數(shù)據(jù)缨称,并通過MessagingGateway將請求發(fā)送到遠程Step上凝果;遠程Step提供了隊列的監(jiān)聽器,當請求隊列中有消息時候獲取請求信息并交給ChunkHander負責處理睦尽。
接下來我們看下最后一種分區(qū)模式器净;Partitioning Step:分區(qū)模式需要對數(shù)據(jù)的結(jié)構(gòu)有一定的了解,如主鍵的范圍当凡、待處理的文件的名字等掌动。
這種模式的優(yōu)點在于分區(qū)中每一個元素的處理器都能夠像一個普通Spring Batch任務(wù)的單步一樣運行,也不必去實現(xiàn)任何特殊的或是新的模式粗恢,來讓他們能夠更容易配置與測試柑晒。
通過分區(qū)可以實現(xiàn)以下的優(yōu)點:
- 分區(qū)實現(xiàn)了更細粒度的擴展;
- 基于分區(qū)可以實現(xiàn)高性能的數(shù)據(jù)切分眷射;
- 分區(qū)比遠程通常具有更高的擴展性匙赞;
- 分區(qū)后的處理邏輯,支持本地與遠程兩種模式妖碉;
- 分區(qū)作業(yè)典型的可以分成兩個處理階段涌庭,數(shù)據(jù)分區(qū)、分區(qū)處理欧宜;
數(shù)據(jù)分區(qū):根據(jù)特殊的規(guī)則(例如:根據(jù)文件名稱坐榆,數(shù)據(jù)的唯一性標識,或者哈希算法)將數(shù)據(jù)進行合理的數(shù)據(jù)切片冗茸,為不同的切片生成數(shù)據(jù)執(zhí)行上下文Execution Context席镀、作業(yè)步執(zhí)行器Step Execution∠氖可以通過接口Partitioner生成自定義的分區(qū)邏輯豪诲,Spring Batch批處理框架默認實現(xiàn)了對多文件的實現(xiàn)org.springframework.batch.core.partition.support.MultiResourcePartitioner;也可以自行擴展接口Partitioner來實現(xiàn)自定義的分區(qū)邏輯挂绰。
分區(qū)處理:通過數(shù)據(jù)分區(qū)后屎篱,不同的數(shù)據(jù)已經(jīng)被分配到不同的作業(yè)步執(zhí)行器中,接下來需要交給分區(qū)處理器進行作業(yè)葵蒂,分區(qū)處理器可以本地執(zhí)行也可以遠程執(zhí)行被劃分的作業(yè)交播。接口PartitionHandler定義了分區(qū)處理的邏輯,Spring Batch批處理框架默認實現(xiàn)了本地多線程的分區(qū)處理org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler践付;也可以自行擴展接口PartitionHandler來實現(xiàn)自定義的分區(qū)處理邏輯堪侯。
Spring Batch框架提供了對文件分區(qū)的支持荔仁,實現(xiàn)類org.springframework.batch.core.partition.support.MultiResourcePartitioner提供了對文件分區(qū)的默認支持伍宦,根據(jù)文件名將不同的文件處理進行分區(qū),提升處理的速度和效率乏梁,適合有大量小文件需要處理的場景次洼。
示例展示了將不同文件分配到不同的作業(yè)步中遇骑,使用MultiResourcePartitioner進行分區(qū)卖毁,意味著每個文件會被分配到一個不同的分區(qū)中。如果有其它的分區(qū)規(guī)則,可以通過實現(xiàn)接口Partitioner來進行自定義的擴展亥啦。有興趣的TX炭剪,可以自己實現(xiàn)基于數(shù)據(jù)庫的分區(qū)能力哦。
總結(jié)一下翔脱,批處理框架在擴展性上提供了4中不同能力奴拦,每種都是各自的使用場景,我們可以根據(jù)實際的業(yè)務(wù)需要進行選擇届吁。
批處理框架的不足與增強
Spring Batch批處理框架雖然提供了4種不同的監(jiān)控方式,但從目前的使用情況來看疚沐,都不是非常的友好暂氯。
- 通過DB直接查看亮蛔,對于管理人員來講痴施,真的不忍直視;
- 通過API實現(xiàn)自定義的查詢究流,這是程序員的天堂辣吃,確實運維人員的地獄;
- 提供了Web控制臺梯嗽,進行Job的監(jiān)控和操作,目前提供的功能太裸露沽损,無法直接用于生產(chǎn)灯节;
- 提供JMX查詢方式,對于非開發(fā)人員太不友好绵估;
但在企業(yè)級應(yīng)用中面對批量數(shù)據(jù)處理炎疆,僅僅提供批處理框架僅能滿足批處理作業(yè)的快速開發(fā)、執(zhí)行能力国裳。
企業(yè)需要統(tǒng)一的批處理平臺來處理復雜的企業(yè)批處理應(yīng)用形入,批處理平臺需要解決作業(yè)的統(tǒng)一調(diào)度、批處理作業(yè)的集中管理和管控缝左、批處理作業(yè)的統(tǒng)一監(jiān)控等能力亿遂。
那完美的解決方案是什么呢?
關(guān)注我+點喜歡:【點擊鏈接免費領(lǐng)取】https://shimo.im/docs/QzafqtfKU4MoODI9/read
Dubbo渺杉、Redis蛇数、設(shè)計模式、Netty是越、zookeeper耳舅、Spring cloud、分布式倚评、
高并發(fā)等架構(gòu)技術(shù)
企業(yè)級批處理平臺需要在Spring Batch批處理框架的基礎(chǔ)上浦徊,集成調(diào)度框架馏予,通過調(diào)度框架可以將任務(wù)按照企業(yè)的需求進行任務(wù)的定期執(zhí)行;
豐富目前Spring Batch Admin(Spring Batch的管理監(jiān)控平臺盔性,目前能力比較薄弱)框架霞丧,提供對Job的統(tǒng)一管理功能,增強Job作業(yè)的監(jiān)控纯出、預警等能力蚯妇;
通過與企業(yè)的組織機構(gòu)、權(quán)限管理暂筝、認證系統(tǒng)進行合理的集成箩言,增強平臺對Job作業(yè)的權(quán)限控制、安全管理能力焕襟。
由于時間關(guān)系陨收,今天的分享就到這里,很多內(nèi)容未能展開討論鸵赖。歡迎大家在實際業(yè)務(wù)中使用Spring Batch框架务漩。
最后的話
覺得還不錯可以點喜歡+關(guān)注支持一波~【點擊鏈接免費領(lǐng)取】https://shimo.im/docs/QzafqtfKU4MoODI9/read獲取一些我私人整理的Java進階資料!
為什么某些人會一直比你優(yōu)秀它褪,是因為他本身就很優(yōu)秀還一直在持續(xù)努力變得更優(yōu)秀饵骨。而你是不是還在滿足于現(xiàn)狀且內(nèi)心在竊喜?“對于程序員來說,如果哪一天開始他停止了學習茫打,那么他的職業(yè)生涯便開始宣告消亡居触。”所以行動起來老赤,學習起來轮洋!