Why Google App Engine Rocks: A Google Engineer’s Take
cloudplatform.googleblog.com
cloudplatform.googleblog.com
Last summer I switched jobs from a company where we developed loads of cloud thingies ourselves, because there really weren't any good options around ten years ago when we started a product line that needed a high quality global service (involving processing, networking and storage). We had a lot of fun basically building our own little (if 5000+ machines qualifies as little) AWS/Google-style Cloud. I heard about Amazon Dynamo in 2007 and then we basically re-implemented it ourselves. We added lots of neat features like datacenter-aware global replication, etc.
When I joined the new company last June, it was basically just me. A few months later we hired a great python dev. I'm so happy to find that the level of the openly available products/services had caught up quite a bit by then, enabling us not to spend so much time on just making sure things were available all of the time, and ~infinitely scalable.
I spent a lot of time evaluating AWS vs GC, but my inevitable conclusion was that.. in a small company where you don't want to invest in a 24/7/365 devops team you should go for the Google App Engine.
I would really like it if Google found some pragmatic way to make App Engine work inside China though, at least for companies that have chinese ICP permits.
(Why hasn't AWS launched a PaaS? Lambda is so neutered that it doesn't really count.)
I don't think so. A good while ago GAE was incredibly limiting - it certainly was when I tried it. Python only (maybe also PHP?), forced to use Google Cloud whatever for storage, etc. By comparison, AWS was using MySQL databases and EC2 boxes that let you use whatever language you wanted.
I know things have come a long way since then, but the reputation persists.
But heh! You do you, I'll keep my platform agnostic config management thank you very much. Life's too short to be beholden to any one vendor.
You can downgrade to manally managed servers with the the same codebase.
Or you spend the few extra hours upfront wrapping your app in config management so it can run on any bare VM.
Don't be lazy! Not being able to run anywhere is technical debt. Unless you're running a hobby site that generates no revenue; in that case, do whatever.
After revisiting it the past year.. I don't really understand why the in comparison pathetic AWS Lambda gets so much more attention, for instance.
I think the order in which GAE added languages was Python, Java, Go, PHP.
They now support Python, PHP, Java, Go.
And in beta, "flexible environment", which is like elastic beanstalk but more sensible: Python, Java, Go, Node.js, Ruby, <random docker images>.
Java here is a pure marketing effort to convince a clueless manager saying hey we got java!
What if there exist Java-based system that somehow can be deployed to GAE with minimum changes...? (e.g.: not needing itext)
What if there exist a company that the majority of developers prefer Java?
No, it's the worse PAAS in existence. Horrible proprietary NoSQL DB, filtered headers, must perform http requests with custom SDK (horrible SDK BTW...). It is absolutely not worth it.
The new Google "managed VMs" or whatever are closer to what Appengine should have been all along.
I'm not saying AWS is great, it has a horrible UI, but AWS has none of these silly limitations.
I can't imagine anyone reading HN who'd think this is the right solution in 2016. Even if you want to jump on the Google train (there are valid reasons for this, including free outbound bandwidth to YouTube and Google Drive...), there's no excuse for App Engine. Use the other Google cloud offerings. The container stuff is top notch.
And AppEngine is absolutely the right solution for some users, like people who don't want anything to do with sysadmin work, configuring containers, etc. (Like myself.)
I hear you about the pricing change. We talk a lot about not getting pricing wrong internally (now), as that's exactly what happened. Initial trial pricing is ... dangerous.
Disclosure: I work on Compute Engine.
First, why do you think Google Datastore is any more or less proprietary than AWS Dynamo? (Which has its own eccentricities- like having to forecast and/or overallocate capacity in advance; while with Datastore you only pay for actual usage?)
Oh; and you can also use Cloud SQL or BigTable from within AppEngine.
> must perform http requests with custom SDK
What do you mean?
The filtered headers thing is a common issue in many https load balancers, particularly ones like ours that have global anycast routing.
I've shown a bunch of people that a modern App Engine standard environment app can run stock Django talking to MySQL (which we manage for you with Cloud SQL) just fine. If you need native C-code extensions, sure use our new Flexible Environment (neé Managed VMs) but you don't need to for many simple apps.
Finally, as others have pointed out, App Engine is just one piece of our overall platform (though it was first, so it's common to have this misperception).
Disclosure: I work at Google on Compute Engine (so of course I want you to use our products).
There is this: https://www.appscale.com/
It's an open source implementation of the App Engine APIs. The website doesn't make it very clear but the source is on Github: https://github.com/AppScale/appscale
I hope they're not in trouble or anything, I have been moving my project from VPS over to GCM for the past year now. I love it.
In that sense I think it's a failure; it simply hasn't been widely adopted.
At my last job I pushed for using it, and the suggestion was shot down, on the basis that "If I left they'd never find another person who knows GAE."
Because, there is a huge gap between market perception and their product offering.
Now that things have changed (re-org Alphabet, new Cloud leadership), they seem to take marketing/sales (and hopefully support) more seriously (and with more traditional approach).
It's a good sign; they're maturing.
AWS and AppEngine aren't even the same kind of thing. AWS is a high-level collection of services (Google's equivalent is Google Cloud Platform.)
AppEngine is a PaaS offering within Google Cloud Platform. And, AFAIK, its one piece of GCP that AWS doesn't have a direct competitor to. (Lambda is, I think, the closest thing.)
EDIT: Also the Datastore is replicated in multi data centers and again, you don't have to think about backups either.
GAE on the other hand is "we can solve your scalability problems" that many simply don't have and "you should write/re-write your apps to use our framework" which is a red flag to many as well.
That's specifically EC2. To which Google's direct competitor is GCE, not GAE.
AWS's component most directly competing with GAE is Lambda.
https://console.cloud.google.com/
It has all of the cloud stuff in one place. Should be a lot nicer to use too :)
Since the old appengine console was deprecated, it is difficult to remember the urls for the different services. One has to try and remember multiple urls. It is quite confusing and frustrating.
https://annotate.driftt.com/view?i=7zvk40ibtjaaxhs%2F2016-05...
-----
If you get that error, somewhere you need to agree to new T's and C's. The site doesn't redirect your properly, so you need to click around until you are prompted to agree.
Pretty cool to see my simple little GAE Emailing app I wrote for my startup back in 2012 was cranking away 3 years later.
Many things are nice with App Engine, outlined in the post. But so many things are not nice:
- For us the performance characteristics for some queries in the NDB (NoSQL datastore) have really left much to be wanted.
- The inability of calling C-libraries from Python code (except those provided by Google, they provide standard stuff like cPickle etc)
- The UI for logs / querying the database / admin is quite bad and buggy. Can't really use it in Safari at all (might very well be the wrong doing of Safari, but still)
- Limitations in how long functions / tasks can run. I've spent all of my Friday night tonight (I'm in CET) re-writing code for a batch-processing task that took just above the hard imposed limit of 10 minutes to run. According to the docs an exception is to be thrown when the task is nearing its limit but most of the time (intermittently…) the exception is not thrown and just kills the process…
- Limited community / toolset. Using GAE feels somewhat like using something really old or obscure, quite few SO questions/answers (the upside is that many of them are written by Gudio, which lead the NDB project before quitting from Google), and extremely limited third party tools / plugins for enhancing the developer experience. For example I haven't found any good way, except the GAE provided one, to do performance profiling.
- GAE has somewhat of a bad rep in some parts of the Python community I've found. A couple of Python libraries I've tried to use have not worked and then I've found bug reports where the maintainers have explicitly stated that GAE is not supported because of some limitation they have imposed. The biggest example I can come up with right now is probably Requests
With that said however, I feel like Google has started giving GAE more love recently. The documentation seems to improve, the dashboards/web UI:s have undergone major rework (not all of them improvements per se but still!). I actually said to my management a while ago that we need to move away from GAE in the medium term (1-2 years) because I feared that Google would start to "sunset" GAE. I wouldn't say that is the case today, but I could not go so far as to say that I would recommend GAE.
GAE is a very nice platform in many ways, but very limited. The tradeoffs for all the ease is quite high and should probably be considered very carefully before picked.
Disclosure: I work at Google on Cloud.
Agree about slow web console, especially for logs. Datastore viewer got better, though.
I don't know about Python ecosystem, but I think that if you need C-libraries, then you shouldn't be running it in GAE. Low-level stuff sounds better fit for GCE, or AWS. Our team lives in Java world, and pretty much everything there plays fine with GAE. There are some low-level areas (like Unsafe memory management) where it doesn't -- but it's not web-serving part anyway, so it doesn't fit in GAE, IMHO. For example, we offload our recommendation regressions to Docker container engine.
Recently they released so-called Flex environment which is basically container engine (Kubernetes) for any Docker container that listens on port 80. And they have several pre-build containers for different languages and with stubs for Standard environment, so you can throw-in your existing GAE app there. I didn't like Flex environment for my web serving part, though, for two reasons:
1. Too slow to deploy a new version, like 10 minutes. Really? It seems to upload all the files (Standard uploads only what's changed), and after that they spin up a GCE instance to build a Docker container from the files. And that takes time.
2. I now must care about serving static files myself. In current Standard environment, statics are automatically served by Google's servers, even if my app has no instances running. For Flex env they suggest to upload statics to GCS, but it's additional ops work.
All that whiteboard interview pedantry doesn't seem to shield them devs who don't know how to deploy a basic production grade app. But hey they were able to memorize tree inversions before interviews so thats good.