Elastic-Job作業分片策略
原文地址:http://dangdangdotcom.github.io/elastic-job/post/1.x/job_strategy/
作業分片策略
框架提供的分片策略
AverageAllocationJobShardingStrategy
全路徑:
com.dangdang.ddframe.job.plugin.sharding.strategy.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.plugin.sharding.strategy.OdevitySortByNameJobShardingStrategy
策略說明:
根據作業名的雜湊值奇偶數決定IP
升降序演算法的分片策略。
作業名的雜湊值為奇數則IP
升序。
作業名的雜湊值為偶數則IP
降序。
用於不同的作業平均分配負載至不同的伺服器。
AverageAllocationJobShardingStrategy
的缺點是,一旦分片數小於作業伺服器數,作業將永遠分配至IP
地址靠前的伺服器,導致IP
地址靠後的伺服器空閒。而OdevitySortByNameJobShardingStrategy
則可以根據作業名稱重新分配伺服器負載。如:
如果有3
臺伺服器,分成2
片,作業名稱的雜湊值為奇數,則每臺伺服器分到的分片是:1=[0],
2=[1], 3=[]
如果有3
臺伺服器,分成2
片,作業名稱的雜湊值為偶數,則每臺伺服器分到的分片是:3=[0],
2=[1], 1=[]
RotateServerByNameJobShardingStrategy
全路徑:
com.dangdang.ddframe.job.plugin.sharding.strategy.RotateServerByNameJobShardingStrategy
策略說明:
根據作業名的雜湊值對伺服器列表進行輪轉的分片策略。
自定義分片策略
實現JobShardingStrategy
介面並實現sharding
方法,介面方法引數為作業伺服器IP
列表和分片策略選項,分片策略選項包括作業名稱,分片總數以及分片序列號和個性化引數對照表,可以根據需求定製化自己的分片策略。
歡迎將分片策略以外掛的形式貢獻至com.dangdang.ddframe.job.plugin.sharding.strategy
包。
配置分片策略
與配置通常的作業屬性相同,在spring
名稱空間或者JobConfiguration
中配置jobShardingStrategyClass
屬性,屬性值是作業分片策略類的全路徑。
================================================================================================================