Google App Engine14 June 2008 10:58
A while back I wrote that I thought AppJet were a long way off the mark when it comes to providing a useable hosted web application service. Now Google have stepped into the marketplace, and it seems that they have addressed most of the points I was concerned about. There are still a few pretty major blockers, with the lack of any image processing library being a killer for quite a few projects. But Google also bring scalability and reliability to the table. However big my budget, I wouldn't expect to me able make a system with the scalability and reliability that I would expect from Google. They pretty much immediately got 10000 developers subscribed, and so far I haven't come across any complaints of problems. That doesn't surprise me, but it probably would from any other company.
Whilst I can't imagine Google wanting to get involved in installing a lot of C extensions, I guess there's a chance that they will decide the need to make an exception for PIL. A lot of web applications need to be able to process images in some way, even if it is just scaling them. Alternatively they might choose to add their own image processing API which can be used from other languages when they become supported. An alternative for developer is that a third party makes a web service for such functionality, but that could result in a lot of images being transferred round the world.
Google are providing an SDK which enables you to run the same platform on your desktop in order to develop your app. I haven't looked into this is detail yet. Can you download you DB to test new changes? How do you set up a staging environment? What about running tests?
I'm glad to see Google using something which is basically an Object database with simple queries on object types and back-references. Hopefully this will start to spread the concept of object databases into the mainstream, though I suspect that a lot of people are going to complain about the lack of an RDB. In fact, quite a few already are doing.
Google's stated reason for not using an RDB (my feeling is that 'this is better' would be good enough) is that relational databases can't be made to scale in the same way as the datastore. I can't find any reference to how the datastore deals with conflicts, so this doesn't really make any sense. If a user in Australia and a user in the UK make changes to the data, something still needs to check that those changes are not in conflict before both parties can see the results of the changes they made. Maybe instead of a having a single master server App Engine allows for multiple master servers each responsible for part of the database. For a discussion of the issues of distributed RDBs, I highly recommend Scalable Internet Architectures (and the chapter on databases is available for preview), which does what it says on the tin, though it also covers reliability and redundancy, whilst wisely giving optimisation a wide berth.
Effect on the industry
There's an interesting question as to how big an effect App Engine will have on the industry. I can imagine that this changes the landscape significantly for Paul Graham-style web start-ups (without even considering AppJet, who I think it leaves in a significantly worse situation than they were already in). App Engine significantly reduces the complexity of launching a web start-up, and possibly removes the need for investment from the business model completely.
A few commentators are suggesting that this is going to be the start of the PaaS (Platform as a Service) wars. Having control of someone's database is a really good way to tie people to service.
I see that within a few hours of the launch, someone had already produced an OpenID provider application, using the authentication against Google accounts to produce an OpenID provider based on Google logins. Very neat.
Interestingly (to me), Google have included an yaml parser and use yml as the configuration language for applications. When I encountered yaml in my brief visit to the world of Ruby I quite liked it and thought it was quite Pythonic, and I continue to be surprised that it isn't supported by the standard library. Okay, I just looked the the yaml specs. Now I understand.
In summary, I think Google did everything right; including PIL in App Engine would make it really attractive, and overall I'm quite happy. As ever, though, I can't immediately think of any uses for it!
Leave a comment