Elastic-Job重要概念
分片
任務的分布式執(zhí)行,需要將一個任務拆分為多個獨立的任務項,然后由分布式的服務器分別執(zhí)行某一個或幾個分片項。例如:有一個遍歷數(shù)據(jù)庫某張表的作業(yè),現(xiàn)有2臺服務器。為了快速的執(zhí)行作業(yè),那么每臺服務器應執(zhí)行作業(yè)的50%。 為滿足此需求,可將作業(yè)分成2片,每臺服務器執(zhí)行1片。作業(yè)遍歷數(shù)據(jù)的邏輯應為:服務器A遍歷ID以奇數(shù)結(jié)尾的數(shù)據(jù);服務器B遍歷ID以偶數(shù)結(jié)尾的數(shù)據(jù)。 如果分成10片,則作業(yè)遍歷數(shù)據(jù)的邏輯應為:每片分到的分片項應為ID%10,而服務器A被分配到分片項0,1,2,3,4;服務器B被分配到分片項5,6,7,8,9,直接的結(jié)果就是服務器A遍歷ID以0-4結(jié)尾的數(shù)據(jù);服務器B遍歷ID以5-9結(jié)尾的數(shù)據(jù)。
leader選舉
zookeeper會保證在多臺服務器中選舉出一個leader,leader如果下線會觸發(fā)重新選舉,在選出下個leader前所有任務會被阻塞,leader會以“協(xié)調(diào)者”角色負責分片。
分片策略
AverageAllocationJobShardingStrategy
全路徑:
? com.dangdang.ddframe.job.lite.api.strategy.impl.AverageAllocationJobShardingStrategy
策略說明:
? 基于平均分配算法的分片策略,也是默認的分片策略。
? 如果分片不能整除,則不能整除的多余分片將依次追加到序號小的服務器。如:
? 如果有3臺服務器,分成9片,則每臺服務器分到的分片是:1=[0,1,2], 2=[3,4,5], 3=[6,7,8]
? 如果有3臺服務器,分成8片,則每臺服務器分到的分片是:1=[0,1,6], 2=[2,3,7], 3=[4,5]
? 如果有3臺服務器,分成10片,則每臺服務器分到的分片是:1=[0,1,2,9], 2=[3,4,5], 3=[6,7,8]
OdevitySortByNameJobShardingStrategy
全路徑:
? com.dangdang.ddframe.job.lite.api.strategy.impl.OdevitySortByNameJobShardingStrategy
策略說明:
? 根據(jù)作業(yè)名的哈希值奇偶數(shù)決定IP升降序算法的分片策略。
? 作業(yè)名的哈希值為奇數(shù)則IP升序。
? 作業(yè)名的哈希值為偶數(shù)則IP降序。
? 用于不同的作業(yè)平均分配負載至不同的服務器。
AverageAllocationJobShardingStrategy的缺點是,一旦分片數(shù)小于作業(yè)服務器數(shù),作業(yè)將永遠分配至IP地址靠前的服務器,導致IP地址靠后的服務器空閑。而OdevitySortByNameJobShardingStrategy則可以根據(jù)作業(yè)名稱重新分配服務器負載。如:
如果有3臺服務器,分成2片,作業(yè)名稱的哈希值為奇數(shù),則每臺服務器分到的分片是:1=[0], 2=[1], 3=[]
如果有3臺服務器,分成2片,作業(yè)名稱的哈希值為偶數(shù),則每臺服務器分到的分片是:3=[0], 2=[1], 1=[]
RotateServerByNameJobShardingStrategy
全路徑: com.dangdang.ddframe.job.lite.api.strategy.impl.RotateServerByNameJobShardingStrategy
策略說明:
? 根據(jù)作業(yè)名的哈希值對服務器列表進行輪轉(zhuǎn)的分片策略。
總結(jié)
以上是生活随笔為你收集整理的Elastic-Job重要概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Elastic-Job简介
- 下一篇: Elastic-Job任务类