The "cloud" in cloud computing can be defined as the set of hardware, networks, storage, services, and interfaces (I.T Infrastructure) that combine to deliver aspects of computing as a service. Cloud services can be software, infrastructure, and storage over the Internet (either as separate components or a complete platform) based on user demand. It can also be defined next stage in the Internets evolution, providing the means by which everything — from computing power to computing infrastructure, applications and business processes can be delivered to you as a service wherever and whenever you need and will be charged on basis of usage like we use electricity and pay on basis of monthly usage.. Some businesses, such as Google and Amazon, already have most of their IT resources in the cloud. They have found that it can eliminate many of the complex constraints from the traditional computing environment, including space, time, power, and cost. Now coming to Microsoft they have also setup cloud computing for their customers known as AZURE.
Cloud Computing is often described as a stack, as a response to the broad range of services built on top of one another under the moniker “Cloud”. The generally accepted definition of Cloud Computing comes from the National Institute of Standards and Technology (NIST), essentially says that; Cloud computing is a model for enabling convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction. What this means in plain terms is the ability for end users to utilize parts of bulk resources and that these resources can be acquired quickly and easily. NIST also offers up several characteristics that it sees as essential for a service to be considered “Cloud”. These characteristics include;
- On-Demand Self-Service: The ability for an end user to sign up and receive services without the long delays that have characterized traditional IT
- Broad Network Access: Ability to access the service via standard platforms (Desktop, Laptop, Mobile, etc.)
- Resource Pooling: Resources are pooled across multiple customers
- Rapid Elasticity: Capability can scale to cope with demand peaks
- Measured Service: Billing is metered and delivered as a utility service
More than putting and solving puzzles around categorization, we believe that in order to maximize the benefits that Cloud Computing brings, a solution needs to demonstrate these particular characteristics. This is especially true since in recent years there has been a move by traditional software vendors to market solutions as “Cloud Computing” which are generally accepted to not fall within the definition of true Cloud Computing, a practice known as “Cloud-Washing.” The diagram below depicts the Cloud Computing stack – it shows three distinct categories within Cloud Computing: Software as a Service, Platform as a Service and Infrastructure as a Service and the composition of the each category:
In this article we look at all three categories in detail however a very simplified way of differentiating these flavors of Cloud Computing is as follows;
Approaches to Cloud Computing
The idea behind any cloud computing proposal is for you to pay only for what you use, scaling up or down according to business needs. Vendors supporting cloud computing can interpret this statement differently, providing varying levels of services to achieve this result. The three approaches to cloud computing are Infrastructure as a Service (IaaS), Software as a Service (SaaS), and Platform as a Service (PaaS).Let we understand each approach one by one
SaaS applications are designed for end-users, delivered over the web
PaaS is the set of tools and services designed to make coding and deploying those applications quick and efficient
IaaS is the hardware and software that powers it all – servers, storage, networks, operating systems
To help understand how these 3 components are related, some have used a transportation analogy; By itself, infrastructure isn’t useful – it just sits there waiting for someone to make it productive in solving a particular problem. Imagine the Interstate transportation system in the U.S. Even with all these roads built, they wouldn’t be useful without cars and trucks to transport people and goods. In this analogy, the roads are the infrastructure and the cars and trucks are the platform that sits on top of the infrastructure and transports the people and goods. These goods and people might be considered the software and information in the technical realm. It is important to note that while for illustration purposes this article draws a clear distinction between SaaS, PaaS and IaaS, the differences between these categories of cloud computing, especially PaaS and IaaS, have blurred in recent months and will continue to do so. Nevertheless, with a general understanding of how these components interact with each other, we will turn our attention in more detail to the top layer of the stack, SaaS.
Software as a Service
Software as a Service (SaaS) is defined as (by WikiPedia); “…software that is deployed over the internet… With SaaS, a provider licenses an application to customers either as a service on demand, through a subscription, in a “pay-as-you-go” model, or (increasingly) at no charge when there is opportunity to generate revenue from streams other than the user, such as from advertisement or user list sales”. SaaS is a rapidly growing market as indicated in recent reports that predict ongoing double digit growth. This rapid growth indicates that SaaS will soon become commonplace within every organization and hence it is important that buyers and users of technology understand what SaaS is and where it is suitable.
Characteristics of SaaS
Like other forms of Cloud Computing, it is important to ensure that solutions sold as SaaS in fact comply with generally accepted definitions of Cloud Computing. Some defining characteristics of SaaS include;
- Web access to commercial software
- Software is managed from a central location
- Software delivered in a “one to many” model
- Users not required to handle software upgrades and patches
- Application Programming Interfaces (APIs) allow for integration between different pieces of software
Where SaaS Makes Sense
Cloud Computing generally, and SaaS in particular, is a rapidly growing method of delivering technology. That said, organizations considering a move to the cloud will want to consider which applications they move to SaaS. As such there are particular solutions we consider prime candidate for an initial move to SaaS;
- “Vanilla” offerings where the solution is largely undifferentiated. A good example of a vanilla offering would include email where many times competitors use the same software precisely because this fundamental technology is a requirement for doing business, but does not itself confer an competitive advantage
- Applications where there is significant interplay between the organization and the outside world. For example, email newsletter campaign software
- Applications that have a significant need for web or mobile access. An example would be mobile sales management software
- Software that is only to be used for a short term need. An example would be collaboration software for a specific project
- Software where demand spikes significantly, for example tax or billing software used once a month
SaaS is widely accepted to have been introduced to the business world by the Salesforce Customer Relationship Management (CRM) product. As one of the earliest entrants it is not surprising that CRM is the most popular SaaS application area, however E-mail, Financial Management, Customer Service and Expense Management have also gotten good uptake via SaaS. Software as a Service may be the best known aspect of Cloud Computing, but developers and organizations all around the world are leveraging Platform as a Service, which mixes the simplicity of SaaS with the power of IaaS, to great effect.
Platform as a Service
Platform as a Service (PaaS) brings the benefits that SaaS bought for applications, but over to the software development world. PaaS can be defined as a computing platform that allows the creation of web applications quickly and easily and without the complexity of buying and maintaining the software and infrastructure underneath it. PaaS is analogous to SaaS except that, rather than being software delivered over the web, it is a platform for the creation of software, delivered over the web.
Characteristics of PaaS
There are a number of different takes on what constitutes PaaS but some basic characteristics include;
- Services to develop, test, deploy, host and maintain applications in the same integrated development environment. All the varying services needed to fulfil the application development process
- Web based user interface creation tools help to create, modify, test and deploy different UI scenarios
- Multi-tenant architecture where multiple concurrent users utilize the same development application
- Built in scalability of deployed software including load balancing and failover
- Integration with web services and databases via common standards
- Support for development team collaboration – some PaaS solutions include project planning and communication tools
- Tools to handle billing and subscription management
PaaS, which is similar in many ways to Infrastructure as a Service that will be discussed below, is differentiated from IaaS by the addition of value added services and comes in two distinct flavours;
- A collaborative platform for software development, focused on workflow management regardless of the data source being used for the application. An example of this approach would be Heroku, a PaaS that utilizes the Ruby on Rails development language and Windows Azure Services.
- A platform that allows for the creation of software utilizing proprietary data from an application. This sort of PaaS can be seen as a method to create applications with a common data form or type. An example of this sort of platform would be the Force.com PaaS from Salesforce.com which is used almost exclusively to develop applications that work with the Salesforce.com CRM.
Where PaaS Makes Sense
PaaS is especially useful in any situation where multiple developers will be working on a development project or where other external parties need to interact with the development process. As the case study below illustrates, it is proving invaluable for those who have an existing data source – for example sales information from a customer relationship management tool, and want to create applications which leverage that data. Finally PaaS is useful where developers wish to automate testing and deployment services. The popularity of agile software development, a group of software development methodologies based on iterative and incremental development, will also increase the uptake of PaaS as it eases the difficulties around rapid development and iteration of software. Some examples of PaaS include Google App Engine, Microsoft Azure Services, and the Force.com platform. Utilizing a PaaS development environment has resulted in the creation of these applications being significantly faster than would otherwise be the case. In some examples, in the absence of PaaS, the cost of developing the application would have been prohibitive.
Infrastructure as a Service
Infrastructure as a Service (IaaS) is a way of delivering Cloud Computing infrastructure – Servers, Storage, Network and Operating Systems – as an On-Demand Service. Rather than purchasing Servers, Software, Datacenter Space or Network Equipment, clients instead buy those resources as a fully outsourced service on demand. Within IaaS, there are some sub-categories that are worth noting. Generally IaaS can be obtained as Public or Private Infrastructure or a combination of the two. “Public Cloud” is considered infrastructure that consists of shared resources, deployed on a self-service basis over the Internet. By contrast, “Private Cloud” is infrastructure that emulates some of Cloud Computing features, like virtualization, but does so on a Private Network. Additionally, some hosting providers are beginning to offer a combination of traditional dedicated hosting alongside Public and/or Private Cloud networks. This combination approach is generally called “Hybrid Cloud”.
Characteristics of IaaS
As with the two previous sections, SaaS and PaaS, IaaS is a rapidly developing field. That said there are some core characteristics which describe what IaaS is. IaaS is generally accepted to comply with the following;
- Resources are distributed as a service
- Allows for dynamic scaling
- Has a variable cost, utility pricing model
- Generally includes multiple users on a single piece of hardware
There are a plethora of IaaS providers out there from the largest Cloud players like Microsoft Azure, Amazon Web Services and Rackspace to more boutique regional players. As mentioned previously, the line between PaaS and IaaS is becoming more blurred as vendors introduce tools as part of IaaS that help with deployment including the ability to deploy multiple types of clouds.
Where IaaS Makes Sense
IaaS makes sense in a number of situations and these are closely related to the benefits that Cloud Computing bring. Situations that are particularly suitable for Cloud infrastructure include;
- Where demand is very volatile – any time there are significant spikes and troughs in terms of demand on the infrastructure
- For new organizations without the capital to invest in hardware
- Where the organization is growing rapidly and scaling hardware would be problematic
- Where there is pressure on the organization to limit capital expenditure and to move to operating expenditure
- For specific line of business, trial or temporary infrastructural needs
Microsoft Azure is Microsoft's application platform for the public cloud. The goal of this article is to give you a foundation for understanding the fundamentals of Azure, even if you don't know anything about cloud computing.
Azure is growing all the time so it's easy to get overloaded. The basic services are listed earlier in the paper. Start with just those, then go through the additional services. That doesn't mean you can't use just the additional services by themselves, but the basic services make up the core of an application running in Azure.
Microsoft way of cloud computing :) Windows Azure is Microsoft's application platform for the public cloud. You can use this platform in many different ways. For instance, you can use Windows Azure to build a web application that runs and stores its data in Windows Azure data centers. You can use Windows Azure just to store data, with the applications that use this data running on-premises (that is, outside the public cloud). You can use Windows Azure to create virtual machines for development and test or to run SharePoint and other applications. You can use Windows Azure to build massively scalable applications with lots and lots of users. Because the platform offers a wide range of services, all of
The Components of Azure
Azure groups services into categories in the Management Portal and on various visual aids like the What Is Windows Azure Infographic. The Management Portal is what you use to manage most (but not all) services in Azure.
This paper will use a different organization to talk about services based on similar function, and to call out important sub-services that are part of larger ones.
Azure has a web interface called the Management Portal that allows administrators to access and administer most, but not all Azure features. Microsoft typically releases the newer UI portal in beta before retiring an older one. The newer one is called the "Azure Preview Portal".
There is typically a long overlap when both portals are active. While core services will appear in both portals, not all functionality may be available in both. Newer services may show up in the newer portal first and older services and functionality may only exist in the older one. The message here is that if you don't find something in the older portal, check the newer one and vice-versa.
One of the most basic things a cloud platform does is execute applications. Azure provides these options:
- Virtual Machines gives you control over your own virtual machine, including the operating system.
- Websites offers a range of applications, frameworks, and templates for you to build large, scalable web applications and presence websites quickly, and then efficiently manage development, test, and operations.
- Cloud Services is a platform-as-a-service (PaaS) option tuned to create highly scalable and fault resistant applications, but with more flexibility than Websites.
Each of the Azure execution models has its own role to play.
You can use these technologies separately or combine them as needed to create the right foundation for your application. The approach you choose depends on what problems you're trying to solve.
Azure Virtual Machines
Figure: Azure Virtual Machines gives you full control over virtual machine instances in the cloud.
The ability to create a virtual machine on demand, whether from a standard image or from one you supply, can be very useful. This approach, commonly known as Infrastructure as a Service (IaaS), is what Azure Virtual Machines provides. Figure 2 shows a combination of how an Virtual Machine (VM) runs and how to create one from a VHD.
To create a VM, you specify which VHD to use and the VM's size. You then pay for the time that the VM is running. You pay by the minute and only while it's running, though there is a minimal storage charge for keeping the VHD available. Azure offers a gallery of stock VHDs (called "images") that contain a bootable operating system to start from. These include Microsoft and partner options, such as Windows Server and Linux, SQL Server, Oracle and many more. You're free to create VHDs and images, and then upload them yourself. You can even upload VHDs that contain only data and then access them from your running VMs.
Wherever the VHD comes from, you can persistently store any changes made while a VM is running. The next time you create a VM from that VHD, things pick up where you left off. The VHDs that back the Virtual Machines are stored in Azure Storage blobs, which we talk about later. That means you get redundancy to ensure your VMs won’t disappear due to hardware and disk failures. It's also possible to copy the changed VHD out of Azure, then run it locally.
Your application runs within one or more Virtual Machines, depending on how you created it before or decide to create it from scratch now.
This quite general approach to cloud computing can be used to address many different problems.
Windows Azure and Cloud Computing
Windows Azure is an operating system for the cloud (and hosted in the cloud) that completely abstracts the physical components of the system: the developer, as the customer, chooses the features, the components, and the level of Service Level Agreement (SLA) without the configuring of hardware or software on the assigned machines. To guarantee scalability and fault-tolerance, data stored in Windows Azure is replicated to three nodes, and the load balancer works in a completely transparent way. At the time of this writing, for computational power, a customer can choose among a range of five virtual machine types that can be described using only these components:
- CPUs You can range from a single processor at 1 GHz and greater to 8 cores if you want to leverage vertical parallelism.
- RAM Choose the size you need. The available range starts at 768 MB and goes up to 8 GB. You do not have to choose the vendor, the speed, or other characteristics.
- Instance storage Disk space starts at 20 GB and can expand to 2 terabytes per instance. You do not need to choose the speed, the controller, or the type of redundancy.
- I/O performance The choice is straightforward: low, moderate, or high.
The subscription fee can include some or all of these features. When a customer exceeds its limits, the billing system starts charging the surplus. Moreover, these features include everything you need. In five minutes, you can be up and running with a service or an application on the Windows Azure platform. If you want to scale up, you can choose from a simple configuration file to increase the number of machines you are using, and within about five minutes, you obtain more machines. If you want to reduce your computing power, you can reduce the number of instances at any time. The billing system will stop charging for dismissed instances immediately. You can also change the machine size at any time; however, it takes a slightly longer period of time to restart the service, because the platform needs you to redeploy the application. Such a redeployment operation usually takes about five minutes, after which you are up and running with new instances on new machines. Costs are proportional to the chosen configuration, but—and this is significant—you can change the configuration as needed. Every technical aspect of the deployment is Microsoft s responsibility. Fortunately, no one knows Microsoft Windows Server 2008 SP2 (the operating system on which Windows Azure is currently based at the time of this writing) better than Microsoft, and no one knows the .NET Framework internals, the operating system kernel, the IIS components, Microsoft SQL Server, and so on, better than Microsoft. Chapter 1 Introduction to Cloud Computing 13 Similarly, for maintenance and security, no one can apply patches faster than Microsoft. Even if your administrators check newsletters or read feeds 24 hours a day, they will always be second to the Microsoft team, which applies patches to the Windows Azure platform automatically as soon as they become available. Your application is deployed using a model that describes the application s needs. Developers can request a certain amount of disk space, and Windows Azure provides it automatically. However, you cannot request a specific SCSI (small computer system interface) controller or a RAID5 configuration—but you don t typically need to do that. The only thing you need to do is ensure that the application has sufficient disk space. If you achieve the required performance for your applications, because redundancy and scalability are assured, you don t need to know all the internal details. There is no added application value in knowing disk types. Moreover, you can avoid the inherent risks of choosing the wrong disks. Windows Azure hides most of the details of an on-premises solution. Every resource is exposed as a service (such as the storage account service for managing files) using standard protocols. All the storage details are completely transparent to developers on every platform. Physical resources are exposed by the infrastructure as services so that developers don t need to write resource-specific code to handle details like these:
- Physical location of resources
- Installed hard disks
- Name of the servers
- Network path
- IIS virtual directory
- IPs of the requested machines
Likewise, the .NET Framework developers usually don t need to understand the way the garbage collector (GC) works internally; all they need to know is how to release objects properly to let the garbage collector do its work most efficiently. They don t need to ask the garbage collector to run to clean up memory—and in most cases it would be counterproductive to do so. Similarly, in the cloud, knowing internal details of the local storage service is unimportant, but opening and closing files correctly is fundamental. To reach a remote resource, the application must call the service that exposes the resource itself. Technically, developers use the service URI to insert, update, or delete a resource, and use the OData REST pattern to query the service for existing resources. This usually leads to a common question: does typical developer code work well in Windows Azure? The answer is that it depends. If you developed the application properly, decoupling it from dependencies and separating functionality into appropriate layers, the application will 14 Windows Azure Step by Step probably perform as well (or even better) in Windows Azure with few or no changes. (If you need to store files in shared storage, you will need to adapt some code.) If the code is monolithic or you did not take full advantage of object-oriented programming (OOP) techniques, or the application consists of "spaghetti code" that mixes UI with business logic or data access logic, the application will probably need some adjustments to work with a different type of storage. However, generally, when the application works with SQL Server, you can probably port it to Windows Azure and SQL Azure with minimal modifications. If you decide to use the Windows Azure storage service instead of SQL Azure as the storage service for your application, and you wrote a correctly layered solution, you can simply substitute your existing data access layer with the new one (or adapt your existing layer). The storage service exposes resources as an OData service using the same pattern used by Windows Communication Foundation (WCF) Data Services in .NET Framework (previously referred to as Microsoft ADO.NET Data Services in .NET 3.5). If you chose this type of data access technique for your on-premises client solution, you need only adapt the code to use the security model exposed by Windows Azure—and that’s it. The upcoming chapters walk you through the various services and features exposed by the entire Windows Azure platform. You start with a complete description of both the released and announced features in the next chapter, then begin writing code in the local simulated environment, and finally deploy the code to an instance in the cloud. You see how to use the storage service efficiently, and how to work with OData and WCF Data Services. The later chapters are dedicated to SQL Azure and the Windows Azure AppFabric, which represent two of the major components built on top of Windows Azure so far. The last chapter is dedicated to a simple example application that uses OOP techniques and patterns to decouple the user interface and business layer from the data access components.