[Netpoll][Netpoll]是一个高性能的非阻塞I/O网络框架,专注于RPC场景,由[字节跳动][ByteDance]开发。
RPC通常在处理逻辑上较为繁重,因此无法串行处理I/O。但是Go的标准库[net][net]设计为阻塞I/O API,所以RPC框架只能遵循一个连接一个goroutine的设计。在高并发下,由于大量goroutine的存在,这将浪费大量的上下文切换成本。此外,[net.Conn][net.Conn]没有检查连接是否存活的API,因此RPC框架难以实现高效的连接池,因为池中可能存在大量失效连接。
另一方面,开源社区目前缺乏专注于RPC场景的Go网络库。类似的项目如:[evio][evio]、[gnet][gnet]等,都主要关注[Redis][Redis]、[HAProxy][HAProxy]等场景。
现在,[Netpoll][Netpoll]应运而生, 解决了上述问题。它借鉴了[evio][evio]和[netty][netty]的设计,具有出色的性能,更适合微服务架构。此外,[Netpoll][Netpoll]提供了许多特性,建议在某些RPC场景中替代[net][net]使用。
我们基于[Netpoll][Netpoll]开发了RPC框架[Kitex][Kitex]和HTTP框架[Hertz][Hertz],两者都具有业界领先的性能。
[示例][netpoll-examples]展示了如何使用[Netpoll][Netpoll]构建RPC客户端和服务器。
更多信息请参考文档。
已实现
IsActive
支持检查连接是否存活Dialer
支持构建客户端EventLoop
支持构建服务器未来计划
不支持
基准测试应满足工业使用要求。在RPC场景中,并发和超时是必要的支持项。
我们提供了[netpoll-benchmark][netpoll-benchmark]项目,用于跟踪和比较[Netpoll][Netpoll]与其他框架在不同条件下的性能,以供参考。
更多基准测试请参考[kitex-benchmark][kitex-benchmark]和[hertz-benchmark][hertz-benchmark]。