如何提高网关性能
使用缓存
map,queue。将一些策略比如负载均衡进行缓存
提高吞吐量
除了使用mq,我们还可以使用Disruptor,mcmp队列
适当串行化
串行化适合于耗时短的任务
而并行化适合于耗时长,任务之间无依赖关系,比如远程RPC调用
工作线程
【拒绝八股,线程池线程数设置不再迷茫】
readBuffer,writeBuffer优化
CPU瓶颈
特别是Java 21 以前,没有虚拟线程,即使你开启零拷贝,上下文切换这种东西还是有的,但现代CPU其实上下文切换可以忽略不计的。主要是线程调度
网络带宽
相比于cpu,网络带宽更是瓶颈,10w在同一时刻发送,如果你的消息是1kb,那么它就需要100mb的带宽 => 1 gib带宽
去优化你们的 Linux参数,主要是tcp连接有关,文件描述符
消息收发优化
收:
这个感觉没啥要优化的
发:
1.压缩2.使用紧凑型协议,比如说用 protobuf => json
这两种东西其实是用 cpu 换 网络带宽
3.聚合发送/单个改批量
你怎么单个改批量发
1.基于时间or数量
2.kafka stream 滑动窗口来实现批量发
使用Buffer pool 减少内存使用
jvm调优
优化心跳
心跳之间是占带宽的
两种心跳

原来每隔30s就会发心跳,运用了request as ping 后发消息后下一次心跳时间就会往后延迟
即
1.消息发送-接受就被看做是一次心跳
2.只有超过心跳间隔,也没有收发过消息,才会针对发起心跳
3.websocket频繁收发消息的情况下,几乎不会产生额外的心跳消息(在message里 增加一个 headbeat:true)