I recently did a clean install of Windows 7 64-bit. It had been a really long time since I listed the current tools, SDKs, and frameworks that I’ve been using. Thus here’s my entourage of software that I use on a regular basis that is installed on my primary development machines.
In addition to these packages of software another as important, if not more important to my day-to-day software development includes these software services and cloud hosting services.
Tomorrow is the big day! So be sure to come check out CloudCamp Seattle! We’re going to have a lot of great attendees, some rock star lightning talks and more. Make sure to get registered ASPA (click on the CloudCamp image above).
Location:
Amazon HQ
426 Terry Avenue North (At South Lake Union)
2nd Floor Conference Room
Seattle, WA 98109
Final Schedule:
6:00pm Registration, Networking w/ Food & Drinks
6:30pm Welcome and Thank yous
6:45pm Lightning Talks (5 minutes each)
Tony Cowan – WebSphere CloudBurst/Hypervisor Editions
Mithun Dhar – Microsoft Azure
Steve Riley – Amazon Web Services
Sundar Raghavan – Skytap
Josh Wieder – Atlantic.net
Margaret Dawson – Hubspan
Patrick Escarcega – “Managing Fear – Transitioning to the Cloud
7:30pm Unpanel
8:00pm Begin Unconference (organize the unconference)
8:15pm Unconference Session 1
9:00pm Unconference Session 2
9:45pm Wrap-up Session
10:00pm Raffle Books: “Host your website in the cloud” by Jeff Barr
10:15pm Drinks at 13coins sponsored by Clear Wireless Internet
Alright, time for the battle o’ clouds to roll on. In this throw down I’m going to compare platforms from the infrastructure and platform perspective. Windows Azure takes a very distinctive, and unique, Platform as a Service (PaaS) model and Amazon Web Services takes a very Infrastructure as a Service (IaaS) model. Each of these things start at different architectural levels for applications and provide different architectural perspectives. Before jumping into the comparison let’s take a look at what a developer, IT, or network specialist has to consider when building and deploying an application into either environment. I’ve highlighted the following steps to the specific profession that each model would most likely involve.
PaaS, Platform as a Service development and deployment model
Steps to Begin Building a Web Application or Service Application
Start a Project in your preferred development environment.
Build the code base. (Such as a web application or service application)
Create the platform web or service role for hosting the web or service application.
Setup the project deployment with the role parameters.
Deploy the project to that location.
Setup an appropriate domain name and point it at the site via nameserver/DNS.
IaaS, Infrastructure as a Service development and deployment model
Steps to Begin Building a Web Application or Service Application
Start a Project in your preferred development environment.
Build the code base. (Such as a web application or service application)
Start the OS Instance of your choice.
Install and configure the environment for hosting (IIS, Apache, or otherwise).
Setup the project deployment with the role parameters.
Deploy the project to that location.
Setup an IP address or externally accessible addressing for the instance.
Setup an appropriate domain name and point it at the site via nameserver/DNS.
As one can see there are more steps, and with reason, more costs to IaaS than to PaaS. With IaaS more control and with PaaS less control, but with the lack of control comes lower costs and barriers for entry. This is most likely, as I’ve heard more than a few times, why Microsoft has pushed the PaaS instead of going IaaS.
So how do each play out in offering the Platform as a Service?
First off, I have to point out that Amazon Web Services doesn’t really offer a PaaS. So comparing them directly is almost impossible. In addition, by not offerring a PaaS it sets up AWS at a disadvantage in this realm. But that being the case, there are 3rd Party Software Companies that offer PaaS Solutions for AWS such as Makara and Heroku. In addition there is rumor that AWS may be heading for a PaaS Offering soon.
I’ve fought with this topic in regards to AWS & Azure. It all really comes down to what your point of view is. So that’s how I’m going to score each of the services. I’ll layout a point of view (POV), which will be a simple description of the team that is building the cloud software, what the end goal is from the business in generic terms, then layout what would be a higher or lower cost, and finally which would provide the fastest time to market with the least amount of cost. It’ll be complex on the back end, but I’ll work to lay it out as neatly as I can.
POV: A Small Business, less than 15 people, working toward a website style SaaS Product.
The team has enough experience and technical skills to develop the product from AWS’s IaaS or Azure PaaS.
The business wants the product out to market in 3 months.
The team & business knows which geographic regions they need to focus on specifically.
The team wants control over instances and has flexibility of server OS, preventing OS lock in. (i.e. they can use Windows or Linux)
Autoscaling must be robust as traffic is expected, hopefully, to skyrocket as the product becomes recognized and available.
In this situation, AWS wins because of items 1, 2, 3, 4, and especially 5.
POV: A small business, less than 15 people, working toward a website style SaaS Product.
The team has .NET and Windows deployment experience, but minimal experience around networking, hosting, or infrastructure experience.
The business wants the product out to market in 3 months.
The team & business don’t care what geographic region the website is focused in.
The team doesn’t care about server lock in, Windows is fine by them.
Autoscaling and controlling traffic bursts isn’t a high priority for the team or business.
In this situation, Azure wins hands down based on 1, 2, 3, 4, and 5.
POV: An enterprise team wants to create a high quality code base, utilizing SCRUM with test driven development practices.
The team knows .NET and Java very well and a little bit of networking, hosting, and infrastructure.
The enterprise wants a steady release cycle of tested, highly reliable code.
The enterprise isn’t worried about which OS the team uses. Windows or a *nix variant.
Autoscaling is irrelevant, as long as capacity can be brought up and down in a timely manner to extremely high counts exceeding 1000+ instances.
In this situation, AWS wins hands down on 1, 2, 3, and 4.
POV: An enterprise team wants to deploy regularly, maintain their existing .NET stack, and utilize existing SDKs to keep the ramp up time minimal.
The team wants to use a familiar stack based on .NET and use SDKs if available.
The team isn’t concerned heavily with testable code, mostly just have a framework to build around that is familiar.
The business just wants the team to maintain familiarity with what exists in the company already.
The team wants to provide a single sign on (SSO) security implementation, using the cloud if possible.
In this situation, Azure wins easily for reasons 1, 2, 3, and 4.
POV: A Development team is putting together a public facing SaaS application.
The team wants to use whatever product has the best price point.
The team wants a strong enterprise style message bus to provide application messaging.
The business wants to deploy frequently and as soon as possible.
The team doesn’t care if the code is PHP, Java, .NET, or otherwise.
The team will create high quality code, and will build their own testing mocks, stubs, and other elements if need be.
The team doesn’t intend to use the SDKs from either AWS or Windows Azure, they want to keep lock in minimal so are building to services using good design patterns.
This situation is unique, and causes a tie between Azure and AWS for reasons 1 and 2 combined, 3, 4, 5, and 6.
Windows Azure
Based on these scorings, things might be a little confusing. I’ll elaborate a bit on some key points in the next entry on AWS vs. Azure. For now, I’m going to hand the victory to Windows Azure. The reason is simple, the PaaS perspective, in a little more than 50% of situation where PaaS or IaaS can be used should go with Windows Azure. In situations where a PaaS is desired then Windows Azure is pretty much the only serious option out there these days. Simply, Windows Azure just offers a ton of really serious features via cloud services for a PaaS offering. Stay tuned for the next grand battle between the cloud giants!
Now we’re going to throw down on something that I’ve had more than a few requests for. I’m going to break out and get some charts, graphs, and price differentials on AWS and Windows Azure. This throw down entry is going to be nothing but money, money, and more money. Have any guesses yet how this one is going to come out? Well read on!
Relational Database Storing 1 GB to 50 GB
This comparison may shock you. The two primary products from AWS and Windows Azure are AWS RDS, or Amazon Web Services Relation Data Store and SQL Azure. The following chart shows the initial cost at 1GB of storage in each, and then the progressive increase in price as we scale up to 50GB. There is one thing to add here, that at 50GB SQL Azure stops, so if you have more than 50GB of storage you want in a relational database, you don’t even have an option in SQL Azure. But let’s just take a look, and then I’ll go through and explain the pricing and declare the victorious.
Here’s a graph, with pricing along the left y axis and the storage requirement along the x axis. Feel free to check out the original spreadsheet too.
RDBMS with SQL Azure and AWS RDS
Like I was saying about the surprise. SQL Azure starts out cheaper than Amazon’s options but immediately goes into the stratosphere of pricing! $499.95 just seems absolutely insane. You really gotta love a limited SQL Server to go diving after that RDBMS versus Amazon’s more scalable RDS option, which never breaks $82.50. Really, this isn’t a victory, it’s a wholesale slaughter over SQL Azure.
Rating & Winner: Relational Database Storing 1 GB to 50 GB goes to AWS.
Single Instance .NET Web Application running on Windows
First off, let’s just take a look at the micro instances. The instances are perfect for testing out, basic development work and developer servers, and even scaling to larger things. Here’s how the costs pan out.
Windows Azure vs. AWS Micro Instances
The blue, in Windows Azure color shows the Windows Azure Micro Instance. Almost double what a similar instance running Windows Server 2008 would cost you on AWS, and more well more than double, which I’ll point out again in the next section. AWS is the obvious cheaper candidate with the smallest instances. But what about the slightly larger sizes, let’s take a look at that.
Windows Azure vs. Amazon Web Services Middle Tier Instances
The charts are also available in the previously linked spreadsheet. As one can see from these prices they fluctuate on sizes as the instances increase in size. The Linux instances are almost always cheaper than a comparable Windows Azure instance, and from a ECU/Processor Compute range AWS almost always comes out less expensive with the similar Windows Azure offering. I still haven’t compared actual process power and performance, but I intend to do that one of these days over the next few weeks or months. However for pricing on instances the options, and lower price winner with generally equal processing power is…
Rating & Winner: Single Instance .NET Web Application running on Windows goes to AWS.
Single Instance PHP, Java, or Ruby on Rails Web Application running on Linux
Now really, we don’t have to do too much more research for this measurement. Again, AWS handily beats Windows Azure in price and instance capabilities for the Linux, LAMP stack, and general PHP applications. For more information regarding this I also posted a link regarding WordPress Hosting on AWS & Windows Azure. Technically feasible with both services, however astronomically cheaper on AWS. Thus, in this category…
Rating & Winner: Single Instance PHP, Java, or Ruby on Rails Web Application running on Linux goes to AWS.
This competition just wasn’t really a good bout. AWS handily beats Windows Azure in price and compute power overall. Even when getting into the higher performance options, AWS has high performance compute options that aren’t even available. Don’t worry Windows Azure fans, there is hope still. In my next bout I intend to compare the two from a more PaaS oriented point of view. One of the features and capabilities that will come up is Windows Azure AppFabric. That will be a much closer fight I’m sure. For now though…
Amazon Web Services and Windows Azure
Today’s Winners is easilyAWS. The rest of my throw down series will be coming over the next week. If you have any ideas or things I should compare the two services on, please let me know. Thanks and hope you enjoyed another bout of the cloud giants.
To check out more about either cloud service navigate over to:
Ok, in this edition the fight gets graphic! Let’s jump right into the bout. I’ve also been thinking about adding Rackspace or another cloud provider, so if you want me to add a comparison point, please let me know and I’ll get them added.
Deploying .NET Web Application Code into AWS and Windows Azure is done in some distinctly different ways. There are two ways to look at this measurement;
One is with a configured Web Role or VM Role in Windows Azure and already configured EC2 Instance for AWS or…
A Web Role or VM Role as is and an EC2 Instance as is.
The first scenario one can deploy .NET code directly to the Web Role by simply building the code, directly from Visual Studio and just clicking on publish. For simple web applications and even some complex ones, this is all that is required to get the app into the cloud and running. This takes about 1-5 minutes depending on your build time and bandwidth. I’ll measure this first method of deployment with the web role already started, so it is only the deployment being measured. For AWS I’m making the assumption that you’ve already got an EC2 instance running with either Linux + Mono or Windows with IIS Configured and ready. I’ll call it the…
Deploying .NET Web Applications into Ready Environments
With Windows Azure the deployment takes about 1-5 minutes from Visual Studio 2010. With AWS EC2 using the FTP deployment it takes about 1-5 minutes. In this particular situation, both cloud services are equal for deployment time and steps to deploy.
Rating & Winner: Deploying .NET Web Applications into Ready Environments is a tie.
…the second situation though is where things get tricky and Windows Azure has some startling advantages. I’ll call this deployment…
Deploying a .NET Web Application into Environments As-is
This is a trickier situation. Setup and then deployment. For a Web Role the setup is done almost entirely in the actual .NET Web Application Project. So it is done if the project builds and runs locally. Nothing available is as fast as a deployment from Visual Studio 2010 straight to a Web Role. Of course the application has to be built with this specific scenario in mind. Total deployment time for this is 1-5 minutes.
The AWS EC2 instance you have to configure the operating system and IIS. Installation of this and setup for the FTP server, etc, often takes several minutes. So the first time deployment onto an EC2 instance will take a good 5-15 minutes and often requires, as any deployment to a web server does, a few minutes just to make sure all the settings are right and setup just the way you want them. Overall, this method is not as clean as the Windows Azure Web Role deployment method.
Windows Azure however has a VM Role, similar in many ways to an AWS EC2 instance, and it has the same issues and concerns as deploying to an AWS EC2 instance for the first time. It requires manual intervention to setup, configure, and assure that all things are in order for the specific application.
Combining these facts for deploying a .NET web application as-is leaves a few odd points. The VM Role and AWS EC2 instance is definitely more time consuming and prone to human error for deployment because of the additional control one can have. However the Web Role limits the ability to control many variables of the serving of content from the Web Role, it absolutely is the fastest and cleanest way to deploy a .NET Web Application.
Rating & Winner: Deploying a .NET Web Application into Environments As-is goes to Windows Azure.
Virtual Instance Options
The next measurement is a simple one, virtual instance options. Windows Azure has the following options available for virtual instances.
That gives us 5 different compute instance sizes to choose from. Amazon Web Services provides the following compute instance sizes.
Compute Instance Size
CPU
Memory
Micro
Up to 2 EC2 Compute Units
613 MB
Small
1 Dedicated EC2 Compute Unit
1.7 GB
Large
4 EC2 compute units
3.5 GB
Extra Large
8 EC2 compute units
7 GB
High Memory Extra Large
6.5 EC2 compute units
17.1 GB
High Memory Double Extra Large
13 EC2 compute units
34.2 GB
High Memory Quadruple Extra Large
26 EC2 compute units
68.4 GB
High CPU Medium
5 EC2 compute units
1.7 GB
High CPU Extra Large
20 EC2 compute units
7 GB
Which provides us a diversified range of 9 different instance types.
Rating & Winner: Virtual Instance Options goes to AWS.
Amazon Web Services and Windows Azure
Today’s Winners is… Windows Azure and AWS in a tie. The rest of my throw down series will be coming over the next week and few days. If you have any ideas or things I should compare the two services on.
To check out more about either cloud service navigate over to:
Disclosure: I didn’t mention it in either of the previous throw down segments about any disclosure I need to make. I’m a .NET programmer, love and hate Microsoft at the same time, but have no real honest preference toward either cloud service. I’m just interested in and always learning more about each technology. Using either service when their respective capabilities meet the price, feature, or other combination that I can use. I also do not work directly for Microsoft or Amazon. Again, thanks for reading. 🙂
You must be logged in to post a comment.