sofastack / sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
https://www.sofastack.tech/projects/sofa-jraft/
Apache License 2.0
3.58k stars 1.15k forks source link

在使用 sofa-bolt 的情况下, PingRequestProcessor 是否有必要设置单独的 Executor? #1067

Closed qiujiayu closed 8 months ago

qiujiayu commented 8 months ago

PingRequestProcessor 中 executor() 返回 null, 则会使用 com.alipay.remoting.ProcessorManager#getDefaultExecutor(); 当这个线程池满了,或队列中比较多数据时,会影响 PingRequestProcessor 的执行,从而影响集群的状态。 那么 PingRequestProcessor 是否有必要设置单独的 Executor?

fengjiachun commented 8 months ago

遇到实际问题了吗? PingRequestProcessor 没有指定 executor,但是其他的所有 processor 都有指定 executor,也就是基本相当于 PingRequestProcessor 独占了 default executor

qiujiayu commented 8 months ago

com.alipay.remoting.ProcessorManager#getDefaultExecutor(); 还被用于处理 bolt rpc 超时,如果有大量RPC超时,default executor 有堆积时,会造成心跳也超时。

fengjiachun commented 8 months ago

我们可以为这个方法增加一个 pingExecutor 参数

当然,我还希望原有方法签名保留,它会是这样:

public static void addRaftRequestProcessors(final RpcServer rpcServer, final Executor raftExecutor,
                                                final Executor cliExecutor) {
addRaftRequestProcessors(rpcServer, raftExecutor, null, cliExecutor)
}

也就说,默认的 ping executor 就是 null,对此你有其他的意见吗?

qiujiayu commented 8 months ago

我们可以为这个方法增加一个 pingExecutor 参数

当然,我还希望原有方法签名保留,它会是这样:

public static void addRaftRequestProcessors(final RpcServer rpcServer, final Executor raftExecutor,
                                                final Executor cliExecutor) {
addRaftRequestProcessors(rpcServer, raftExecutor, null, cliExecutor)
}

也就说,默认的 ping executor 就是 null,对此你有其他的意见吗?

没有,那我按这个方法改一下。

fengjiachun commented 8 months ago

感谢,我会把这个 pr 加到新的 release 中