Posts tagged 'Amazon EC2'

22

May 2011

Google App Engine Price Increases - Bad for Small Apps, and No More Free Scaling :o(

At Google IO it was announced that this year that Google App Engine will come out of "preview" and add additional features and an SLA. Sounds great, but it also seemed like a lot of this hype was to try and downplay something else that was changing... the prices. As the service comes out of preview, it needs to be able to sustain itself financially. That means, price increases! (full details here)

The most significant change to me is the shift from charging for "CPU hours" being actual hours worth of CPU cycles (for a "standard" CPU), to being "your app being live for an hour, even if it uses 0 CPU". This is how most of App Engine's competitors work, and actually the reason I always thought Google App Engine's prices were so reasonable for small apps.

The problem with this model is that if you have a very low traffic application (which, let's face it, is how most apps will start out), it costs you almost nothing. In fact, for the few years this blog has been running on App Engine, I haven't paid a single penny. Even on a day I received 50,000 visitors, I didn't break the free quota despite my application being scaled across 4-5 instances for most of the day. My CPU use was so low, it was measure in minutes!. This made App Engine an ideal place for trying out ideas, because it was really cheap. And let's face it, if your idea takes off and it's already hosted on App Engine, you're unlikely to move away, so it was Win/Win, both for you, and Google.

The alternative model, which App Engine is soon to adopt, is that your low-traffic app is being charged just for being "live". This is the reason I've never set anything up on Azure or EC2. It costs you the same if you get 0 visitors in a month, as a single-instance application getting moderate traffic.

This change has another implication for small apps. No more free scaling. Previously, your application could scale out to a number of instances for periods of the day and you could stay within the free quota. Now that the free quota will be only 24 CPU hours, it's impossible for your application to burst out of a single instance without incurring a cost.

Note: The new pricing page lists "Dynamic Scaling" under the free version, however unless you're prepared for your application to be available for less than 24 hours in a day, I don't see how this could possibly be achieved. It's possible this refers to it being possible, though extra charges will apply.

This might not sound like a big deal - competing services already charge like this anyway (and some don't even have free quotas), however for me, this is more significant. I'm a .NET developer by trade. I'm not a huge fan of Java or Python, but App Engine's pricing was so good, it went some way to outweighing the use of .NET. Now that the pricing is the same, it doesn't really make sense as a .NET developer to give up all the benefits of the development environment/frameworks I'm used to using (and the productivity boost I get from them).

My current thinking is to move my apps over to AppHarbor, but once they're written in .NET, Azure and EC2 are probably also possibilities if AppHarbor doesn't work out. First project, this blog!

23

October 2010

Amazon AWS adds Free Usage Tier

Carrying on from the cloud comparison posts, I thought it worth mentioning that Amazon has recently announced a free usage tier for their web services:

To help new AWS customers get started in the cloud, AWS is introducing a new free usage tier. Beginning November 1, new AWS customers will be able to run a free Amazon EC2 Micro Instance for a year, while also leveraging 5 GB of Amazon S3 storage, and free tiers of Amazon Elastic Block Store, Amazon Elastic Load Balancer, and AWS data transfer. In addition, customers can benefit from the existing free tiers for Amazon SimpleDB, Amazon Simple Queue Service, and Amazon Simple Notifications Service. To learn more about the new AWS free usage tier, visit aws.amazon.com/free.

Unfortunately the Micro instance is linux-only (presumably for licensing reasons), but it's still a good deal, and there's other stuff included.

I should also point out that some of the free stuff only applies to new customers.

02

October 2010

Google App Engine (GAE) vs Amazon Elastic Computing (EC2) vs Microsoft Azure

Almost a year ago, I compared Google App Engine and Microsoft Windows Azure, trying to decide which platform I should write and host my blog (and some other small projects) on. The comparison was about more than hosting - the languages and frameworks used would be influenced by the platform I was hosting on. There were also APIs available only to one platform, or easier to use on one platform compared to the other (such as the App Engine authentication).

Due to the huge differences, I did a little homework on each platform, and ultimately, it came down to price. The difference in pricing between Google App Engine and Windows Azure was so enormous, that there wasn't really a decision to make. App Engine hosts this blog for free. Windows Azure would've cost around $100/month minimum.

One Year On

Fast forward a year and things have changed a little. App Engine has become more mature, Amazon has introduced Micro instances, and Microsoft has done, well, not a lot. There's been seemingly zero change in the pricing for Windows Azure, meaning there's still a significant minimum cost in using it.

Maybe Windows Azure is aimed at The Big Boys?

I can only assume Microsoft don't care so much about small developers and are aiming Windows Azure at bigger businesses that already have significant applications. Of course, this is their decision. However, I think they are overlooking something significant. All successful websites/applications start small. At the time of launch, it's very difficult to tell whether a website/application will do well. Who wants to fork out for expensive hosting for something that might not take off?

If the price is too high, people will pass on Windows Azure for small start-up websites/applications. They'll look at cheaper alternatives, such as Google App Engine or Amazon EC2. If they explode overnight, they have two options; 1) Stick with App Engine/Amazon EC2; 2) Convert everything to Windows Azure. One of them is zero work, and one of them is significant work. What do you think most business will choose?

Google App Engine Lock-in

Despite currently hosting my log on App Engine, I do agree with the lock-in argument. With Google App Engine, you're very closely tied to Google's way of doing things, and Google's APIs. Although there are initiatives out there trying to make it possible to run App Engine apps on non-Google hardware, they're generally incomplete, lagging behind, and it's unlikely they will ever match the performance and scalability of hosting with Google.

Put bluntly, if you want to move away from App Engine, there will certainly be a lot of pain and re-writing code.

Update: In the comments, Tobias points out that TyphoonAE is pretty much a complete implementation of the API, making this much easier. I'm not sure how the performance or scalability stacks up to App Engine, but you can certainly get the code up and running elsewhere (even EC2!) relatively easily.

Enter, Amazon EC2

Amazon EC2 wasn't mentioned much in my original comparison because it was similarly priced to Windows Azure, but you also have to manage your own servers. It also requires much more work to make your application scale. Things have changed a little at Amazon EC2 over the last year.

Recently, Amazon introduced Micro Instances. These are low power instances and have only 600MB RAM, but they come in at around 3 cents per hour! If you're prepared to pay a little up-front (Reserved Instances), then the price is just 1 cent per hour! Before you run and sign up, be aware that with Micro instances, there is no instance storage - your volumes must all be EBS volumes. This doesn't really change much, but you will incur a charge for all disk access (IOPS), but this should still work out pretty cheap.

In addition, Amazon now has an Autoscaling service, which allows you to automatically start up new instances (or shut them down) based on load. This service is free if you opt for CloudWatch (a resource monitoring service, which costs 1.5 cents per instance per hour).

Going hand in hand with Autoscaling, there is Elastic Load Balancing, which allows an IP address to balance load across multiple instances. This costs 2.5 cents per hour, and 0.8 cents per GB of data handled by the load balancer.

These scaling options aren't cheap (they're not expensive either), but they are options that require little work. You can start off with a Micro instance and scale up fairly easily if things explode overnight. The only real thing you need to handle is scaling your writable data. You can't just run SQL on each instance, because the data would not be replicated. You also have a serious single point of failure running just one instance.

Google App Engine vs Amazon EC2

So, with Windows Azure's cost (and lack of an equivalent to Amazon's Micro Instances), it looks like it's between Google App Engine and Amazon EC2. It's time to make a list of pros and cons for each! This list is based on my opinions, and my requirements, so it might not match your own (eg. you might love Python!).

Amazon EC2 Pros and Cons

  • Pros
    • No lock-in. Relatively easy to move code to another box.
    • Code in C#, .NET, ASP.NET MVC / Visual Studio
    • SQL Server (Express/Compact)
    • Amazon staff very active in the community
  • Cons
    • No free quota - minimum cost per month, even if 0 visitors
    • Scaling harder (if required) - need to handle data spread across n instances
    • Single point of failure with single Micro instance

Google App Engine Pros and Cons

  • Pros
    • Generous free quota
    • Billed for actual CPU usage, not "live" hours
    • Scaling is (relatively) easy
    • "Free" built-in Google authentication
  • Cons
    • (Pretty much) locked in to Google App Engine See comments below
    • No support for C#/.NET
    • Non-relational datastore - more restrictive on how data can be accessed
    • (Relatively) high rate of datastore errors, need to code to handle them
    • Blog is already hosted here - don't need to do any work ;)
    • No local storage, so unable to use libraries that rely on writing to disk

Both platforms have a lot going for them. It's a tough decision, but it doesn't need to be. If Google added support for C#/ASP.NET MVC (unlikely, but technically possible), then there would be no contest for me. Alas, it really comes down to whether to pay the extra cash for EC2, in return for being able to use Visual Studio, C# and ASP.NET MVC!

It's a really tough call, so I'm going to have to think a little more about it, and maybe do a little more research!

27

September 2010

Should I Move My Blog from Google App Engine (Back) to ASP.NET MVC, Hosted on Amazon EC2?

If you follow me on twitter, you'll probably have noticed I've been playing around with Amazon EC2 lately. My blog is currently hosted on Google App Engine for two real reasons. Firstly, cost. Google App Engine works out free for my blog. Secondly, it seemed like something cool to learn and play with. Knowledge is power :-)

