rynop All American 829 Posts user info edit post |
I own a startup with a handful of customers, and I'm at the point where I really want to scale it (nationwide hopefully). I'm familiar with the traditional ways of scaling a web app so I'm debating on taking the jump to google app engine to keep my operating costs and employee count down (only me and another guy currently).
My app is CakePHP based currently, so I'd be migrating it to Django. Not too worried about this as I've made Django apps in the past. What I am worried about is things that I can not gather by reading the app engine docs.
If you have used Google app engine to develop an app - do you have any advice for me? what don't you like about it?
I also have some specific questions: -Django 1.0.2 with app engine - run into any issues using it?
-Backing up datastore - I see they have a download tool - has anyone ever run into limitations with it? I want to make sure I can easily backup and restore my datastore
-View/edit the datastore: I'm used to MySQL where I can easily view/edit DB information outside of my webapp. I see app engine has a data viewer - does there exist a way to edit the data?
-Authentication. I like the fact you can easily integrate with google accounts, but I don't want to force my users to have a goog acct. Do google accounts integrate easily with Django's user authentication? Just wondering if I can leverage existing Django authorization (groups, permissions etc) with google.appengine.api users.
-I will have lots of domain names pointing to my 1 google app engine app (each customer has different look/feel, uses same app codebase). Was going to use Django's "sites" framework to help with this. Anyone use this function in google app engine? any thing I should be careful of?
thx in advance. 5/16/2009 12:20:24 PM |
rynop All American 829 Posts user info edit post |
Ok here is a brief writeup of my experience. The following is part of an email I sent to my business partner, so if some parts don't make total sense that is why. Please excuse the terrible spelling and vagueness in parts. If you have specific questions don't hesitate to ask as I'm happy to answer them. I learned quite a bit and am willing to pass it on.
Django does not natively support Google App engine's datastore. There are 2 projects (http://code.google.com/appengine/docs/python/tools/libraries.html) that aim to provide the means to work with the datastore directly. I chose app engine patch over the helper as it implements more of the features I wanted (django admin, no different implementation of the goog datastore).
In short, I dont think its ready for a production level medium to large django app.
Ok so here is my note: ---------------
I took an existing django app I have (nfl pickem league) and ported it to app engine. I did this to get an initial opinion on app engine.
App engine is 1 server (instance), it handles all the scaling for you. You do not have to manage load balancer, web server, database scaling, memcached scaling, disk scaling, cpu size, email server ... you get the picture.... All you have to worry about is your application. They dont have a relational database, but its actually a better implementation and really easy to code to. All of this is run on the same hardware/software google runs search engine and on - so you are not going to get better then this. Amazon EC2 is just like linode - you have to install the os and all the services and manage everything. This gets expensive and time consuming.
So if we do end up getting big and go with EC2 (or stick w/ linode), we will either 1) spend a lot of time/money to architect things correctly -or- 2) hire someone that knows their shit and has expericne so we do it right. Either of these solutions raises our costs, and cuts our bottom line.
I want to keep employee count down and obviously expenses down + not spend time doing infrastructure things.
So of course there is a downside (sort of). App engine currently supports only python and java. So we'd have to port the app If we ever do get to a pont where we are serious about scaling, I think python (and django) are ultimately better for a few reasons:
1) easier to maintain. Python is powerful, so you can do same stuff w/ less lines of code. As codebase grows, less chance for bugs, less shit to maintain
2) all object oriented (so like in cake you select something, it goes into an array, and you just have to know the model names/indexes and type them in as strings). python and django do every thing OO. so like you want ot access User model first name? you find your data:
User = Users.filter('last_name =', 'Foo').order('-last_name')
and then you have your User obeject which you can just access all the member vars directly - User.first_name.
So you could look at this as a downside, but really if we see this actually starting to take off, hopefully at that time we'd have motivation and hopefully money to do this port.
OTHER DOWNSIDE is app engine does not officially support django 1.X+. So to get django to work with app engine there are a few projects that are out there that "patch" django to work with app engine. I dont trust moving everthing there yet - I dont want to be the beta tester for the shit
Another downside is the backup/restore of the google datastore sucks. It even sucks to bring down production data to development env to test out problems. 5/23/2009 8:41:27 PM |
rynop All American 829 Posts user info edit post |
got excited and posted a little pre-mature.
Other limitations I forgot to mention: - app engine only allows for 10 apps per account - no wildcard subdomains - no interface to delete/modify data in the datastore. There is one to view/add entries though.
So in summary if you have an app that is not very complex (twitter comes to mind), and you think it could grow quite quickly - app engine is for you. The entry level account is free so you have 0 barrier for entry. You do not have to be a DBA, know anything about webservers or scaling. And if you do know how to do these things, you no longer need to spend your time on them.
Django is easy to use, so you can bang out a new app or port an existing one with minimal effort. Just be ready to work through a few bugs/limitations that exist with the django helper or app engine patch (both have limitations and are not mature IMO). 5/23/2009 8:57:39 PM |