netpoll
v0.6.5
中文
Netpoll是字节跳动开发的一款高性能非阻塞I/O网络框架,专注于RPC场景。
RPC 通常处理逻辑很重,因此无法串行处理 I/O。但Go的标准库net是为阻塞I/O API而设计的,因此RPC框架只能遵循One Conn One Goroutine的设计。由于高并发下有大量的goroutine,会浪费大量的上下文切换成本。另外,net.Conn没有检查Alive的API,因此很难为RPC框架制作一个高效的连接池,因为池中可能存在大量失败的连接。
另一方面,开源社区目前缺乏专注于RPC场景的Go网络库。类似的仓库如:evio、gnet等,都是针对Redis、HAProxy等场景。
但现在,Netpoll横空出世,解决了上述问题。它从evio和netty的设计中汲取灵感,具有出色的性能,更适合微服务架构。另外Netpoll提供了很多Feature,在一些RPC场景下建议替换net。
我们基于Netpoll开发了RPC框架Kitex和HTTP框架Hertz,性能均处于业界领先。
示例展示了如何使用 Netpoll 构建 RPC 客户端和服务器。
欲了解更多信息,请参阅文档。
已经
IsActive
支持检查连接是否存活Dialer
支持构建客户端EventLoop
支持搭建服务器未来
不支持
基准应满足工业使用的要求。在RPC场景中,并发和超时是必要的支撑项。
我们提供netpoll-benchmark项目来跟踪和比较Netpoll与其他框架在不同条件下的性能,以供参考。
更多基准参考 kitex-benchmark 和 Hertz-benchmark。