There are a bunch of tools or hosted applications for managing cloud applications. As I come upon these, I’m trying to add at least a casual comparison...
Contents
App Engine is in many ways the basis for Silver Lining; at least, all the choices I made when starting Silver Lining were in reaction to App Engine: either deliberately copying App Engine, or deliberately not copying it.
So, some specific differences:
Heroku is an App Engine-like service for Ruby applications. But it works differently from App Engine, and has some novel ideas:
Generally Heroku seems like a faster-moving target than App Engine, with lots of interesting ideas; I hope to get more ideas from it going forward.
Of course, the primary difference of Silver Lining is: it’s open source, you can adapt the system as you find necessary, and it’s a lot cheaper (since you are paying only for the actual cloud service, which is reasonably priced).
This looks similar, but I haven’t looked at it yet.
AppScale is an open source implementation of the Google App Engine API. It features a bunch of database backends, and can do a lot of the management of scaling nodes.
While Silver Lining takes ideas from App Engine, the priorities are really quite different. Silver Lining is focused on simple, reliable, repeatable deployment of applications. The deployments really aren’t that different from how software might traditionally be deployed, it just formalizes those pieces and factors the problem in a way that makes the actual deployment as simple and reliable as possible.
AppScale (at least from what I can tell) is more focused on scaling, and App Engine-like infrastructure. It provides the App Engine API; Silver Lining was written because I liked parts of the App Engine toolset, but I couldn’t embrace the constraints of the platform.
Silver Lining also I believe scales down further than AppScale. You can run as many sites on one server/node as you care to. So it is quite suitable for deploying several small applications cheaply. I believe Silver Lining will make the life of the average web developer easier and simpler very quickly.
Silver Lining is meant to be usable with existing applications. You can use pretty much any database (some support code needs to be written to manage each kind of database, but it’s quite simple). You can write files. Traditional “configuration” is actually kind of pushed into the application, but it just means you should do things like (in Django):
DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_NAME = os.environ['CONFIG_PG_DBNAME']
DATABASE_USER = os.environ['CONFIG_PG_DBUSER']
DATABASE_PASSWORD = os.environ['CONFIG_PG_DBPASSWORD']
DATABASE_HOST = os.environ['CONFIG_PG_DBHOST']
DATABASE_PORT = os.environ['CONFIG_PG_DBPORT']
Everything you can do in a traditional deployment system, you can do with Silver Lining (at least, potentially; extra support code may be necessary). I don’t think AppScale provides this nor do I think this is a goal of AppScale.
Typhoonae, like AppScale, is an open source adaptation of the App Engine API.
Typhoonae uses supervisord for monitoring the processes, while Silver Lining uses mod_wsgi. They both have a similar function, but because mod_wsgi is integrated with the web server it is not just aware of the process dying, but also of the process becoming unresponsive. Supervisor, because it is a general-purpose process monitor, cannot determine when a process is serving its function.
People have asked about how Silver Lining can be used with something more closely related to App Engine. I’m not that optimistic about AppScale, because I think it overlaps in the wrong ways with Silver Lining – they are more like direct competitors than complementary tools. Typhoonae on the other hand might work better.
The pieces of Typhoonae that would be useful would be its implementations of the App Engine APIs, backed with MongoDB (data store), RabbitMQ (well... not quite sure what this is for), and ejabberd (for chat integration), and possibly other APIs that they’ve implemented with a better backend than what the App Engine SDK itself contains. These would each be services. Possibly something like the Data Store API would just be a library you install, plus service.mongodb, but they could be presented as first-class services (e.g. service.typhoonae_datastore). I’d probably prefer they not be first-class services, because that means Typhoonae releases would have to be tied one-to-one to Silver Lining releases. I’d rather see something like a silverlining_typhoonae distribution that you could install into your app.
So far, Moonshine sounds like the closest thing to Silver Lining in functionality, with even many of the same choices, except Ruby instead of Python. It uses Ubuntu, Apache, and Passenger (where Passenger is the closest thing to a Ruby equivalent of mod_wsgi). It also uses Ruby Enterprise Edition (?) and MySQL, where Silver Lining does not have a single persistence backend.
config/moonshine.yml is a lot like app.ini, cap deploy:setup is like silver setup-node and cap deploy is like silver update.
It’s built on Capistrano, not using its own native constructs. In this sense it is glue, but it’s kind of a matter of perspective. If Capistrano worked a little differently then it might look like Moonshine was the application and Capistrano the library.
It has a notion of “shared config”, which is configuration not in your source tree, but which is needed for deployment. Silver Lining needs something like this.
Rubber is a tool based on Ruby/Rails and Capistrano.
I’ll have to look into it some. It, like Moonshine, is based on Capistrano. It is a more general configuration management tool. It also has more features for scaling.
Bitnamo is kind of a package for pre-built open source applications. For instance, you grab a Joomla image and you get Joomla. From what I can tell, Bitnami itself is actually proprietary. The supported applications seem to be PHP.
Bitnami also creates virtual images you can use to develop. It has inspired me to at least add a todo item.