netty性能压测碰到的问题和相关知识点
背景:一个通讯分了三层
T层:连接设备,简单解报文向上传送
对设备的连接是netty server;对上层用了netty client客户池
A层:解析报文
对T层连接是netty server;对上层用了netty client客户池
S层:发送消息
这层有频繁的读写redis以及写kafka等
遇到问题:
1.netty里的耗时业务处理------因为耗时任务,导致压测结果数据不好,目前使用的是netty自带的异步线程池:DefaultEventExecutorGroup
有netty的默认的耗时异步线程池
DefaultEventExecutorGroup
下面几篇文章有讲解:
Netty耗时的业务逻辑应该写在哪儿,有什么注意事项?
这个文章描述了使用netty默认的异步线程池这里用的是eventLoop;以及在channel里自定义java线程池的比较
Netty耗时任务的处理
Netty异步任务调度与异步线程池
2.S层处理慢,导致A层写报文出现大量channel的isWritable为false的事故
搜索关键字 netty channel().isWritable();有一些解决方案,但是对我意义不大,先贴出来,再说明。
深入理解Netty---从偶现宕机看Netty流量控制
作为中间层,不可能降低发送速率,也不能关闭读,因为T层在源源不断接收设备数据
这个故障的根源,还是S层处理慢,其实也就是问题1,