Captain Codeman Captain Codeman

AppEngine, PaaS, Still Ahead of it's Time

Don't ignore it because it's old

Contents

Introduction

I’m an avid user of AppEngine and just discovered that it turns 9 years old this week.

9 years! That’s almost as close to infinity in Internet Time as you can get without tearing a hole in the fabric of the universe.

The amazing thing is that despite its age it’s still way ahead of it’s time in many ways and I think that is why it doesn’t get as much attention and fanfare as it really deserves. I remember the first time I came across it I didn’t really “get” what it would do for me so it was a couple of more years before I switched to it.

So in case you don’t know, here are some reminders of why it’s so brilliant …

It’s the ultimate Platform as a Service (PaaS) offering. You really don’t need to worry or even think of “servers” or know about Linux or Windows anything else. Sure, there are instances, but they are tiny and granular and mostly you just push your code to the service and it runs it for you. The scaling is near instant and it scales all the way down to zero, so if you have an app that is busy during the day, you’re not paying for a machine sitting idle all night.

It comes with a whole set of useful fully-managed services bundled with the price: logging, monitoring, memcache, a NoSQL datastore, file/blob storage, search, email, task queues, CDN-like edge-caching, static file serving and more.

There are also some incredibly useful little things such as each request being geo-tagged with latitude, longitude, city, region and country of where it originated from (not impossible to build yourself, but nice that it’s just there with zero effort and maintenance).

When it comes to deployment, you can deploy a new app version and then turn a dial to decide how much traffic goes to it. Seriously, how many people can currently deploy a new version of their app, check it’s running, then set 5% of users to hit it … then 20% and so on, with the old version ready to switch back to in an instant if there are any problems? It’s genius but for some reason doesn’t get much fanfare.

You can also create multiple services within the same project, possibly using different language runtimes and route parts of your app between them. So your /product listing page could be powered by Python, your /checkout powered by Go and your /support site with PHP, all transparent to your users.

I first started using it when I switched to Python after many years running on .NET (which wasn’t an option on the platform). A Python app could run on the small instances but sometimes it was a squeeze and Python isn’t the fastest runtime so getting great performance without eating up resources could be a challenge. There is a daily free-quota and if you can keep within that your app runs for free.

A few years ago I switched to using Go and since then have seen AppEngine in a whole new light. Go is designed for running in the cloud and AppEngine is designed for running cloud apps so it’s a perfect union. With Go, the 128Mb / 600Mhz micro instances positively purr, often only needing 10Mb or so of memory to run and leaving space for some in-memory local caching but they will still deliver often single or low double-digit millisecond response times. Phenomenal.

As an example, I switched a fairly busy site that originally ran on Windows, IIS / .NET and SQL Server which was costing around $3-400 per month for hosting to AppEngine and it now runs comfortably for less than $50 (I could lower it further but you reach the point of diminishing returns).

So why aren’t more people using it? I think many people weren’t ready for it and, like myself, didn’t fully appreciate what it did and how to use it. Lots of people were looking for “how do I host a WordPress site?” which wasn’t it’s sweet-spot and when people thought “cloud” they usually thought of AWS EC2 instances that they had full remote access to, not a PaaS which ironically, is now the new hotness (cloud functions and “serverless”).

Unfortunately, I think it also went through a period of not getting much love and seemed to stagnate for a while. The versions of libraries and runtimes available for it fell behind and weren’t updated and Google were building out and focusing on the rest of their cloud platform instead.

Thankfully though, it does seems to be being show some love, brought back into the fold and updated. Some of the services such as the NoSQL cloud datastore are being exposed for use outside of AppEngine itself (it has it’s quirks but is fantastic for “fat” data - such as blog pages on this very site). They have also made a version of AppEngine called “Flex” that runs on GCE instances. I was a bit disappointed with this - it was originally going to allow the same AppEngine code to escape the sandbox and run on more powerful machines but it’s now more of a wrapped up hybrid of GCE (so your client libraries and code might need to change anyway) but fitting in to the AppEngine networking system.

I can see it might have it’s uses but for me it just adds another, possibly confusing, option with too much overlap to the spectrum of choices: AppEngine Standard, AppEngine Flex (that can no longer run AppEngine Standard code), GCE + Auto Scaling, Docker Optimized GCE instances, Docker on Kubernetes etc…

Hopefully though things will evolve and AppEngine will keep what makes it great and unique. Check it out - it’s fast and if you code with care can run even a busy site for free or at very little cost and never have to worry about server updates or capacity.