HTTP框架
HTTP 简介
request内容:
- 请求行 -- 方法名 URL 协议版本
- 请求头 -- 协议约定内容
- 请求体 -- 具体的内容
response内容:
- 协议行 -- 协议版本 状态码 状态码描述
- 响应头 -- 同请求头
- 响应体 -- 同请求体
HTTP各版本特性:
- HTTP1:
- 队头阻塞
- 传输效率低
- 明文传输
- HTTP2:
- 多路复用
- 头部压缩
- 二进制协议
- QUIC
- 基于UDP实现
- 解决队头阻塞
- 减少加密握手次数
- 支持快速启动
HTTP框架设计与实现
分层设计,分成application、middleware、route、codec、transport五层。
Application
- Context
- Request
- Response
- Handler
Middleware
洋葱模型,支持预处理和后处理。
- Recovery
- Circuitbreak
- Timeout
- Access log
Route
路由查找,路由前缀树 --> a/:b/c
- Add
- Find
- Route Tree
- Route Group
codec
协议层抽象出合适的接口?
- Websocket
- HTTP1
- QUIC
- HTTP2
Transport
网络层设计:BIO和NIO
- Netpoll
- go net
优化
- 基于网络库优化 -- Netpoll
- 基于协议的优化 -- SIMD、key规范化、热点资源池化
有时间能看hertz。
RPC框架
RPC简介
RPC即remote procedure calls,为了使远程过程调用表现出像本地过程调用,需要解决的问题有:
- 函数映射
- 数据 -> 字节流
- 网络传输
在1984年Nelson发表了论文《Implementing Remote Procedure Calls》,其中提出了RPC的过程由5个模块组成:User、User-Stub、RPC-Runtime、Server-Stub、Server。
一次RPC的完整过程:
- IDL通过中立的方式描述接口,使得RPC双方可以在不同平台以不同语言相互通信
- 生成对应的静态接口
- 序列化与反序列化
- 定义RPC协议的数据规范
- 网络传输,通常基于成熟网络库的TCP或UDP
RPC分层设计
- 编解码层: 语言特定、json、二进制编码
- 协议层:协议头构造
- 网络通信层
关键指标
- 稳定性
- 请求成功率
- 长尾请求
- 中间件注册
- 易用性
- 扩展性
- 观测性: Metrics、 Log 、Tracing
- 高性能