HTTP框架设计 | 青训营笔记

62 阅读2分钟

“这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记

HTTP协议是当今使用最为广泛的协议之一,HTTP是客户端与服务端通信的基础协议。

HTTP0.9

第一个HTTP协议版本。是从1991年开始大规模使用,到现在的话已经有30多年了。

协议内容

主要分为请求和响应。有请求行(方法名、URL、协议、版本)和响应行(协议版本、状态码、状态码描述),有请求头和响应头,有请求体和响应体。

image.png

HTTP的不足与展望

HTTP1

不足:

1.队头阻塞。

基于TCP,后续的分片必须要等待前面的分片的到来才能继续发送,否则的话会一直等待。

2.传输效率低。

协议里面无用的信息可以说是非常的多,存在很多重复的头部等。而且不支持多路复用,请求没结束之前是不能再发送其他请求的。

3.明文传输不安全。

HTTP2

优点:

1.多路复用。

2.头部压缩。

3.二进制协议。

HTTP2解决了一部分问题,但还是基于TCP,并没有解决队头阻塞问题。

QUIC

优点:

1.基于UDP实现。

2.解决队头阻塞。

3.加密减少握手次数。

4.支持快速启动。

分层设计

image.png

应用层

1.提供合理的api。

中间件

1.洋葱模型。

路由设计

1.静态路由,如/a/b。

协议层

1.抽象出合适的接口。

网路层

1.bio阻塞等待、nio监听定时、aio通知。

性能优化

针对网络库的优化

1.net

优势:流式友好、小包性能高。

2.netpoll

优势:中大包性能高、时延低。

针对协议的优化

1.Headers解析

快速解析如通过 Header key 首字母快速筛除掉完全不可能的 key ;解析对应 value 到独立字段;使用 byte slice 管理对应 header 管理,方便复用。

2.热点资源池化

image.png

对于这种场景,我们把request放入池子里。当请求来的时候,我们做一些初始化,把它进行一个response的一个返回,之后我们处理完又把它返回去。