工具类说明
高性能系统时间工具类
高并发场景下System.currentTimeMillis()的性能问题的优化-腾讯云开发者社区-腾讯云
发现一个开源项目优化点,点进来就是你的了 - 捉虫大师 - 博客园
JSON序列化工具类
对比JackJSON,GSON,FastJson。性能最好的是JackJson
断言
参考dubbo
高并发场景下System.currentTimeMillis()的性能问题的优化-腾讯云开发者社区-腾讯云
发现一个开源项目优化点,点进来就是你的了 - 捉虫大师 - 博客园
对比JackJSON,GSON,FastJson。性能最好的是JackJson
参考dubbo
项目模块:
BreezeGateway-Core
BreezeGateway-Client
BreezeGateway-Nebula-Bootstrap
BreezeGateway-Register-Center
BreezeGateway-Config-Center
BreezeGateway-Common
BreezeGateway-backend-Dubbo
BreezeGateway-backend-Httpserver
groupId:
io.github.soyorin.gw
1 | <groupId>io.github.soyorin.gw</groupId> |
map,queue。将一些策略比如负载均衡进行缓存
除了使用mq,我们还可以使用Disruptor,mcmp队列
串行化适合于耗时短的任务
而并行化适合于耗时长,任务之间无依赖关系,比如远程RPC调用
【拒绝八股,线程池线程数设置不再迷茫】
特别是Java 21 以前,没有虚拟线程,即使你开启零拷贝,上下文切换这种东西还是有的,但现代CPU其实上下文切换可以忽略不计的。主要是线程调度
相比于cpu,网络带宽更是瓶颈,10w在同一时刻发送,如果你的消息是1kb,那么它就需要100mb的带宽 => 1 gib带宽
去优化你们的 Linux参数,主要是tcp连接有关,文件描述符
收:
这个感觉没啥要优化的
发:
1.压缩2.使用紧凑型协议,比如说用 protobuf => json
这两种东西其实是用 cpu 换 网络带宽
3.聚合发送/单个改批量
你怎么单个改批量发
1.基于时间or数量
2.kafka stream 滑动窗口来实现批量发
心跳之间是占带宽的
两种心跳

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

单异步模式其实就是指你发送和接受请求的线程是同一个,那么你是没法同时发送和接受的
怎么实现双异步模式呢?
用不同的线程去发送接收请求
completableFuture演示
1 | package async; |

但其实也不是绝对,如果使用的线程池,线程有限,发送和接收也有可能用的同一个线程
使用线程池的时候记得关闭,不然main线程退出后,会由于还存在用户线程,导致程序卡住
https://segmentfault.com/q/1010000042935593
如果我们的下游服务处理比较快,那么双异步模式就会比较吃亏,因为会频繁地进行上下文切换,这样耗时就
会比单异步的大
Future的局限性
CompletableFuture原理与实践-外卖商家端API的异步化
CompletableFuture使用:
创建异步线程
1 | runAsync |
获取结果
1 | // |
网关大体分为两种:流量和业务网关

SpringCloud Gateway:依赖Spring生态、启动时间较长
Zuul:早期版本是同步阻塞的,而新版本代码复杂,学习成本高,且停止维护了
Nginx:更适合静态资源的请求,比如html、css、图片、音频、视频等