EASY AND ROBUST DEPLOYMENTS FOR RUBY, PYTHON, NODE.JS AND METEORDOWNLOAD
Phusion Passenger is a web server and application server for Ruby, Python, Node.js and Meteor web apps. It makes web app deployments a lot simpler and less complex, by managing your apps' processes and resources for you.
What makes it so fast and reliable is its C++ core, its zero-copy architecture, its watchdog system and its hybrid evented, multi-threaded and multi-process design.
Phusion Passenger aims to become the ultimate polyglot app server. This means that it will eventually be able to deploy any arbitrary language you can throw at it, while providing the same resource management services you've come to learn and love.
The groundwork is already there: Ruby, Python, Node.js and Meteor are fully supported.
YOUR WEB APP
There's no need to run external application processes that you have to monitor separately, greatly reducing the amount of moving parts. Instead of reinventing the wheel, we use the world class HTTP connection management features of Apache and NGINX.
We adjust the number of application processes dynamically based on traffic, and restart any crashed processes. This way we ensure that resource usage stays within defined limits.
We provide commercial support through our tiered SLA offerings, allowing you to obtain expert advice whenever you need it. We've worked with many high profile clients in keeping their sites online since 2008.
Phusion Passenger is written in optimized C++, is horizontally scalable and is architected with zero-copy properties in mind. We operate on buffers directly when possible and extensively use scatter/gather I/O APIs.
We run applications and most support code outside the web server's address space. If any component fails, we automatically restart it with our watchdog.
Security does not have to be inconvenient. We never run application processes as root. Instead, we run them as the user that owns the application. This requires no additional configuration and works automatically.
Phusion Passenger never lets your application process block on request and response I/O. Requests and responses are fully buffered. It is immune to slow client attacks like Slowloris.
Phusion Passenger buffers application responses on the filesystem, but it also writes the response data to the client immediately without first waiting for the full response to finish. This allows you to run streaming output applications on Phusion Passenger, like Rails 3.2 streaming.
Phusion Passenger uses an evented, asynchronous I/O model so that it can support a virtually unlimited number of concurrent I/O operations. The hybrid multi-threaded/multi-process application model allows applications to automatically leverage all CPU cores and to support I/O concurrency easily, in addition to providing crash protection.
Phusion Passenger can load your app's code into a preloader process, then fork off worker processes from that, making spawning many processes much faster. It also potentially saves memory by leveraging the OS's Copy-On-Write (CoW) capabilities.
We believe software should be simple and easy-to-use. Software should be there to serve people, not vice versa. And we believe software should need as little maintenance as possible. If something can be done automatically, we go through the hassle of writing the code to do it instead of bothering the user.
Unix is wonderful rock-solid proven technology. We leverage as many Unix features as possible in order to make Phusion Passenger stable, efficient and well-integrated. But like any other technology, Unix is not perfect. We are not afraid to deviate from "the Unix way" if we believe it's wrong or if we can do better.
Imagine a supermarket with a number of cashiers and a queue behind each of them. You pick a queue, and as it turns out the person in front of you has a lot of items in his basket, slowing down the checkout process for everyone else behind him. The queue next to you is empty but you cannot move to another queue once you've picked one. This is exactly what happens with many web servers and load balancers, e.g. Apache's mod_proxy_balancer: HTTP requests are queued behind another long-running request.
Phusion Passenger avoids this problem by putting everything in a single queue called the global queue. A request is assigned to the first available application process. This all happens in userspace, making it possible to easily and cheaply manipulate the queue (e.g. inspection, removal of queued requests) compared to when queuing happens in kernel space.
Nedap is a publicly traded tech company with reported annual revenues of over $100MM. With activities branching into healthcare, it is important for their systems to be available at all times. In this case study, we visit Nedap Healthcare and learn how Phusion Passenger has contributed to their way of doing business care-free for the past 4 years.
Phusion Passenger works right out of the box with Union Station, our analytics and metrics platform for Ruby apps. They were designed and built in tandem to offer a seamless experience that is able to tap into every feature. This allows for unprecedented depth and insights into not only your apps' code, but also the infrastructure it is running on.