Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
1c5a8415
提交
1c5a8415
authored
3月 10, 2017
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
设计新的路由算法"LRU";规划新算法"LFU";
上级
9c03285d
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
76 行增加
和
22 行删除
+76
-22
ExecutorRouteStrategyEnum.java
...m/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
+2
-0
ExecutorRouter.java
...ain/java/com/xxl/job/admin/core/route/ExecutorRouter.java
+4
-21
ExecutorRouteConsistentHash.java
...dmin/core/route/strategy/ExecutorRouteConsistentHash.java
+1
-1
ExecutorRouteLFU.java
...m/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
+24
-0
ExecutorRouteLRU.java
...m/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
+45
-0
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
浏览文件 @
1c5a8415
...
...
@@ -12,6 +12,8 @@ public enum ExecutorRouteStrategyEnum {
ROUND
(
"轮询"
,
new
ExecutorRouteRound
()),
RANDOM
(
"随机"
,
new
ExecutorRouteRandom
()),
CONSISTENT_HASH
(
"一致性HASH"
,
new
ExecutorRouteConsistentHash
()),
LEAST_FREQUENTLY_USED
(
"最不经常使用"
,
new
ExecutorRouteLFU
()),
LEAST_RECENTLY_USED
(
"最近最久未使用"
,
new
ExecutorRouteLRU
()),
FAILOVER
(
"故障转移"
,
null
);
ExecutorRouteStrategyEnum
(
String
title
,
ExecutorRouter
router
)
{
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
浏览文件 @
1c5a8415
...
...
@@ -23,28 +23,11 @@ public abstract class ExecutorRouter {
public
static
void
main
(
String
[]
args
)
{
int
c1
=
0
;
int
c2
=
0
;
int
c3
=
0
;
long
start
=
System
.
currentTimeMillis
();
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
String
ret
=
ExecutorRouter
.
route
(
i
,
new
ArrayList
<
String
>(
Arrays
.
asList
(
"127.0.0.1:0000"
,
"127.0.0.1:2222"
,
"127.0.0.1:3333"
)),
ExecutorRouteStrategyEnum
.
CONSISTENT_HASH
.
name
());
if
(
ret
.
equals
(
"127.0.0.1:0000"
))
{
c1
++;
}
else
if
(
ret
.
equals
(
"127.0.0.1:2222"
))
{
c2
++;
}
else
if
(
ret
.
equals
(
"127.0.0.1:3333"
))
{
c3
++;
}
}
long
end
=
System
.
currentTimeMillis
();
System
.
out
.
println
(
end
-
start
);
// 1000*100=740、1000*1=162、
System
.
out
.
println
(
c1
);
System
.
out
.
println
(
c2
);
System
.
out
.
println
(
c3
);
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
String
ret
=
ExecutorRouter
.
route
(
666
,
new
ArrayList
<
String
>(
Arrays
.
asList
(
"127.0.0.1:0000"
,
"127.0.0.1:2222"
,
"127.0.0.1:3333"
)),
ExecutorRouteStrategyEnum
.
LEAST_RECENTLY_USED
.
name
()
);
System
.
out
.
println
(
ret
);
}
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
浏览文件 @
1c5a8415
...
...
@@ -10,7 +10,7 @@ import java.util.SortedMap;
import
java.util.TreeMap
;
/**
* 分组下
JOB均匀散列在不同机器上
;且每个JOB固定调度其中一台机器;
* 分组下
机器地址相同,不同JOB均匀散列在不同机器上,保证分组下机器分配JOB平均
;且每个JOB固定调度其中一台机器;
* a、virtual node:解决不均衡问题
* b、hash method replace hashCode:String的hashCode可能重复,需要进一步扩大hashCode的取值范围
* Created by xuxueli on 17/3/10.
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
0 → 100644
浏览文件 @
1c5a8415
package
com
.
xxl
.
job
.
admin
.
core
.
route
.
strategy
;
import
com.xxl.job.admin.core.route.ExecutorRouter
;
import
java.util.ArrayList
;
/**
* 单个JOB对应的每个执行器,使用频率最低的优先被选举
* a(*)、LFU(Least Frequently Used):最不经常使用,频率/次数
* b、LRU(Least Recently Used):最近最久未使用,时间
*
* Created by xuxueli on 17/3/10.
*/
public
class
ExecutorRouteLFU
extends
ExecutorRouter
{
@Override
public
String
route
(
int
jobId
,
ArrayList
<
String
>
addressList
)
{
// TODO
return
addressList
.
get
(
0
);
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
0 → 100644
浏览文件 @
1c5a8415
package
com
.
xxl
.
job
.
admin
.
core
.
route
.
strategy
;
import
com.xxl.job.admin.core.route.ExecutorRouter
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* 单个JOB对应的每个执行器,最久为使用的优先被选举
* a、LFU(Least Frequently Used):最不经常使用,频率/次数
* b(*)、LRU(Least Recently Used):最近最久未使用,时间
*
* Created by xuxueli on 17/3/10.
*/
public
class
ExecutorRouteLRU
extends
ExecutorRouter
{
private
static
ConcurrentHashMap
<
Integer
,
LinkedHashMap
<
String
,
String
>>
jobLRUMap
=
new
ConcurrentHashMap
<
Integer
,
LinkedHashMap
<
String
,
String
>>();
@Override
public
String
route
(
int
jobId
,
ArrayList
<
String
>
addressList
)
{
LinkedHashMap
<
String
,
String
>
lruItem
=
jobLRUMap
.
get
(
jobId
);
if
(
lruItem
==
null
)
{
/**
* LinkedHashMap
* a、accessOrder:ture=访问顺序排序(get/put时排序);false=插入顺序排期;
* b、removeEldestEntry:新增元素时将会调用,返回true时会删除最老元素;可封装LinkedHashMap并重写该方法,比如定义最大容量,超出是返回true即可实现固定长度的LRU算法;
*/
lruItem
=
new
LinkedHashMap
<>(
16
,
0.75f
,
true
);
jobLRUMap
.
put
(
jobId
,
lruItem
);
}
for
(
String
address:
addressList
)
{
if
(!
lruItem
.
containsKey
(
address
))
{
lruItem
.
put
(
address
,
address
);
}
}
String
eldestKey
=
lruItem
.
entrySet
().
iterator
().
next
().
getKey
();
String
eldestValue
=
lruItem
.
get
(
eldestKey
);
return
eldestValue
;
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论