In fact, looking through the site, the changes that make up Phusion 3 are incredible. If it works as advertised, there should be no advantages to running Unicorn or a pack of Mongrels anymore. I can hardly wait to try it out!
If passenger performs at the same level as or better than unicorn then its probably going to be the best implementation out there for ruby apps, especially with the choice between modules and standalone.
Some of us dont actually require the "ease of deployment" as performance is the priority, phusion passenger was never about performance as they've previously stated. While the new release is faster than their previous stable, it is still yet to be seen whether it out performs unicorn.
I'll reserve judgement until its been benchmarked against the other available deployment servers.
I really don't like making statements relative to other app servers. Each app server has its own merits and we believe people should decide things for themselves by running their own benchmarks and tests. However this question has been asked so many times that I'm inclined to answer in order to avoid confusion and in order to encourage people to test things independently.
There exists a belief among some people that Unicorn is faster than Phusion Passenger 2. We've tested this a while ago and it turned out that they're evenly matched. Unicorn's speed is on par with Mongrel's. Unicorn's shared socket helps with fairly load balancing requests between processes but its positive effect on performance is not always significant. We've actually experimented with shared sockets and found that, when done improperly, it can actually hurt performance thanks to the thundering herd problem and the fact that catching EINTR in Ruby is expensive. All of Unicorn's I/O is handled in Ruby. A lot of Phusion Passenger's I/O is handled in C++. Instead we've opted to optimize our global queuing implementation to reach the same load balancing effect while speeding things up.
Phusion Passenger 3's speed surpasses Phusion Passenger 2 by far. You draw your own conclusions.
Of course you can take my answer with a grain of salt. I encourage you to verify these findings yourself.
If you too had no idea what this is and why people are upvoting like crazy in celebration, Wikipedia (or rather DuckDuckGo's info box!) says:
Phusion Passenger is a module for the Apache HTTP Server and nginx for deployment of Ruby applications, including those built using the Ruby on Rails framework.
Ease of use, dynamic spawning of new processes and spinning them down according to the traffic you receive as opposed to a static pool of processes, fault tolerant to crashes through watchdog process which will automatically restart as much for you as it can in such an event, concurrently handling of multiple requests as opposed to a single request (thin has a multithread option but this is experimental iirc, so I'm not sure how this works yet in production). Basically less moving parts.
Thin uses mongrel / eventmachine / rack, all non-blocking concurrent libraries. Backed up by a good ORM (I use DataMapper, but AR may have got its concurrency patches), you may roll out quite a fast application with quite a low-end server machine.
So it all basically comes down to ease of deploy against more controlled environment.
I think every new rails application should use 1.9.2 and rails 3 by now. Concurrency should not be an issue.
Thin doesn't use Mongrel and Mongrel isn't non-blocking and isn't a library. Rack is not a non-blocking concurrent library.
You can use non-blocking concurrent libraries and use Thin in async mode yes. However the quality of support for it varies. Not everything supports Fiber-yielding-to-EventMachine at this time and for applications without long-running I/O blocking operations there's little difference in throughput between async-Thin and multiprocessing servers like Phusion Passenger. If you have long-running I/O blocking operations, like Twitter API calls that can last several seconds, then yes Thin is better.
On the ease of use and stability department, we believe Phusion Passenger is easier to set up than Thin. We also monitor and restart our stuff automatically so that if anything crashes you don't have to manually restart things like is the case with Thin.
As for resource consumption: Phusion Passenger can start and stop processes dynamically. On a low-end server you can configure it to not start your application process (or only start very few of them) until it's needed. We also have plans to implement multithreading support in future versions, with the eventual goal of being hybrid multiprocessed/multithreaded/evented so that the user can choose the best of all worlds.
> Thin doesn't use Mongrel [...] Rack is not a non-blocking concurrent library.
Well, Thin uses mongrel's parser. Which makes it a sort of a library. And by concurrent I actually meant thread-safe. But forget it.
The main point is: I cannot get any more better / optimal cpu usage with passenger (although I'm certainly getting some cpu / memory overhead). My single thin instance loads every single cpu core to 100% when attacked by httperf. And I was never able to crash it, although I probably didn't do my best.
Monitoring and managing tools are okay, though monit and munin have been here for ages and I sort of like what they're capable of.
But I still agree that ease of use is important for making ruby/rails even simpler and funnier to do. Whatever, no offense intended.
The first one that comes to mind is that you don't have to keep the thin instance alive (eg: /etc/init.d or god scripts or SMF manifests if you're on Solaris).
what excites me is the standalone version (or perhaps "standalone mode" if that's right). It comes with an nginx core, so those who just want to launch quickly without any extra work can just do with that and then worry about scalability after gaining traction :)
In fact, looking through the site, the changes that make up Phusion 3 are incredible. If it works as advertised, there should be no advantages to running Unicorn or a pack of Mongrels anymore. I can hardly wait to try it out!