I'm a C# coder by trade, so when I came to update my blog a year ago, I naturally looked at Microsoft Azure, but it just worked out way too expensive to consider for something so small. I didn't really look into Amazon EC2 because it also looked too expensive, and I wanted to avoid having to manage the server!

Fast forward a year. I've spent a large part of the last 10 months working on an iPhone application. That means using a Mac, Xcode and Objective-C. These aren't really my tools of choice. I'm so comfortable with C# and Visual Studio that coding on the Mac in Objective-C is frankly, frustrating. The OS is different, the IDE and shortcuts are all different, I have to clean up my variables (WTF?), and I'm generally quite slow at it!

Now, I'm playing around with XNA again. I'm working on a Windows Phone 7 game, Badger Quest. The coding in Objective-C has really made me appreciate what Visual Studio and C# bring. It's good to be back! :-) Amazon have also recently launched "Micro" instances, for only 3 cents/hour, which makes running .NET on a reputable host a reasonable price.

So, I'm hoping to start blogging (about programming-related stuff) a little more. For any WP7 games I create, I'll need to code a reusable high score system, which would make an interesting topic. I was going to put this on Google App Engine, but I hear voices in my head telling me to use C#.

However, the overhead and cost in setting up some .NET hosting is quite high for something so small. I also need to set up a "website" for a family member anyway, so it makes sense to put all this stuff, along with my blog, in one place, on one platform.

