Rackbal is a Perlbel written in Ruby using Rack. Written mostly to learn Racks interface. Accordning to http://danga.com/perlbal [A ]Reverse Proxy['s role is] * 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 file, which Perlbal will serve non-blocking. See webserver mode above. * Persistent client connections (configurable) * Persistent backend connections (shared by multiple clients; no "backend waste")