HTTP与RPC框架 | 青训营笔记

53 阅读2分钟

HTTP框架

HTTP 简介

request内容:

  • 请求行 -- 方法名 URL 协议版本
  • 请求头 -- 协议约定内容
  • 请求体 -- 具体的内容

response内容:

  • 协议行 -- 协议版本 状态码 状态码描述
  • 响应头 -- 同请求头
  • 响应体 -- 同请求体

HTTP各版本特性:

  • HTTP1:
    • 队头阻塞
    • 传输效率低
    • 明文传输
  • HTTP2:
    • 多路复用
    • 头部压缩
    • 二进制协议
  • QUIC
    • 基于UDP实现
    • 解决队头阻塞
    • 减少加密握手次数
    • 支持快速启动

HTTP框架设计与实现

分层设计,分成applicationmiddlewareroutecodectransport五层。

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
  • 高性能

企业实践

KitexNetPoll