Http协议的背景
HTTP(Hypertext Transfer Protocol)是一种用于在万维网(World Wide Web)上传输超文本数据的协议。它诞生于20世纪90年代早期,由蒂姆·伯纳斯-李领导的团队开发,用于实现分布式超文本系统。HTTP基于客户端-服务器模型,通过请求-响应方式进行通信。它的初衷是让文档在不同计算机之间共享,从而形成了现代互联网的基础。HTTP的演化推动了Web的发展,从最初的HTTP/0.9到HTTP/1.1,再到HTTP/2和HTTP/3,不断优化性能和安全性,适应了互联网的快速发展。
Hertz框架
Hertz是一个高可用性、高性能和高可扩展性的Golang HTTP框架,可以帮助开发人员构建微服务。它参考了其他开源框架如fasthttp、gin、echo,并结合字节跳动内部需求进行设计。目前,在字节跳动内部已被广泛采用。如今,越来越多的微服务采用Golang。
Http框架设计与实现
Netpoll
Netpoll是由字节跳动开发的高性能非阻塞I/O网络框架,专注于RPC场景。
RPC通常在处理逻辑上较为繁重,因此不能串行处理I/O。但Go标准库的net设计为阻塞I/O API,因此RPC框架只能遵循“一连接一协程”的设计。在高并发下,由于大量协程存在,将会浪费大量的上下文切换成本。此外,net.Conn没有检查连接活跃性的API,难以为RPC框架创建高效的连接池,因为连接池中可能存在大量失败的连接。
另一方面,当前的开源社区缺乏专注于RPC场景的Go网络库。类似的仓库如evio、gnet等都专注于类似Redis、HAProxy的场景。
但是现在,Netpoll诞生了并解决了上述问题。它从evio和netty的设计中汲取灵感,具有出色的性能,并更适用于微服务架构。此外,Netpoll提供了许多功能,建议在一些RPC场景中取代net。
基于Netpoll,字节开发了RPC框架Kitex和HTTP框架Hertz,两者在行业内具有领先的性能。