Software
that helps Facebook scale
In some
ways Facebook is still a LAMP site (kind of), but it has had to change and
extend its operation to incorporate a lot of other elements and services, and
modify the approach to existing ones.
For
example:
- Facebook still uses PHP, but it
has built a compiler for it so it can be turned into native code on its
web servers, thus boosting performance.
- Facebook uses Linux, but has
optimized it for its own purposes (especially in terms of network
throughput).
- Facebook uses MySQL, but
primarily as a key-value persistent storage, moving joins and logic onto
the web servers since optimizations are easier to perform there (on the
“other side” of the Memcached layer).
Then there
are the custom-written systems, like Haystack, a highly scalable object store
used to serve Facebook’s immense amount of photos, or Scribe, a logging system
that can operate at the scale of Facebook (which is far from trivial).
But enough
of that. Let’s present (some of) the software that Facebook uses to provide us
all with the world’s largest social network site.
MEMCACHE
Memcached is by now one of the most
famous pieces of software on the internet. It’s a distributed memory caching
system which Facebook (and a ton of other sites) use as a caching layer between
the web servers and MySQL servers (since database access is relatively slow).
Through the years, Facebook has made a ton of optimizations to Memcached and
the surrounding software (like optimizing the network stack).
Facebook
runs thousands of Memcached servers with tens of terabytes of cached data at
any one point in time. It is likely the world’s largest Memcached installation.
HIPHOP
FOR PHP
HP, being a
scripting language, is relatively slow when compared to code that runs natively
on a server. HipHop converts
PHP into C++ code which can then be compiled for better performance. This has
allowed Facebook to get much more out of its web servers since Facebook relies
heavily on PHP to serve content.
A small
team of engineers (initially just three of them) at Facebook spent 18 months
developing HipHop, and it is now live in production.
HAYSTACK
Haystack is
Facebook’s high-performance photo storage/retrieval system (strictly speaking,
Haystack is an object store, so it doesn’t necessarily have to store photos).
It has a ton of work to do; there are more than 20 billion uploaded photos on
Facebook, and each one is saved in four different resolutions, resulting in
more than 80 billion photos.
And it’s
not just about being able to handle billions of photos, performance is
critical. As we mentioned previously, Facebook serves around 1.2 million
photos per second, a number which doesn’t include images served by
Facebook’s CDN. That’s a staggering number.
BIGPIPE
BigPipe is
a dynamic web page serving system that Facebook has developed. Facebook uses it
to serve each web page in sections (called “pagelets”) for optimal performance.
For
example, the chat window is retrieved separately, the news feed is retrieved
separately, and so on. These pagelets can be retrieved in parallel, which is
where the performance gain comes in, and it also gives users a site that works
even if some part of it would be deactivated or broken.
CASSANDRA
Cassandra is a distributed storage
system with no single point of failure. It’s one of the poster children for the
NoSQL movement and has been made open source (it’s even become an Apache
project). Facebook uses it for its Inbox search.
Other than
Facebook, a number of other services use it, for example Digg. We’re even
considering some uses for it here at Pingdom.
SCRIBE
Scribe is a flexible logging
system that Facebook uses for a multitude of purposes internally. It’s been
built to be able to handle logging at the scale of Facebook, and automatically
handles new logging categories as they show up (Facebook has hundreds).
HADOOP
AND HIVE
Hadoop is an open source map-reduce
implementation that makes it possible to perform calculations on massive
amounts of data. Facebook uses this for data analysis (and as we all know,
Facebook has massive amounts of data). Hive originated from within
Facebook, and makes it possible to use SQL queries against Hadoop, making it
easier for non-programmers to use.
Both Hadoop
and Hive are open source (Apache projects) and are used by a number of big
services, for example Yahoo and Twitter.
THRIFT
Facebook
uses several different languages for its different services. PHP is used for
the front-end, Erlang is used for Chat, Java and C++ are also used in several
places (and perhaps other languages as well). Thrift is an internally
developed cross-language framework that ties all of these different languages
together, making it possible for them to talk to each other. This has made it
much easier for Facebook to keep up its cross-language development.
Facebook
has made Thrift open source and support for even more languages has been added.
VARNISH
Varnish is an HTTP accelerator which
can act as a load balancer and also cache content which can then be served
lightning-fast.
Facebook
uses Varnish to serve photos and profile pictures, handling billions of
requests every day. Like almost everything Facebook uses, Varnish is open
source.
Other
things that help Facebook run smoothly
We have
mentioned some of the software that makes up Facebook’s system(s) and helps the
service scale properly. But handling such a large system is a complex task, so
we thought we would list a few more things that Facebook does to keep its
service running smoothly.
GRADUAL
RELEASES AND DARK LAUNCHES
Facebook
has a system they called Gatekeeper that lets them run different code for
different sets of users (it basically introduces different conditions in the
code base). This lets Facebook do gradual releases of new features, A/B
testing, activate certain features only for Facebook employees, etc.
Gatekeeper
also lets Facebook do something called “dark launches”, which is to activate
elements of a certain feature behind the scenes before it goes live (without
users noticing since there will be no corresponding UI elements). This acts as
a real-world stress test and helps expose bottlenecks and other problem areas
before a feature is officially launched. Dark launches are usually done two
weeks before the actual launch.
PROFILING
OF THE LIVE SYSTEM
Facebook
carefully monitors its systems (something we here at Pingdom of course approve
of), and interestingly enough it also monitors the performance of every single
PHP function in the live production environment. This profiling of the live PHP
environment is done using an open source tool called XHProf.
GRADUAL
FEATURE DISABLING FOR ADDED PERFORMANCE
If Facebook
runs into performance issues, there are a large number of levers that let them
gradually disable less important features to boost performance of Facebook’s
core features.
Software
that helps Facebook scale
In some
ways Facebook is still a LAMP site (kind of), but it has had to change and
extend its operation to incorporate a lot of other elements and services, and
modify the approach to existing ones.
For
example:
- Facebook still uses PHP, but it
has built a compiler for it so it can be turned into native code on its
web servers, thus boosting performance.
- Facebook uses Linux, but has
optimized it for its own purposes (especially in terms of network
throughput).
- Facebook uses MySQL, but
primarily as a key-value persistent storage, moving joins and logic onto
the web servers since optimizations are easier to perform there (on the
“other side” of the Memcached layer).
Then there
are the custom-written systems, like Haystack, a highly scalable object store
used to serve Facebook’s immense amount of photos, or Scribe, a logging system
that can operate at the scale of Facebook (which is far from trivial).
But enough
of that. Let’s present (some of) the software that Facebook uses to provide us
all with the world’s largest social network site.
MEMCACHE
Memcached is by now one of the most
famous pieces of software on the internet. It’s a distributed memory caching
system which Facebook (and a ton of other sites) use as a caching layer between
the web servers and MySQL servers (since database access is relatively slow).
Through the years, Facebook has made a ton of optimizations to Memcached and
the surrounding software (like optimizing the network stack).
Facebook
runs thousands of Memcached servers with tens of terabytes of cached data at
any one point in time. It is likely the world’s largest Memcached installation.
HIPHOP
FOR PHP
HP, being a
scripting language, is relatively slow when compared to code that runs natively
on a server. HipHop converts
PHP into C++ code which can then be compiled for better performance. This has
allowed Facebook to get much more out of its web servers since Facebook relies
heavily on PHP to serve content.
A small
team of engineers (initially just three of them) at Facebook spent 18 months
developing HipHop, and it is now live in production.
HAYSTACK
Haystack is
Facebook’s high-performance photo storage/retrieval system (strictly speaking,
Haystack is an object store, so it doesn’t necessarily have to store photos).
It has a ton of work to do; there are more than 20 billion uploaded photos on
Facebook, and each one is saved in four different resolutions, resulting in
more than 80 billion photos.
And it’s
not just about being able to handle billions of photos, performance is
critical. As we mentioned previously, Facebook serves around 1.2 million
photos per second, a number which doesn’t include images served by
Facebook’s CDN. That’s a staggering number.
BIGPIPE
BigPipe is
a dynamic web page serving system that Facebook has developed. Facebook uses it
to serve each web page in sections (called “pagelets”) for optimal performance.
For
example, the chat window is retrieved separately, the news feed is retrieved
separately, and so on. These pagelets can be retrieved in parallel, which is
where the performance gain comes in, and it also gives users a site that works
even if some part of it would be deactivated or broken.
CASSANDRA
Cassandra is a distributed storage
system with no single point of failure. It’s one of the poster children for the
NoSQL movement and has been made open source (it’s even become an Apache
project). Facebook uses it for its Inbox search.
Other than
Facebook, a number of other services use it, for example Digg. We’re even
considering some uses for it here at Pingdom.
SCRIBE
Scribe is a flexible logging
system that Facebook uses for a multitude of purposes internally. It’s been
built to be able to handle logging at the scale of Facebook, and automatically
handles new logging categories as they show up (Facebook has hundreds).
HADOOP
AND HIVE
Hadoop is an open source map-reduce
implementation that makes it possible to perform calculations on massive
amounts of data. Facebook uses this for data analysis (and as we all know,
Facebook has massive amounts of data). Hive originated from within
Facebook, and makes it possible to use SQL queries against Hadoop, making it
easier for non-programmers to use.
Both Hadoop
and Hive are open source (Apache projects) and are used by a number of big
services, for example Yahoo and Twitter.
THRIFT
Facebook
uses several different languages for its different services. PHP is used for
the front-end, Erlang is used for Chat, Java and C++ are also used in several
places (and perhaps other languages as well). Thrift is an internally
developed cross-language framework that ties all of these different languages
together, making it possible for them to talk to each other. This has made it
much easier for Facebook to keep up its cross-language development.
Facebook
has made Thrift open source and support for even more languages has been added.
VARNISH
Varnish is an HTTP accelerator which
can act as a load balancer and also cache content which can then be served
lightning-fast.
Facebook
uses Varnish to serve photos and profile pictures, handling billions of
requests every day. Like almost everything Facebook uses, Varnish is open
source.
Other
things that help Facebook run smoothly
We have
mentioned some of the software that makes up Facebook’s system(s) and helps the
service scale properly. But handling such a large system is a complex task, so
we thought we would list a few more things that Facebook does to keep its
service running smoothly.
GRADUAL
RELEASES AND DARK LAUNCHES
Facebook
has a system they called Gatekeeper that lets them run different code for
different sets of users (it basically introduces different conditions in the
code base). This lets Facebook do gradual releases of new features, A/B
testing, activate certain features only for Facebook employees, etc.
Gatekeeper
also lets Facebook do something called “dark launches”, which is to activate
elements of a certain feature behind the scenes before it goes live (without
users noticing since there will be no corresponding UI elements). This acts as
a real-world stress test and helps expose bottlenecks and other problem areas
before a feature is officially launched. Dark launches are usually done two
weeks before the actual launch.
PROFILING
OF THE LIVE SYSTEM
Facebook
carefully monitors its systems (something we here at Pingdom of course approve
of), and interestingly enough it also monitors the performance of every single
PHP function in the live production environment. This profiling of the live PHP
environment is done using an open source tool called XHProf.
GRADUAL
FEATURE DISABLING FOR ADDED PERFORMANCE
If Facebook
runs into performance issues, there are a large number of levers that let them
gradually disable less important features to boost performance of Facebook’s
core features.
No comments:
Post a Comment