libi / dcron

轻量分布式定时任务库 a lightweight distributed job scheduler library
MIT License
422 stars 73 forks source link

任务不会平均分配 #60

Closed iwanlebron closed 1 year ago

iwanlebron commented 1 year ago

本地启动三个实例,会一直在其中一个实例运行,不会分配到其他实例

dxyinme commented 1 year ago

在任务数量少的时候,任务不会平均分配是正常现象,Hash算法只能保证相对均匀,可以尝试使用自定义的Hash算法,比如https://github.com/spaolacci/murmur3 ,或者增加任务数量。

libi commented 1 year ago

@ivanlebron 感觉是部署哪里可能存在问题,目前hash环的初始分片大小是 50 ,所以3个节点落到同一个分片的概率比较低。 可以提供下版本号和具体启动代码吗

iwanlebron commented 1 year ago

部署是简单的启动了一个dcron任务(同readme文件中的案例),连接的本地单机redis,具体代码如下: redisCli := redis.NewClient(&redis.Options{ Addr: ":6379", }) drv := driver.NewRedisDriver(redisCli) dcron := dcron.NewDcron("server1", drv)

dcron.AddFunc("test1", "/1 *", func() { fmt.Println("执行 test1 任务", time.Now().Format("15:04:05")) }) dcron.Run()

libi commented 1 year ago

你这是只新增了一个任务,然后部署了三个节点呀。改成这样试试:

redisCli := redis.NewClient(&redis.Options{
Addr: ":6379",
})
drv := driver.NewRedisDriver(redisCli)
dcron := dcron.NewDcron("server1", drv)

dcron.AddFunc("test1", "*/1 * * * *", func() {
fmt.Println("执行 test1 任务", time.Now().Format("15:04:05"))
})
dcron.AddFunc("test2", "*/1 * * * *", func() {
fmt.Println("执行 test2 任务", time.Now().Format("15:04:05"))
})
dcron.AddFunc("test3", "*/1 * * * *", func() {
fmt.Println("执行 test3 任务", time.Now().Format("15:04:05"))
})
dcron.Run()
iwanlebron commented 1 year ago

ok