views:

215

answers:

2

I have an application running on AppEngine that uses about 50 CPU hours a day. Most of it is spent waiting for the datastore.

I am contemplating moving it off of AppEngine to something like Rackspace Cloud Servers because I think that my application can be more efficient if I can offload some of the work to the database (plus I can add more features that would be difficult to implement on AppEngine).

So, how would I go about moving an AppEngine app? It is developed with the webapp framework and does not use many Google APIs other than the datastore. Ideally I would be able to keep the webapp code and swap out the db classes for something that would talk to another database (MySQL or PostgreSQL is probably preferable to something like CouchDB or MongoDB, but those could work too).

UPDATE: In response to the comments below... I have run plenty of web applications before. I have not run production python apps before. I assume setting up the python / webserver aspect is fairly simple. My hope for going with something like Rackspace Cloud servers is that it will be 1 "server" that I can just add resources too as we grow. We are currently doing about 200k hits a day.

As for AppEngine optimizations, we are using memcache where we can (not many places). We are also using Tasks, and while that helps get around request timeouts, it adds to the resources used.

My primary question is a good python alternative for the data layer that might require the fewest code changes. Though I also know there are probably some relevant questions that I am not thinking to ask.

+5  A: 

If you can redeploy to appscale, you won't have to rewrite any of your App Engine code.

Alex Martelli
I guess this is the way to go. I was under the impression the webapp framework existed outside of AppEngine, but it looks like it was just loosely based on web.py.While appscale seems a little like a hack to me, it does provide a migration path that would allow rewriting slowly or as-needed.Thanks.
Jackson Miller
@Jackson, you could reuse the code in the SDK to start (that's what the appscale folks have done, I believe), given that code's open-source license and flexible "stubs and hooks" architecture -- but why not take advantage of the work they've already done? Especially at the data layer, where they have several adapters for various storage systems. Not sure what it is that you find hacky about that (though I guess SO comments aren't the best forum to discuss this;-). ((Disclaimer: I have nothing to do with appscale, but I do work at Google and have many friends in the appengine team;-)).
Alex Martelli
A: 

You can use TyphoonAE, which is based on the SDK, and designed for small to medium scale deployments - eg, individual servers to small clusters - and should be fairly easy to set up.

Sorry to see you go.

Nick Johnson
Well, now I have to at least see how the new 1.3.1 release changes things :)
Jackson Miller