# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# README
minirpc
一个简单的rpc
之前写了一个rpc框架,由于是第一次写,所以当时想把限流,熔断,服务注册与发现等功能都加进去,当时并没有太关注性能,而且代码很多很乱
所以新写一个minirpc,此项目不会有太多的功能,只有最基础的功能,参考 go-kratos 可以知道,我们完全可以基于一个简单的rpc框架扩展成一个很好用的框架
压测
既然此框架注重性能,那么要做好压测,至于怎么做压测,可以看我之前写的文章:压测
至于此项目如何做压测,我们直接fork鸟窝老师的压测仓库,模仿他的代码,为自己的rpc框架增加上压测代码
常用优化
我们基于tcp协议,可以很简单的实现一个支持长连接的rpc。
- 尽可能的使用对象池,减少内存分配,垃圾回收压力
- 除了对象,还有[]byte缓冲区
- 可以参考
fasthttp
,此框架就是把对象复用做到极致了,性能才能那么好
- 使用goroutine pool,有挺多线程的库,复用goroutine
- 使用bufio,虽然会增加内存的使用,但是大部分情况下会减少系统调用,弊大于利
- 考虑场景: 长连接 or 短链接 or 连接多路复用。针对场景做特殊优化
- 比如说两个微服务之间调用,可能只需要建立少数的长连接就够用了,即便该服务被好几百个服务调用,几千条连接也够用了
- 如果是网关等需要建立大量长连接的场景,而且大部分都是空闲连接的话,std net就不合适了,可以使用
netpoll
代替std net
- pprof
- go tool pprof --alloc_objects your-program mem.pprof
- 可以但没必要
- 其实还可以将数据压缩后传送,然后再解压,消耗更多的cpu但是传输更快了