分享一个玩具,把 PHP 的 http 请求变为长连接,能有效降低请求的延迟

查看 13|回复 0
作者:pretty66   
Fastcar - PHP HTTP 长连接代理
背景
公司的一个 php 项目经常调用众多的三方平台的 api ,有 http 协议和 https 协议;由于 php-fpm 模式无法复用链接,所以每次进行 api 调用时需要经过:tcp 握手、( tls 握手)、http 报文交互、连接关闭几个阶段;比较明显的就是接口延迟高,业务量大时出现大量的 TIME_WAIT 。
解决
使用 go 语言开发了一个网络请求代理中间件,接管 php 的网络请求,在代理程序中保持连接的复用;经测试能极大的降低网络延迟,目前已在生产环境使用。
测试百度翻译 api 的 http 和 https 请求延迟
  • http 模式下平均请求延迟降低了约 34.8%
  • https 模式平均请求延迟降低了约 48.4%

    Fastcar 原理简介
  • HTTPS 伪装握手:针对 https 服务的访问 Fastcar 会伪装服务端进行 TLS 握手,代替 php 程序同目标服务建立 tls 连接,并保持连接复用,能显著降低 php 短连接频繁握手导致的请求延迟。
  • 长连接支持:通过维护连接池,Fastcar 提供长连接支持,可以接管节点上所有的 php 程序网络请求,达到多服务连接共用;例如 k8s 形式单台节点上部署多个 pod 形式的业务能实现连接的共用,大大降低连接建立的开销。
  • 资源优化:Fastcar 本身非常轻量,只占用很少的系统资源;代码量极少,只依赖 go 官方库

    开源地址
  • Fastcar github(你可以当做这是一个玩具~~)
  • Fastcar github(但是他确实极大的优化了我们的业务)
  • Fastcar github(开源出来希望能帮到有相同业务困扰的朋友)

    最后
    如果项目采用微服务架构,且包括由 PHP 开发的微服务,而这些微服务之间通过 HTTP 进行调用,那么可以使用 Fastcar 作为 PHP 的网络请求中间件。能有效地维持长连接,降低资源开销,以及减少网络延迟。
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部