笔记篇:HTTP框架---Hertz 设计与实现|青训营

103 阅读2分钟

知识点

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

image.png

具体实现

应用层

  • 应用层是和用户直接交互的一层,提供丰富易用的 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 设计实践