写点什么

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

  • 2014-11-07
  • 本文字数:914 字

    阅读完需:约 3 分钟

近日,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

2014-11-07 00:545429
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 125.6 次阅读, 收获喜欢 32 次。

关注

评论

发布
暂无评论
发现更多内容

高效IO之零拷贝技术

乌龟哥哥

10月月更

从零到一搭建一个属于自己的博客系统(弎)

木偶

MySQL django 前端 10月月更

用户故事地图——让迭代计划灵动起来

Bruce Talk

Scrum User Story Product Owner User Story Mapping

CLIP-as-service 0.8.0 版本发布:新增支持大型 ONNX 模型文件

Jina AI

开源 工程师 开发工具

【web 开发基础】PHP 快速入门(9)-PHP 运算符之位运算符详解

迷彩

位运算 10月月更 PHP基础 PHP位运算

应用数据库常见的数据切分方式

乌龟哥哥

数据库 10月月更

探索证券行业智能化升级核心引擎:成就客户价值

易观分析

证券

JNI中实现类似C++回调方法-结构体操作

中国好公民st

c++ jni 10月月更

1024 分享|如何打造围绕开源理念的团队工程师文化

Jina AI

人工智能 开源 1024 1024我在现场

[极客大挑战 2019]Http 题解

w010w

Web HTTP CTF 10月月更

DDD领域驱动设计的概念解析

乌龟哥哥

微服务 10月月更

“程”风破浪的开发者|那些优化奇葩代码的方法

慕枫技术笔记

学习方法 代码 “程”风破浪的开发者

“程”风破浪的开发者|python GUI开发记录

衝鋒壹号

学习方法 个人成长 “程”风破浪的开发者

迷宫最短路径问题

lovevivi

数据结构 C语言 10月月更

力扣刷题训练(二)

lovevivi

数据结构 C语言 10月月更

leetcode 191. Number of 1 Bits 位1的个数(简单)

okokabcd

LeetCode 数据结构与算法

【一Go到底】第二十五天---内置函数和Go错误机制

指剑

Go golang 10月月更

fastposter v2.9.3 简单易用的海报生成器

物有本末

海报生成器 海报编辑器 海报生成

Jenkins pipeline Git 检出的 Step

HoneyMoose

Jenkins pipeline 如何到子文件中去执行命令

HoneyMoose

一行命令安装docker和docker-compose(CentOS7)

程序员欣宸

Docker Docker-compose 10月月更

JDK中自带的JVM分析工具

知了一笑

Java 架构

HashMap源码分析(七)

知识浅谈

hashmap 10月月更

OpenCloudOS社区发起的程序员节专属系列活动

B Impact

【web 开发基础】PHP 快速入门(10)-PHP 其他运算符详解

迷彩

web开发 10月月更 PHP基础 三元运算符

鸿蒙开发工具 DevEco Studio 3.0 体验与项目介绍

宇宙之一粟

HarmonyOS 鸿蒙应用开发 10月月更

【移动应用安全】移动应用安全概述及超级用户权限获取

w010w

android 移动应用安全 root 10月月更

数据湖(十):Hive与Iceberg整合

Lansonli

数据湖 10月月更

【译】深究 Go CPU profiler

非晓为骁

Go 翻译 pprof

一个“简单”的面试题:什么是环回地址127.0.0.1?

wljslmz

10月月更 127.0.0.1 环回地址

【资损】分布式环境中的幂等性控制设计

小明Java问道之路

架构 微服务 安全 10月月更 资损

Facebook开源Proxygen——一款支持SPDY 3.1的HTTP框架_开源_Abel Avram_InfoQ精选文章