So, what do I do? I love that Google App Engine would be free and scalable. However, I don't like the lock-in, or not being able to use .NET. The cost of EC2 is starting to look reasonable, though Azure is still way too expensive (though I hope Microsoft are taking note of Amazon's micro instances!)

Do I migrate to Amazon EC2 and write everything in .NET (which I can deploy anywhere, if circumstances change), or stick with Google, king of free, being tied in, and using a language I'm not a huge fan of to avoid spending a few quid?

Decisions, decisions!

18

December 2009

Microsoft Windows Azure vs Google App Engine: Pricing

As a .NET developer, I was quite excited to hear about Windows Azure. It sounded like a less painful version of Amazon's EC2, supporting .NET (less painful in terms of server management!). When I saw the pricing, it didn't look too bad either. That was, until I realised that their "compute hour" referred to an hour of your app running, not an hour of actual CPU time. Wow. This changes things. To keep a single web role running, you're looking at $0.12/hour = $2.88/day = $20.16/week = $86.40/month.

Anyone that's bought hosting for a small site/app recently will know that this is not particularly cheap!

So, recently I've been playing around with Google App Engine. It has this massive problem called Python (and an even bigger one called Java ;o)), but it's such a nice framework/engine to work with that I've somehow overlooked this and started coding with it. There's so much to like about it. Everything is so simple to deploy, and it scales "out of the box". Want Cron jobs? No worries, specify them in a file in your app, and when you deploy, App Engine will pick them up and schedule them. Want to queue up work to process later so that your pages return faster? Task queues do just that. What's more, you get a ridiculous free quota every day. It may be Python, but this sounds tempting, no?

So, I thought it'd be interesting to compare the costs of App Engine vs Azure. I understand this isn't really a like-for-like comparison, but both can achieve the same sort of things, and while all programmers will have a preferred language/framework (I'm no exception), many can be swayed by a cool framework or hosting.

First off, let's compare what you get for free. Bear in mind that Azure is free until the end of January, but since this is a CTP and won't end soon, I'm going to exclude it. Google's free quota currently has no time restrictions.

Windows Azure    Google App Engine   
CPU Hours - 6.5hrs/day
Bandwidth (out) - 1GB/day
Bandwidth (in) - 1GB/day
Storage (DB) - 1GB
Storage Transactions - 10,368,000/day

Well, for free, I think we have a clear winner. If you can run your website/app within the limits above, then you can do it for free with Google. It's worth mentioning that Google let you have 10 apps per account (though you may not balance a single site/app across app instances - they are specifically for separate projects).

But what if you're bigger than that? What if you get Slashdotted or Dugg a lot? You might find you quickly break out of the free limits. How do prices compare?

Windows Azure    Google App Engine   
CPU $0.12/hour $0.10/hour
Note that MS bill "per hour app is running" whereas Google bill "per CPU hour consumed"
Bandwidth (out) $0.15/GB $0.12/GB
Bandwidth (in) $0.10/GB $0.10/GB
Storage (Files) $0.15/GB/month Pricing unavailable (Blobstore)
Storage (DB) $9.99/month (SQL Server up to 1GB) $0.15/GB/month ($0.005/GB/day)
Storage Transactions $0.01/10,000 ?
I can't find any prices for Google App Engine storage transactions, so it's possible there is no charge (though a limit of 140,000,000/day applies)

Well, that's interesting. I was going to try and calculate at what point Azure would become cheaper, but looking at those prices, it just isn't going to happen. Now it's worth pointing out that not all of the comparisons are fair. Google bill per actual CPU hour (so if nobody visits your site, it's not costing you), whereas Microsoft are billing for each hour your app is live and able to respond. There's also a significant difference between SQL Server and App Engine Datastore (and depending on what you're doing, one will have advantages over the other).

I really hope Microsoft re-evaluate their pricing for small apps. It's too expensive to play around with small prototypes at those prices, whereas Google's offering will let me get started completely free, until my app is churning a considerable amount of traffic, and even then, it'll work our cheaper for the same processing/transfer.

Sorry Microsoft. I love .NET and Visual Studio, but Google App Engine is just so easy and cheap that it's going to be my "toy of choice" for my hobby coding for the immediate future!