Cloud Software Architect Necessities

Cloud Architecture is becoming more and more relevant in the software industry today.  A lot of efforts are becoming less about software and more about cloud software.  The whole gamut of cloud technology; platform, service, infrastructure, or platforms on platforms are growing rapidly in number.  The days you didn’t need to know what the cloud was are rapidly coming to an end.

As I move further along in my efforts with cloud development, both at application level and services levels, I’ve come to a few conclusions about what I do and do not need.  The following points are what I have recently drawn conclusions about, that cause frustration or are drawn from the beauty of cloud architecture.

REST is King, Period

When I use REST in this context, I don’t just mean a nice clean URI or “not SOAP”.  I’m talking about the whole entire enchilada of REST Architecture Principles.  A good place to start learning about REST is the Wikipedia Article.  Other key resources to check out include;  Roy T. Fielding’s Dissertation, specifically chapter 5, Principled Design of the Modern Web Architecture, and the O’Reilly Book RESTful Web Services.

REST Architecture is fundamental to the web and the fact that the web is continuous in uptime.  The web, or Internet, doesn’t go down, doesn’t crash, and is always available in some way.  REST Architecture and the principles around it are what enables the web to be this way.  The cloud seeks to have the same abilities, functionality, and basically be always on, thus REST Architecture is key to that underpinning.

Core Development

Currently I do most of my development with C# using the .NET Framework.  This is great for developing in cloud environments in Windows Azure and Amazon Web Services.  The .NET Framework has a lot of libraries that work around, with, and attempt to provide good RESTful Architecture.  However, there are also a lot of issues, such as the fact that WCF and ASP.NET at their core aren’t built with good intent against RESTful Architecture.  ASP.NET MVC and some of the latest WCF Releases (the out of band stuff) are extensively cleaning this up and I hear that this may be sooner than later.  I look forward to have cleaner, bare bones, fast implementations to use for RESTful development in Azure or AWS.

The current standing ASP.NET (Web Forms) Architecture is built well above the level it should be to utilize REST Architecture well.  Thus it creates a lot of overhead and unnecessary hardware utilization, especially for big sites that want to follow good RESTful Practice.

WCF on the other hand had some great ideas behind it, but as REST increased in popularity and demanded better use of the core principles the web is founded on, the WCF model has had to bend and give way some of its functional context in order to meet basic REST Architecture.

Anyway, that’s enough for my ramblings right now.  Just wanted to get some clear initial thoughts written down around Cloud Architecture needs for the software developer.

Cloud Throw Down: Part 3 – Relational Databases and Instance Prices

 

Amazon Web Services
Amazon Web Services
 

Windows Azure
Windows Azure

Previous Throw Down…

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
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
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
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
Amazon Web Services and Windows Azure

 

Today’s Winners is easily AWS.  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:

Cloud Throw Down: Part 2 – Deployments and Instance Options

 

Amazon Web Services
Amazon Web Services
 

Windows Azure
Windows Azure

Previous Throw Down…

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;

  1. One is with a configured Web Role or VM Role in Windows Azure and already configured EC2 Instance for AWS or…
  2. 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.

Compute Instance Size CPU Memory
Extra Small 1.0 GHz 768 MB
Small 1.6 GHz 1.75 GB
Medium 2 x 1.6 GHz 3.5 GB
Large 4 x 1.6 GHz 7 GB
Extra large 8 x 1.6 GHz 14 GB

(reference:  http://www.microsoft.com/windowsazure/compute/default.aspx)

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
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.  🙂

Windows Azure (w/ AWS) Presentation Coming Up

I have a presentation coming up next week on the 10th.  If you’re interested in cloud computing, specifically around storage then you should tune in.  I’ll be covering the basics and some of the architectural ideas, uses, and more around Windows Azure Storage, and the comparable Amazon Web Services storage services.  I’ll also be noting a few of my ongoing projects that you might, if you’re into cloud bits, get a kick out of or want to join.

To tune in to the presentation swing over to the https://www.clicktoattend.com/invitation.aspx?code=147809 link.  There is registration information on the page.  The presentation will technically start at 1 PM PST on the 10th of next week and run until about 1:45pm.  We’ll make the meeting live about 12:45 for early arrival and after about 1:45 there will be a question and answer session.  I hope to have a good bit of conversation afterwards discussing the uses, architectures, and patterns around storage use with cloud services.

I hope you’ll join me.  -Adron

Cloud Throw Down: Part 1 – Operating Systems & Languages

 

 

Amazon Web Services
Amazon Web Services
 

 

Windows Azure
Windows Azure

The clouds available from Amazon Web Services, Windows Azure, Rackspace and others have a few things in common.  They’re all providing storage, APIs, and other bits around the premise of the cloud.  They all also run on virtualized operating systems.  This blog entry I’m going to focus on some key features and considerations I’ve run into over the last year or so working with these two cloud stacks.  I’ll discuss a specific feature and then will rate it declaring a winner.

Operating System Options

AWS runs on their AMI OS images, running Linux, Windows, or whatever you may want.  They allow you to execute these images via the EC2 instance feature of the AWS cloud.

Windows Azure runs on Hyper-V with Windows 2008.  Their VM runs Windows 2008.  Windows Azure allows you to run roles which execute .NET code or Java, PHP, or other languages, and allow you to boot up a Windows 2008 OS image on a VM and run whatever that OS might run.

Rating & Winner: Operating Systems Options goes to Amazon Web Services

Development Languages Supported

AWS has a .NET, PHP, Ruby on Rails, and other SDK options.  Windows Azure also has .NET, PHP, Ruby on Rails, and other SDK options.  AWS provides 1st class citizen support and development around any of the languages, Windows Azure does not but is changing that for Java.  Overall both platforms support what 99% of developers build applications with, however Windows Azure does have a few limitations on non .NET languages.

Rating & Winner: Development Languages Supported is a tie. AWS & Windows Azure both have support for almost any language you want to use.

Operating System Deployment Time

AWS can deploy one of hundreds of any operating system image with a few clicks within the administration console.  Linux instances take about a minute or two to startup, with Windows instances taking somewhere between 8-30 minutes to startup.  Windows Azure boots up a web, service, or CGI role in about 8-15 minutes.  The Windows Azure VM Role reportedly boots up in about the same amount of time that AWS takes to boot a Windows OS image.

The reality of the matter is that both clouds provide similar boot up times, but the dependent factor is which operating system you are using.  If you’re using Linux you’ll get a boot up time that is almost 10x faster than a Windows boot up time.  Windows Azure doesn’t have Linux so they don’t gain any benefit from this operating system.  So really, even though I’m rating the cloud, this is really a rating about which operating system is faster to boot.

Rating & Winner: Operating System Deployment Time goes to AWS.

 

Amazon Web Services
Amazon Web Services

 

Today’s winner is hands down AWS. Windows Azure, being limited to Windows OS at the core, has some distinct and problematic disadvantages with bootup & operating system support options.  However I must say that both platforms offer excellent language support for development.

To check out more about either cloud service navigate over to:

That’s the competitions for today.  I’ll have another throw down tomorrow when the tide may turn against AWS – so stay tuned!  🙂