知识点
- 现在外部主流开源 HTTP 框架 Fasthttp、Gin、Echo。
- Hertz 是字节跳动服务框架团队研发的超大规模的企业级微服务 HTTP 框架,具有高易用性、易扩展、低时延等特点,如今已在 CloudWeGo 正式开源并且Hertz 已经成为了字节跳动内部最大的 HTTP 框架。
- Hertz 采用了 4 层分层设计。

具体实现
应用层
- 应用层是和用户直接交互的一层,提供丰富易用的 API
- 设计API的原则:
- 简洁性 不冗余 复用率比较高的要多设计一个函数
- 可理解性 意思是可以通过函数名字得知其具体功能
- 可测性
- 可见性
中间件层
- 实现预处理和后处理,用户可以使用中间件能力将通用逻辑(如:日志记录、性能统计、异常处理、鉴权逻辑等等)和业务逻辑区分开,让用户更加专注于业务代码。
func Middleware( some param){
...
nextMiddleware() / bizLogic( )
...
}
func (ctx *RequestContext) Abort( ) {
ctx. index = IndexMax
}
路由层
- 路由层负责根据 URI 匹配对应的处理函数。
- 类型:
- 静态路由: /a/b/c、 /a/b/d
- 参数路由: /a/:id/c (/a/b/c, /a/d/c)、 /*alI
- 路由修复: /a/b <-> /a/b/
- 冲突路由以及优先级: /a/b、 /:id/c
- 实现方法:前缀匹配树,Hertz 为满足这些需求重新构造了路由树,用户在注册路由时拥有很高的自由度。
协议层
- 协议层负责不同协议的实现和扩展。Hertz 支持协议的扩展,同时也支持通过 ALPN 协议协商的方式注册。
- 实现:
type Server interface {
Serve(c context. Context,conn network.Conn) error
网络层
- 实现:构造网络模型
- BIO 和 NIO
- BIO代表阻塞I/O(Blocking I/O),而NIO代表非阻塞I/O(Non-blocking I/O)。它们是两种不同的I/O模型。
- 在BIO中,当应用程序发起一个I/O操作后,该操作将阻塞并等待数据准备好。在此期间,应用程序无法执行其他任务。
- NIO是通过先设置一个监控器来监测,当有足够的数据才进行准备,在等待期间可以进行其他操作。
参考资料
参考----字节跳动开源 Go HTTP 框架 Hertz 设计实践