Perlbal
view release on metacpan or search on metacpan
recommended that you read it using perldoc).
DESCRIPTION
-----------
Perlbal is a Perl-based reverse proxy load balancer and web server.
It processes hundreds of millions of requests a day just for LiveJournal,
TypePad and dozens of other high-traffic websites.
Perlbal is a single-threaded event-based server supporting HTTP load
balancing, web serving, and a mix of the two (see below).
Almost everything in Perlbal can be configured or reconfigured on the fly
without needing to restart the software (see Perlbal::Manual::Management).
In this file you'll find:
* GENERAL FEATURES
* PERFORMANCE
* STATISTICS AND MONITORING
* PLUGINS (EXTENSIBILITY)
* FURTHER DOCUMENTATION
* SUPPORT
* CONTRIBUTING
GENERAL FEATURES
----------------
Perlbal has many features; this is just a short list of some of them:
Role: Reverse Proxy
* Maintains pool of connected backend connections to reduce turnover
* Gets list of nodes either from asynchronously monitored node file, or
from in-server pool objects which you can add/remove nodes from
using the management interface
* Intelligent load balancing based on what backend connections are free
for a new request. No unreliable "weighting" numbers required
* Can verify (using a quick OPTIONS request) that a backend connection is
talking to a webserver and not just the kernel's listen queue before
sending client requests at it. Lower latency for the client
* Has a high priority queue for sending requests through to backends quickly
o Uses cookies to determine if a request should go to fast queue
(configurable)
o Highpri (high priority) plugin supports making requests high
priority by URI or Host
o Can specify a relief level to let low priority requests through to
prevent starvation
* Can allow X-Forwarded-For (and similar) headers from client based on
client IP
* Configurable header management before sending request to backend
* Internal redirection to file or URL(s)
o Big one for us; a backend can instruct Perlbal to fetch the user's
data from a completely separate server and port and URL, 100%
transparent to the user
o Can actually give Perlbal a list of URLs to try. Perlbal will find
one that's alive. Again, the end user sees no redirects happening
o Can also redirect to a local file, which Perlbal will serve
non-blocking. See webserver mode below
* Persistent client connections (configurable)
* Persistent backend connections (shared by multiple clients;
no "backend waste")
Role: Web Server
* Listen on a port, share from a directory
* Directory indexing
* Byte range support (clients can resume downloads)
* Can have directory index requests fall back to index file list
o I.e., requests for /foo/ go to /foo/index.html instead
o Multiple index files supported, tries one at a time until it finds
one
* Persistent client connections (configurable)
* Almost all disk operations are done asynchronously as to not stall the
event loop
* Configurable support for storing files (PUT, DELETE support)
PERFORMANCE
-------------
* Great performance "out-of-the-box" (for both small and large sites)
* 100% asynchronous in all the recommended use cases
* Lightweight
* HTTP Header processing (optionally) done in C with
Perlbal::XS::HTTPHeaders for maximum performance
* Event-based using epoll or kqueue to avoid the scalability problems of
not-so-modern systems
( run in 2.388 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )