Facebook today announced that it is open sourcing Proxygen, the C++ HTTP libraries — including an HTTP server — that it uses internally. The company has open-sourced quite a bit of its code in recent months, much of it focused on mobile developers. In many ways, today’s launch is more interesting, though, as it’s likely to reach a far wider number of developers.
From the get-go, Facebook notes that it isn’t trying to replace popular HTTP and proxy servers like Apache or nginx with Proxygen. “Those projects focus on building extremely flexible HTTP servers written in C that offer good performance but almost overwhelming amounts of configurability,” Facebook engineers Daniel Sommermann and Alan Frindell write in today’s announcement. “Instead, we focused on building a high performance C++ HTTP framework with sensible defaults that includes both server and client code and that’s easy to integrate into existing applications.”
Still, the framework allows you to quickly set up an event-driven server that can handle HTTP and SPDY requests. Chances are that other projects will look at this and use it as the basis to build their own web servers on top of this codebase.
Proxygen evolved from an earlier project in 2011 that aimed to write a customizable reverse-proxy load balancer, Sommermann and Frindell say.
While Facebook could have gone with Apache, nginx or Varnish as its HTTP stack, the engineers argue that building their own framework allowed the company to integrate more deeply with Facebook’s existing infrastructure and tools like the company’s version of Apache Thrift (which is also now available on GitHub).
Given Facebook’s size, the team was also looking for a solution that could scale beyond existing solutions, and the company wanted to be able to reuse the framework in other tools. Haystack, HHVM and Facebook’s load balancers also use Proxygen in some form or another, for example, as does the company’s mobile infrastructure.
By now Proxygen has handled “many trillions of HTTP(S) and SPDY requests,” so this is definitely some pretty battle-hardened code by now. You can find the source code here and a more in-depth description of how Proxygen works here.