
Cloud computing is a term which has been used quite a bit lately. It seems every other website offers some sort of a “cloud solution” for developers: Microsoft, Google, Amazon.com, and even Rackspace.com. And there also some confusion as to what the term cloud computing actually means. This blog post intends to define cloud computing from a developer’s perspective and compare some of the options available to developers.
What Is Cloud Computing?
For a developer, cloud computing is really a combination of development style and software deployment. Cloud-based development happens when developers build applications that are to be hosted on a third-party’s servers. These servers (or “the cloud”) host the application for the developers for others to use. Although this might sound a lot like a standard web hosting service, the key difference here is scalability and availability. Cloud providers usually allow developers to rapidly add and remove server resources, often by simply adjusting a configuration setting. This can be anything as simple as disk usage to something more complex, like virtual machine images. They also usually charge fees based upon processor/ image usage, as opposed to monthly fees.
For example, a start-up company that builds a .NET web service can have it hosted at almost any web hosting provider. They’d likely pay for a web host, domain, possibly a database, and bandwidth. Now, if that web service becomes very popular, the company would need to contact the host, see if larger servers could be used, bandwidth increased, and so on. But what happens if there are no larger servers? What happens if the host can’t meet the needs developers uptime requirements? At this point, a company which developed the service would host it at their own location. They’d pay for the server(s), the internet connection, the support staff, and so on. They might also have to re-code the web service to take full advantage of the computing power now available in the locally hosted environment. We can see the costs rising here.
Enter the Cloud. Cloud computing offers an environment hosted by a third-party which handles the hardware, bandwidth, support staff, and the internet connection. More importantly, it provides all of the raw computing resources the web service might need: storage, web access, and so on. As more resources are needed, they are added dynamically.
That is cloud computing at the most basic level. There are differentiating features that each cloud provider offers as well. Some offer built-in workflow support, some offer integration with certain authentication mechanisms, and so on. Although outside the realm of this blog post, there are other definitions of cloud computing, usually involving “software as a service” (SaaS). These include a provider on the internet providing distinct services, such as weather, current traffic conditions, or even credit card payments.
What’s The Difference Between The Cloud Providers?
Although not an exhaustive list, here are some of the major players in the cloud computing arena.
Microsoft Azure
Microsoft’s foray into the cloud is its Azure platform. Azure is in a “Community Technology Preview” status at this time. It offers a set of developer services which allow .NET Applications to be hosted and processed via one or more Worker and Web Roles. These applications can take advantage of a variety of features. These include Access Control (allowing integration with standards-based authentication providers), Service Bus (allows connectivity between application across the internet), Workflow Services (for workflow management), Live Services (offering syncing between a diverse range of hardware), and SQL Data Services (which is soon going to support relational database solutions). Also announced is upcoming access to SharePoint and CRM functionality. Since this in a CTP status, there are no charges at this time for the services. However, this will undoubtedly change in the future, and Microsoft has not announced any anticipated pricing models.
Google App Engine
Google is offering their Google App Engine as a way for developers to start developing for the cloud. It currently supports development using a limited version of Python 2.5. This is mainly due to prohibitions on using the C libraries and file I/O. The HTML portions of the applications written can use JavaScript (for AJAX development) and some Python frameworks can be imported. Google App Engine (or just “app engine”) supports a datastore for development, and it uses a SQL-like language called GQL. The actual storage of the data is not in a traditional relational model, rather, it uses a DataStore / Entity / Property model. This might require a different data storage design than a developer is usually used to. Application access is provided by Google Accounts. There are free quotas for basic development, and charges are applied for emails / bandwidth / data access after the quota has been met. Google also offers high-speed URL fetching, mail, key/value cache, and image manipulation services for Google App Engine applications.
Amazon Web Services
Amazon has a series of cloud offerings under an umbrella called “Amazon Web Services.” These are not Web Services of the W3C definition. Rather, this is a brand name, which includes “Elastic Cloud Compute Cloud” (also called Amazon EC2), “Amazon DB”, “Amazon Simple Storage Service” (also called Amazon S3), “Amazon Cloudfront”, and “Amazon Simple Queue Service (also called Amazon SQS). To avoid confusion, all references to the W3C defined web services will be called web services (in lower case). The Amazon umbrella term will use capital letters.
Amazon EC2 offers virtual servers to clients for development and hosting. In addition to offering to quickly add new virtual server instances within minutes, they offer a variety of operating systems for those instances. These include OpenSolaris, Linux, and Windows Server. Amazon offers billing based upon capacity that is used and also for the instance types used. For example, a standard “small” instance of 1.7 Gb of memory and a single virtual core cab cost cost very little, while the highest CPU on-demand instances (8 virtual cores and 15 Gb of memory) cost a lot more. There is no development platform specific for the Amazon Cloud, however, web services are available for configuration.
Amazon SimpleDB offers a basic data storage system for development.This is in a “Domain –> Item–> Attribute” model and is not relational. Developers access this by web service calls and a SQL-like query.
Amazon S3 is a service which provides non-SQL based data storage of files up to 5Gb. This is essentially a fast, reliable means to store individual files for many people to access across the Internet via web services.
Amazon Cloudfront is a service which provides rapid distribution of popular content. It supports high transmission speeds with low latency. Access is through a distribution’s domain name, as opposed to web services (like Amazon S3).
Amazon SQS provides queuing services via SOAP and Query web services. There is no guaranteed FIFO (first in, first out) support and this must be handled at the application level.
Rackspace
Rackspace offers some basic “cloud” services. Through the “Mosso” brand name, RackSpace offers what they call “Cloud Sites”, “Cloud Files” and “Cloud Servers”.
Cloud Sites offers a basic way of creating additional scalable websites very quickly. Billing is done on a computational cycle system (in addition to bandwidth and SAN storage).
Cloud Files allows high performance hosting of files and static content through REST APIs.
Cloud Servers is an offering similar to Amazon’s EC2. While just launched, it offers dynamic creation of Linux instances
In summary, many companies are reaching out to developers to provide some form of hosted services. While trying to navigate through all of the offerings may be confusing, developers should take the time to research their options and make an informed decision. By having your application hosted on or interacting with a cloud, you will have access to different services which could well provide a needed competitive edge.
| Microsoft Azure | Google App Engine | Amazon Web Services | Rackspace (Cloud Servers) | |
| Development Language | .NET Languages (Primarily C# and VB.NET) | Python 2.5 | Only limited by OS | Limited by choice of Linux OS |
| Native Authentication/Authorization | Yes - Access Control | Yes - Google Accounts | No | No |
| Persistent Data Storage | Yes – Relational model being created | Yes – Non-relational | Yes – Non Relational with Amazon SimpleDB | Only Static content via Cloud Files |
| Native Hardware Sync Support | Yes – Live Services | No | No | No |
| Native Service Bus | Yes | No | No | No |
| Native “Workflow” Support | Yes | No | No | No |
| Native CRM Support | Pending | No | No | No |
| Image Manipulation Services | No | Yes | No | No |
| URL Fetching | No | Yes | No | No |
| Need to maintain servers (apply updates, install applications, etc.) | No | No | Yes | Yes |
| Physical Processor Guarantee | Yes | No | No | No |
| Physical Memory Guarantee | Yes | No | No | Yes |
| Native Queue Support | Yes | No | Yes (FIFO is not guaranteed) | No |
* Please note – this list is not exhaustive of features. These services have been researched and the information in this posting is believed to be accurate at this point in time. However, since many of these services are in some form of “beta”, feature sets will likely change in the future.

