来自:infoq
近日,Facebook开源了其Proxygen。这是一款开源的HTTP框架。其目的不是替换Apache,而是有能力创建一个专用的高性能Web服务器,使其可以嵌入到Facebook提供Web服务的现有应用中。Facebook从2011年开始构建一款代理服务器(Proxygen这个名字也是由此而来),在该项目演进并在生产环境中测试了数年之后,Facebook将其代码开源了。
为什么没有从Apache、nginx或者其他的服务器入手呢?Facebook列出了很多原因:
• 能够与他们现有的基础设施和工具集成(Thrift、ODS)
• 创建一个可以供不同的内部项目(Haystack、HHVM和负载均衡器等)使用的事件驱动库
• 据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