Bindings, Platforms, and Innovation
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
Tracking change and innovation in the enterprise software development community
Posted by Werner Schuster on Apr 16, 2008 10:10 AM
A new project aims to make deployment of Ruby on Rails application with an Apache web server much easier. Already recommended by the creator of Rails and others, Phusion Passenger/mod_rails seems to achieve this goal. We talked to one of the creators of Phusion Passenger, Ninh Bui, to see what's behind the project and what's still to come.Phusion is the name of our company whereas Phusion Passenger is the official name for mod_rails. Most people from the community probably have a good notion of what a mod_rails should be from the mod_* naming convention, so we've kept this alias for this purpose.
Even though we initially planned on going for mod_rails alone, the Ruby on Rails core team and we thought that 'Passenger' fitted better within the Rails paradigm. In particular, the experience that Phusion Passenger (aka mod_rails) strives to deliver is pretty much the same as that of a (train) passenger: just sit down and enjoy the ride ;-) .
As for the license, we've indeed made it GPLv2 with an additional clause that people often tend to misinterpret and we'd like to take this opportunity to address this 'issue' en masse: instead of limiting the license, we've actually allowed for the community to do more with the source!We were also interested to see how Phusion Passenger stacks up against similar solutions for Rails deployment:
Also, we have had a lot of experience working in the open source community, and we have grown very attached to it. We believe that the open source development model, in conjunction with the driving force of a commercial company, allows us to deliver higher quality products. In other words, we believe that this is the best way for a commercial institution to give back to the community.
As an example of this, Phusion Passenger has been designed and written to be reliable and robust in production environments. Nevertheless, some may still experience deployment problems, or need a custom feature. We are providing paid commercial support for those who need it. Our team of experts are experienced in a wide variety of environments — Linux-based environments in particular — and have deep knowledge of the Ruby internals, Ruby on Rails and Passenger.
Unlike Swiftiply, Mongrel Cluster, etc. Phusion Passenger's application pool is managed automatically based on the current traffic. Also, crashed Rails applications are restarted automatically. This means that no configuration or process monitoring is required, and this should result in lower system administration overhead. There's a variety of configuration options available, and they are documented in the users guide.
Two minutes of your time depending on your internet connection ;-) . All kidding aside though, updating and redeploying your Rails application using Phusion Passenger, would only require you to re-upload your application and touch the restart.txt file. And that's pretty much it. The latter step is required if you don't want to restart Apache (and we think most of you want this ;-)).
On a technical note, the latter step updates the timestamp of the restart.txt file, on which Phusion Passenger will determine whether or not to restart the Rails application.
fork() to allow sharing of data among Ruby processes. The idea is to get a Ruby process with the libraries set up - and then fork() the process to get another one. Calling fork() in a process, basically duplicates this process in an efficient way. The two processes basically look the same, including the same data in their address spaces. However - this is not Shared Memory - instead the Virtual Memory systems of OSes use a method called Copy On Write (COW) to allow the processes to see the same data but also modify their own private copy. As long as the data is only read, only one copy of the data needs to be around - however, once one process starts to modify the data, the data's copied over to this process. Obviously - sharing read only data, such as library code or similar, is possible with this. fork()), COW kicks in and copies the data over - which means the data isn't shared anymore, and every process has it's own copy. The copy-on-write garbage collector is as good as finished. We're currently polishing the release and writing the website. Also, we're working on a scientific paper on this with the help of ir. Hans Scholten of the University of Twente. One can expect a release within the next few weeks. We understand that people may not like the idea of patching Ruby, so we've put extra effort into ensuring that installation is as easy as possible, and that the installation is completely self-contained so that no system files are touched.
We are going to release this work as "Ruby Enterprise Edition" (and yes, we're well aware of its name, but allow us to elaborate on this at Railsconf ;-) ). Please bare with us in the meantime, as we assure you, it's going to be worth it ;-) ). It should also be noted that Ruby Enterprise Edition is fully backwards compatible with standard Ruby (1.8).
If Phusion Passenger is instructed to use Ruby Enterprise Edition, then Passenger will automatically make use of copy-on-write semantics. This results in large memory savings in Rails applications. In fact, early tests have indicated that this is about 33% in an average case.
The critical reader will note that Ruby Enterprise Edition does all this in a transparent manner, but also offers the application programmer to toggle the GC optimization on and off during runtime. It is for this reason that Ruby Enterprise Edition should be considered as a superset of Ruby.
For this, we had to change the way the Ruby heap is implemented. It now uses a set of marking bitfields instead of mark bits inside objects. Performance is variable and depends on the application and the workload. On some Rails apps we've measured a performance hit of 5%. On others, 20%. On yet others, 0%, i.e. no performance hit. We'll elaborate on this at Railsconf for those who want more information on this, or possibly sooner if our schedule would allow for it.
The Role of Open Source in Data Integration
Usage Landscape: Enterprise Open Source Data Integration
Agile Development: A Manager's Roadmap for Success
The Agile Business Analyst: Skills and Techniques needed for Agile
You can also try it out at http://es.cohesiveft.com/site/rails2. We support multiple Rails web containers in addition to Passenger - nginx, lighttpd, mongrel.
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.
This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.
This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.
This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.
After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.
IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.
Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.
1 comment
Watch Thread Reply