elastic-job 开发坑位记录

1.ej的一个非常好的分布式任务调度框架,很多功能和特点,我在根据这个框架编写的时候发现他并不适用外部第三方增加任务。我使用包装Rest接口的方式,将init做成一个接口,加一个任务调用一次就可以。

2.在大部分编写完成后,我读文档的时候发现他所提供的是必须要写在xml或者bean里,这个是关键,意味着服务挂掉的话整个的任务都会丢失,所以必须采用完善的宕机策略。因此我把每个任务都事先保存,在服务启动时将这个本身写在bean里 (因为项目是springboot的),服务开启时会自动读取相应的任务记录,并重新记录。由于采用的是dataflow的方式就运行一次也很简单。

3.在做完以上操作后我尝试多个服务,即高可用,注册后其他的服务并没有进行相应的任务,原因和第二个一样,所以我必须要进行相应的调整来告诉其他服务器需要注册这个服务,我想了两种办法,一个是进行分发,就是写个httpclient把数据给其他服务器,还一个是从zk拿数据,最后是采用的httpclient,比较快和稳定。

4.在一系列开发到达最后的时候,我要将这个放在服务器上进行压测的时候,发现ej他每个任务都会固定占用4个线程作为留守线程,并且在任务开始后,占用相应数量的线程来做操作,当然这符合ej本身写固定任务的需求,但是我时Rest的啊 理论上是无限个任务的,当任务为4000个时,不管怎么样都是会炸掉的,不管分布式这么弄,他占用的线程是一样的多。失效转移也是根据这个线程来做的。此时的场景是4C16G服务器三台,炸的很稳定。目前可以采用命令来限制大小或线程释放速度,看了下是因为堆内存占用的原因,占用到4G的时候稳定炸的。

5.为了减小他的任务数,我只能采用每个任务多个租户的方式做每个线程物尽其用,其次还有如果使用他本身的链路追踪的话,他一次任务会插4次数据库,在大数据量的时候必须提高数据库的连接数。


你可能感兴趣的:(elastic-job 开发坑位记录)