Facebook has long been a poster child for building your own infrastructure, creating from scratch everything from its own PHP virtual machine and PHP language implementation to devising new standards for data center hardware. But rather than keep its work close to the vest, the company has chosen to share it as open source projects.
Newest on that list is Proxygen, a C++ HTTP framework for creating Web stacks from scratch. "We want to help more people build and deploy high-performance C++ HTTP services," Facebook says in its introductory blog post to the project, "and we believe that Proxygen is a great framework to do so."
Facebook found that creating a low-level HTTP server that integrates directly into applications would be a better fit for its needs than repurposing an existing Web server like Nginx or Apache HTTPD. It would allow better reuse of existing code; more thorough integration with Facebook's existing infrastructure and tooling; the ability to quickly implement cutting-edge HTTP protocol features like HPACK, SPDY, and WebSockets; and to be able to freely build at scale.
Creating a low-level project such as Proxygen may seem like a step back from building architectures composed of loosely coupled microservices, as is the trend today. But Facebook clearly isn't recommending using Proxygen as a universal replacement for the above-mentioned stacks. Rather, it's an ingredient for use in a custom stack designed to solve problems that only emerge in exceptional circumstances.
Another reason for Proxygen's potentially narrow appeal: It was built to complement and leverage Facebook's existing toolset. Many of the dependencies, which include late-breaking features in C++, might make the project less useful to those who aren't already invested.
Proxygen's appeal may reside in the use of its various design paradigm to inspire other HTTP-related projects to implement the same ideas. Proxygen's stack, for instance, breaks handling of the HTTP layer across several abstractions. This, Facebook claims, "has allowed us to support new multiplexing protocols like SPDY and HTTP/2 without having to duplicate code."