全景
这一部分先回答「pingora 是什么」,再把请求主线和服务主线从头到尾走一遍,每一步只讲到能看清全貌的深度,细节链到 02 到 05 的页面。三页的实验都在 M2 Max、macOS 27、rustc 1.99.0 上跑,pingora 0.9.0、tokio 1.53.2。
- pingora 解决什么问题:写一个代理要定下哪些事;README 的七条特性逐条落到代码上,
40 million这类规模数字离线核实不了,不讲;和 hyper 搭的代理比,四处能核实的差别:自己的 HTTP/1(请求头原样保留大小写,实测)、固定阶段的钩子、服务级共享的上游连接池、自带进程管理与平滑升级。 - 一次请求:给
ProxyHttp的每个钩子打日志,一个普通 GET 依次调到 18 个方法;同一个下游连接上的第二个请求先调on_connection_reuse;上游打印对端端口,证明第二、第三个请求复用同一条上游连接,换了下游连接也一样;两个并发请求开两条上游连接,之后按先进先出轮流取用。 - 一个 Server 的一生:
ServerConf的默认值;每个服务一个以服务名命名的运行时,sample列出线程名;SIGTERM后同一毫秒内停 accept、关空闲 keep-alive 连接、后台服务退出,在途请求在宽限期内完成,新连接被拒绝;默认宽限期是 300 秒;超过宽限期的请求被直接切断,连logging都不调;SIGINT不通知服务。
flowchart TB why[解决什么问题] --> req[一次请求] why --> srv["一个 Server 的一生"] req --> proto[03 协议] req --> conn[04 连接上游] req --> proxy[05 代理] srv --> server[02 服务器]
💬 关联讨论
发起讨论加载中...