Facebook 开源 Proxygen——一款支持 SPDY 3.1 的 HTTP 框架

阅读数:4089 2014 年 11 月 7 日

近日,Facebook 开源了其Proxygen。这是一款开源的 HTTP 框架。其目的不是替换 Apache,而是有能力创建一个专用的高性能 Web 服务器,使其可以嵌入到 Facebook 提供 Web 服务的现有应用中。Facebook 从 2011 年开始构建一款代理服务器(Proxygen 这个名字也是由此而来),在该项目演进并在生产环境中测试了数年之后,Facebook 将其代码开源了。 

为什么没有从 Apache、nginx 或者其他的服务器入手呢?Facebook 列出了很多原因

    •    能够与他们现有的基础设施和工具集成(ThriftODS

    •    创建一个可以供不同的内部项目(HaystackHHVM和负载均衡器等)使用的事件驱动库

    •    据 Facebook 介绍,他们之前的 HTTP 基础设施在伸缩性方面遇到了一些限制,需要大量的变通方案,所以希望根据需要内部自行开发

    •    那时,既有的 HTTP 服务器还缺少很多特性,如:SPDY、WebSockets、HTTP/1.1 (keep-alive)、TLS false start 和特定的负载调度算法

Proxygen 用到了下列概念:transaction(事务)、session(会话)、codec(编解码器)和 handler(处理器)。事务表示的是在客户端和服务器之间交换的请求 - 响应对。这类相关的事务所组成的序列就是一个会话。编解码器负责将来自线路上的字节解析为对象,并将其与事务关联起来。消息最终传递给处理器进行真正地处理。尽管通过底层的编解码器和事务来与该框架交互也是可能的,但还是建议开发者借助API使用更高层次的抽象。 

Proxygen 依赖的框架有: 

    •    Folly——Facebook 内部使用的一个开源的 C++11 组件库,其中包括代码基准测试框架、大小端转换原语、优化的字符串和 vector、JSON 序列化器等组件。

    •    FBThrift——Apache Trift 的一个分支。

Proxygen 支持 SPDY 3.1,目前正在添加对 HTTP/2 的支持。 Facebook 内部做的基准测试表明,在一个 Proxygen echo 服务器(搭载了一个包含 32 个逻辑核的 Xeon CPU E5-2670 @ 2.60GHz 和 16 GB 主存)上,每秒可以支撑多达 304 197 次基于 SPDY 3.1 的内存 GET 请求。

在 GitHub 上发布的源代码已经在 Ubuntu 14.04 上测试过,尽管没有特别指出,但是 Facebook 认为该框架在其他系统上运行也是安全的。

查看英文原文:Facebook Open Sources Proxygen, an HTTP Framework Supporting SPDY 3.1