如何提高网关性能

使用缓存

map,queue。将一些策略比如负载均衡进行缓存

提高吞吐量

除了使用mq,我们还可以使用Disruptor,mcmp队列

适当串行化

串行化适合于耗时短的任务

而并行化适合于耗时长,任务之间无依赖关系,比如远程RPC调用

工作线程

【拒绝八股,线程池线程数设置不再迷茫】

bilibili

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)