An introduction to Windows Azure (for Busy People)
I decided to write this post to provide a little technical information aimed at non-programmers (Project Managers, Department Heads and other Busy People) who want to know more about the platform; how it works and what it offers. My goal is that, after reading this article, you’ll have a basic – yet thorough – understanding of how Azure is structured so that you can make informed contributions to discussions regarding the platform. This is a work in progress.
Some of the analogies used in the following article are designed to facilitate understanding on a functional level, and may therefore be technically ‘inaccurate’. If you’ve picked that up, you’re probably more technical than this author had in mind as the intended audience!
As always, we’re all learning – if you have ideas or suggestions for improving this article, please feel free to leave a comment. Thanks!
Table of Contents
An introduction to Windows Azure (for Busy People)
In the Azure world, you can have databases and applications all running in the cloud environment. By now, most of us know that a ‘cloud environment’ in its most basic form describes an environment in which you don’t ever see or touch the physical hardware or infrastructure as these are determined, managed and provided for you by the cloud service provider.
Developing and deploying applications onto the Azure platform requires a different approach to traditional application development, but developers can still continue to use all their existing tools (such as Visual Studio 2010) and don’t require any new software to get started. In fact, it’s actually possible to write applications for the Azure platform using the free Expression edition products provided by Microsoft.
Physically coding your applications, however, does require developers to change the way in which they build their applications, if only a little. That’s really a topic best left for someone else, or another post, to address.
On Azure, applications are referred to as ‘roles’, and there are two types of role: a “web role” or a “worker role”.
Think of a web role as a web site1, and a worker role as some repetitive computational task that takes place behind-the-scenes without any user interface at all (a good example would be processing statistical data, or – to use examples from other blogs – a thumbnail generator for images).
Roles
Web Roles are similar to web servers, in that they allow public computers to connect to your application over standard HTTP and HTTPS ports. Typical Azure deployments consist of one – maybe two – web roles, and a number of worker roles. Worker roles are also publically accessible; that is they can talk to each other and the outside world, and other Azure services.
It is important to note, however, that one web role is not actually a web server in and of itself. It is simply an instance of your software running on a web server that is publically accessible.
Azure would not be complete without two other key service offerings: storage (some place to store all your data) and SQL Azure (a variation of SQL Server, which provides relational database capabilities to your cloud applications deployed on the Azure platform).
To recap then, Azure is a platform that provides:
- Some place to run your applications from (via web and worker roles)
- Some place to store all your application files
- SQL Azure – a relational database like SQL Server
Each of these functional areas are referred to as ‘hosted services’, and as you might expect there are limitations imposed by Microsoft as to the amount of resources available to each service.
Resources
Though theoretically unlimited, in order to ensure all customers have resources available when required, Azure packages and limits what resources are available to specific deployments. Databases, storage and application instances are artificially capped according to the current limits (published online 2, updated regularly and these are commonly expected to grow over time).
Web and worker roles come in four varieties: small, medium, large and extra-large. That’s because they are actually virtual machines (VM’s – software ‘simulations’ of physical servers, many copies of which can run on a single physical server). Each represents an increase in pricing and has a different set of specifications that govern how much RAM, local storage space and CPU cores are available to the role as described below:
| Size | CPU Cores | Memory | Disk Space for Local Storage Resources |
| Small | 1 | 1.7 GB | 250 GB |
| Medium | 2 | 3.5 GB | 500 GB |
| Large | 4 | 7 GB | 1000 GB |
| Extra-large | 8 | 14 GB | 2000 GB |
Each VM is provisioned when required. The ‘magic’ of Windows Azure is that when you provision a VM, the Azure platform actually provisions a further two identically configured VMs. One acts as a recovery image, the other as a failover. If Azure detects a fault condition, it takes appropriate steps to automatically recover the damaged VM.
This is one of the most useful features of Azure, and you get it for ‘free’ – i.e., you don’t need to do anything particularly special to get this to happen, it’s simply a by-product of deploying your applications on to Azure.
Getting to Azure
To utilise Azure, you need an Azure services account (one per customer). Each account has the following overall limitations:
- Maximum 20 hosted service projects (projects contain instances)
- Maximum 5 storage accounts
- Limitation of 5 roles per hosted service project (i.e. 3 different web roles and two different worker roles, or any such combination)
- 20 CPU cores across all of the hosted service projects
Configurations of the Azure platform represent significant architectural decisions as deployments not only require the correct determination of ‘size’ but also the appropriate number of ‘instances’ of that deployment which will concurrently run. It is possible, therefore, to have two instances of a ‘small’ worker role running the same application. This would consume two of your maximum 20 cores. It is worth mentioning at this point that one can, at any time, reconfigure a deployed instance to utilise a larger VM or have a higher instance count, but that some (relatively minor) downtime would be incurred.
Storage
Storage in the cloud doesn’t work like any traditional disk-based system. That is, you’ll never have a “C:\” drive or a “D:\” drive3 (local storage is a topic I’m not going to cover here). The Azure platform makes disk space available as three distinct entities: Blobs (block and page), Tables and Queues. These three entities essentially abstract space on physical disks away into different logical units, within which programmers will never be able to ‘see’ the underlying disks or access them directly. This looks a little something like this:
Blobs are stored within containers and you can have as many containers as you can fit within your storage account quota. They’re a bit like folders, but only if you consider that you get to name them once they are created, and they cannot contain subfolders (or sub-containers, for that matter). Azure tables aren’t like tables in relational databases such as SQL Server or Microsoft Access, while queues provide a mechanism through which web and worker roles can talk to each other (instance A sends a message to instance B, which might – but doesn’t have to – process the message right away, hence why it is called a queue).
Block blobs and Page blobs
Block blobs are optimised for streaming, while Page blobs are optimised for random read/write operations. Block blobs are targeted towards streaming operations specifically because writing them is a two step process: first, you upload all of the individual blocks that will comprise the blob. Next, you must commit the blocks via a block list. During the commit phase, you can add/change or remove blocks from the blob. Page blobs, on the other hand, are updated immediately – no commit phase is required.Page blobs consist of an array of pages, where each page is 512 bytes and the blob size must be a multiple of 512 bytes.
Both block and Page blobs can be read from any byte offset in the blob, meaning it’s possible to read only a specific ‘chunk’ of either blob when it is on Azure Storage.
Page blobs: primary characteristics
Page blobs are fast and range-based, which means you can read from and write to specific ranges of a blob at a time. Page blobs are initialised with a Maximum Size, but if only half the blob contains data, you’re only charged for what you actually store in the blob. Page blobs also support leasing, which means it is possible for your application to ‘lock’ a specific range of the page blob while it is updating it, then release the lock.
The Windows Azure Storage blog has this to say about Page Blobs:
Another use of Page Blobs is to use them for custom logging for their applications. For example, for a given role instance, when the role starts up a Page Blob can be created for some MaxSize, which is the max amount of log space the role wants to use for a day. The given role instance can then write its logs using up to 4MB range-based writes, where a header provides metadata for the size of the log entry, timestamp, etc. When the Page Blob is filled up, then treat the Page Blob as a circular buffer and start writing from the beginning of the Page Blob, or create a new page blob, depending upon how the application wants to manage the log files (blobs). With this type of approach you can have a different Page Blob for each role instance so that there is just a single writer to each page blob for logging. Then to know where to start writing the logs on role failover the application can just create a new Page Blob if a role restarts, and GC the older Page Blobs after a given number of hours or days. Since you are not charged for pages that are empty, it doesn’t matter if you don’t fill the page blob up.
Block blobs: characteristics
Block blobs consist of, well, blocks! I’d say, in my experience, most people would want to be using block blobs over page blobs because they’re a little more flexible in terms of their sizing. For instance, a block blob does not have to declare its size when you create it: you just keep adding blocks to the blob until you’re done. There’s another benefit, too. With block blobs, you can send blocks in any sequence, then arrange them later on when you call your commit function. This makes them ideally suited to transferring large files, where your client is able to use a few threads to send the file in chunks.
Understanding the limitations of block and page blobs
Storage, like the other Azure services, is also subject to some limitations (and its own pricing structure), and the current limits are described in Table 3 below:
| Characteristic | Limit |
| Blob (block and page blob) | Maximum 200 GB |
| Block | 4MB maximum size, 64KB minimum size |
| Overall storage limit | 100 TB |
You can mix and match block and page blobs within your account, but a block blob cannot suddenly ‘become’ a page blob, or vice versa. Once a blob is created as one particular type, it will always remain that type. A block blob cannot contain pages, and a page blob cannot contain blocks for instance.
Addressing blobs
Blobs aren’t accessed or written to like traditional file systems, with a nice path-to-folder-and-filename approach (e.g. “C:\My Documents\My File.jpg”). Blobs use URIs to organise their data, e.g.:
http://myservice.blob.core.windows.net/accountname/containername/
blobname/which/can/have/slashes/but/dont/represent/folders/file.jpg.
It is precisely because this system is URI-based that it can be so vast and resilient to failure, as there are many copies of each individual physical drive. Therefore, it’s safe to say that when you upload a file to Azure and store it in blob storage, it’s pretty safe!
Earlier, I explained that a blob should be thought of as a container for files. This is not strictly true, but the analogy is very similar. In actuality, blobs are containers for blocks (chunks of a single file) and pages (more on those below), and blobs are actually organised into containers themselves. One file may be one block (if it is under 4MB in size; the maximum size limit for a block), or it may be several thousand. If the file is over 64MB in size, it must be split into blocks. Azure, perhaps confusingly has two varieties of blob storage: block and page.
Let it suffice to say that block blobs can be no larger than 200GB, and page blobs can be no larger than 1TB. Any combination of the latter must not exceed 1 TB. You can therefore see that the storage system in Azure is much more complex than the traditional system we are used to, but that it offers significant advantages over the former.
Databases: SQL Azure
Microsoft has redesigned some of their core applications (such as SQL Server) to work specifically on the Azure platform, and as such, they have some very appealing advantages over the versions of the products that you can buy commercially.4
In typical server-based implementations of SQL Server, it is common to find one server acting as the master while the other one monitors it to take over should it fail (the slave). This means the database is subject to the limitations of that server (storage space, processing power and bandwidth). It also means that although you have two servers powered on and dedicated to the task of serving a database, only one is ever actually working at any one time, which represents half the total available computing power and is a good example of why paying for hardware through a traditional hosting company is actually a less appealing concept.
On Azure, SQL Server has become SQL Azure – and now, the concept of master/slaves has gone and you have multiple servers all serving the same database, resulting in massively higher processing power and greater throughput capacity. What this ultimately means is that one can work with that database much more quickly than one can with SQL Server.
Now, there are some fundamental differences between SQL Azure and SQL Server. For example, one cannot do everything one can with SQL Server within SQL Azure. Bear that in mind when your developers explain this to you, as the two products are not exactly the same.
Databases require somewhere to store their data. SQL Azure has the following database packages available:
| Maximum database size | Monthly standing charge (USD) |
| 5 GB | $49.95 |
| 10 GB | $99.99 |
| 20 GB | $199.98 |
| 30 GB | $299.97 |
| 40 GB | $399.96 |
| 50 GB | $499.95 |
In addition, data transfer charges apply to the standing monthly charge:
| Region | Direction | Charge / GB (USD) |
| World (exc. Asia) | Inbound | $0.10 |
| World (exc. Asia) | Outbound | $0.15 |
SQL Azure offers the opportunity to pay only for what one actually uses. The standing monthly charges are amortised over the month and you only pay for the days on which you actually have the databases in each specific tier. This makes it a very cost-effective way to purchase database space in the cloud.
Also, being based on the Azure platforms means that there are a number of additional advantages:
- Data stored in an automatic high-availability environment
- Fault tolerance included
- 99.9% “Monthly Availability” SLA 5
This concludes our basic high-level introduction to the Windows Azure platform and I hope you have enjoyed reading it. If you have questions, feel free to post them in the comments below and I’ll do my best to answer them.
Foot notes:
A web role does not have to be a web site – it could be a web service, such as an API. A web role is publically accessible via the World Wide Web.
Available at http://msdn.microsoft.com/en-us/library/ee814754.aspx
Service quotas are expected to grow over time and automatically become available to hosted services.
“Local storage” excepted; in this document I am discussing globally available storage.
Azure is a proprietary technology and no company can install their own private instance of it. Microsoft software written purely for Azure is not available to any third party to install and host on their own infrastructure.
See http://www.microsoft.com/windowsazure/sla/ for all the Azure platform SLAs
Why customers don’t care about your business processes

http://www.ccpact.com/
Pick up the phone and call almost any large corporation, and it is likely you’re going to have to wrestle with more than just the issue that prompted you to call in the first place. What’s worse, though, is to tell your customers that – after they’ve spent 30 minutes on hold – they need to ‘go online’ to raise a support ticket, or email them instead.
If that seems odd to you, then you’re very lucky you’ve never had to deal with companies that operate in this manner (yes, they exist). Just last week though, I had encountered a problem with some of the servers at our hosting company that we couldn’t fix (network issues). This meant I had to make a support call. That call went something along these lines:
- Good afternoon, [Acme] support. How may I help you?
- Yes, hello – I’d like to talk to someone about [the issue].
- Sure, can I take your account number?
- [I give the account number]
- Ok, what’s the problem?
- [I describe the problem...]
- I see. Have you tried [this]?
- Yes, that didn’t work. It’s a network issue, we can’t resolve this ourselves.
- Ok, sir, I’m afraid you’re going to have to raise a ticket in your online control panel so that we can direct our engineers to take a look at it.”
Now, at this point, if you’re that someone at Acme who decided that’s what needed to happen, you should be sacked. Or at least beaten a few times with a printed version of Wikipedia (yes, that would be a lot of paper, and yes - that would sting). Let’s review the reasons why:
- The person calling you is a customer – which means, they’ve given your company some money
- The product or service they’ve bought isn’t working as it should, or they need some help getting it to work
- They’ve made the decision to phone you, on a number you’ve listed as a support line, rather than email you, probably because they need or want a speedy resolution
- They’ve waited on hold – probably patiently – and even put up with your repetitive music loops and reminders of how important we are to you
- And they’ve described their problem to your agent on the telephone
- Your agent made some suggestions, but they didn’t help
So when you ask them to hang up the phone and repeat everything they just said but in writing, you’re wasting their time. More importantly, however, you’re telling the customer that you [as the agent on the phone] just don’t care enough about the problem – and by extension the customer – to raise the ticket internally to get it dealt with.
Ultimately, the customer doesn’t care – and shouldn’t have to care – about whatever processes you have to go through internally in order to get a result. As far as they are concerned, they’ve reported a problem to an agent of the company. If that person does not have the ability internally to take whatever steps are necessary to get a resolution to the customer, then I’m sorry, but the management of Acme is failing its customers. Every person in your company should have the customers at the forefront of their minds. If they don’t, you don’t want them working for you. That’s not some wishy-washy mantra, either: it’s based on a rather solid principle:
“You will get more customers, and keep the existing ones happy, if you make them feel valued.”
‘Value’ is a relative term, agreed. I think most people would agree, though, that ‘value’ in this context during a typical conversation between them and you is:
- Quick reply
- Informative reply
- Speedy resolution
- .. and I’m not even talking about ‘going the extra mile’ here, this is just the standard stuff.
Every time you tell the customer that they need to do something else to satisfy your own requirements, you’re just putting up barriers. Do it for them, or, better still – remove the barrier, because you probably don’t need it. If your own support processes are so inflexible that an agent on the phone can’t walk over to, or call, the 2nd level support guys, change your support processes.
Human beings live connected lives. We are social creatures. As individuals, we don’t see the point in lengthy processes or bureaucracy because we should just be able to explain a problem to someone and have them deal with it – and get us the response we need. But ‘business analysts’, and those who go to ‘customer service school’, believe that a flowchart is a much better way to provide a service. And they’d be wrong, simply because your customers can never follow your own ‘critical path’ – they don’t know it. And they shouldn’t need to.
The bottom line is, there should only be one critical path when a customer calls you. It goes something like this:
- Receive call/email/fax/letter/visit in person
- Take the time to understand what they’re saying and what their concerns are
- If you can’t deal with it there and then, hand over to the person that can and inform the customer what is happening, then, crucially:
- FOLLOW IT UP
This process can of course only work if every person in your company is dedicated to putting the customer at the heart of what they do. If you don’t think that’s something you can achieve, then you should be looking at your work force and firing those that don’t think your customers are important, because your customers are who pays your salaries. Happy customers = more customers = fat paychecks, bonuses and a less stressful environment for everyone.
The problem is that common sense seems to have gone on holiday in some organisations
I don’t think management books are required, here. If you’re that company with the problem, all you need is to stand back and take a common-sense approach to structuring your teams. Better still, common sense says that if you have a bunch of people who all share the same principles, they’ll organise themselves to get the job done.
Customer service oriented process diagrams only exist because companies are frightened that the service they provide to a customer will be inconsistent between employees.
Providing the quality of interactions remains high, then surely it doesn’t matter what route the employees take to get the job done? At the end of the day, if all the employees subscribe to some of the basic principles of good customer service, they’ll all reach the same goal – and this leaves you the task of managing quality, learning more about your customers and how you can improve your products.
And let’s face it, spending your time improving your products is probably much more rewarding than ruining your customer’s day while you drag them ass-first through your ugly, bloated processes. Scrap them. Keep it simple, and remember:
That’s the end of my rant, feel free to leave a comment. If you’re looking for more inspiration, head over to http://www.ccpact.com/ and learn more about the Company-Customer Pact. It’s a great starting place to improve your relationships with your customers.
OCZ Colossus Performance in AHCI vs IDE mode on the Intel DP55KG Desktop Board
For those of you who don’t know, I’m currently building a new high specification PC to handle the day-to-day rigours of software development. Like a lot of developers, I’ve decided to embrace the new SSD drive technology due to the massive performance increase to be had over traditional ‘plate drives’.
I’ll provide more details about the PC’s specification soon, but I wanted to share some information about the various ways in which SSDs can be configured and how they affect performance. There are plenty of articles out there regarding SSD design, from a technical point of view, but I haven’t found any that have compared AHCI to IDE so that I could figure out which might give my Colossus the best chance of performing well. So, I decided to run my own basic test.
Motherboard
For this test, I am using the Intel DP55KG motherboard running BIOS version KGIBX10J.86A (17th Feb 2010). The DP55KG has 8 on-board SATA ports, six of which are powered via the board’s PCH, and two via an integrated Marvell 88E6145 chip (check out this post for an excellent review of the DP55KG).
The SSD
The drive under scrutiny here will be the OCZ Colossus 120GB. On paper, according to OCZ, the drive supports read and write speeds up to 260MB/sec, with sustained write around 140MB/s. This was the best drive I could find of this capacity in the price bracket.
The test
I wanted to know, “Which performs better, AHCI or IDE?” followed by “will IDE mode on the Marvell chip out perform IDE mode on the Intel PCH controller?”. To find out, I will use Passmark Performancetest 7.0 from Passmark. It provides a simple, standardised means of testing my SSD’s.
- To test the Intel PCH:
- Configure the controller in IDE mode
- Install Windows 7 Ultimate
- Install the latest Intel Chipset drivers
- Restart
- Install Passmark PerformanceTest 7.0
- Run tests
- Repeat these steps, but next time configure the controller in AHCI mode.
- To test the Marvell Chip:
- Connect the OCZ Colossus to port 0 on the board
- Verify controller is in IDE mode (AHCI is not supported by the Marvell chip)
- Install Windows 7 Ultimate
- Install the latest Intel Chipset drivers
- Restart
- Install Passmark PerformanceTest 7.0
- Run tests
Results
Here are the raw test results. Note that the figures quoted are in MB/s.:
| Test Name | Intel PCH (AHCI) | Marvell (IDE) | Intel PCH (IDE) |
| Disk – Sequential Read | 109.9 | 94.3 | 111.3 |
| Disk – Sequential Write | 131.0 | 46.1 | 131.8 |
| Disk – Random Seek + RW | 41.8 | 37.2 | 41.4 |
| Disk Mark | 1022.7 | 642.1 | 1029.0 |
| PassMark Rating | 2372.6 | 1489.7 | 2387.3 |
Here’s the corresponding bar chart (click to enlarge):
Connecting Windows 7 Media Center to your TV with the Acer Revo R3610
With Windows Home Server and several Xbox 360’s, some Windows 7 PCs and some TV Tuner Cards, you’d think it’d be easier than it is to get a seamless integrated media experience that’s both fast and reliable on my HDTV. In theory, it should be - but in reality, my experiences have been somewhat different.

VESA mount-it, stand it up, or lay it flat
The vision
Recently, I ditched Sky+, a subscription-based satellite TV service that comes with a personal video recorder and subscription TV service in one package. The PVR element is actually pretty darn good: very quick, responsive and the guide functions are adequate. The interface is a bit bland, but it is responsive and clear - and that’s what really counts. However, we realised that we just weren’t watching enough of the actual subscription channels (Sky 1, for instance) to warrant the monthly cost (no point paying for what you don’t use, right?). The trouble with ditching the service is, the PVR functionality is also disabled – which means no more ability to pause Live TV, or schedule programs to record. Darn.
What I wanted, then, is to be able to use Media Center (a better product than the bog standard Sky+ box will ever be), with Digital Terrestrial TV (free-to-air). Media Center also allows you to watch and consume digital content stored on the rest of your network. Combine this with the HP Media Smart Windows Home Server’s ability to stream media, and you have a winning combo. To satisfy this need, I wanted a PC directly connected to the main TV in our living room, as my experience with using the Xbox 360 as an extender to my Win7 Media Centre box just didn’t cut it performance-wise.
In addition to the PVR element, I also wanted a device that would enable me to consume the other digital content stored on our network: and the Sky+ box just can’t do that. Likewise, I can’t access recordings stored on the Sky+ box on my home network (nor could I back them up). So, the more I looked at it: the more Sky+ had to go.
In moving toward a more connected, content-oriented home, there had to be a better way. And, at long last, I believe I have found it.
My new setup: the hardware
- Acer Revo R3610
- Windows Home Server (obviously!)
- PlusLink Dual DVB-T USB tuners
- Windows 7 Home Premium (for Media Center)
The Acer Revo was the key that unlocked everything and made it all possible – but out of the box, it isn’t configured in a way that was an exact match to my requirements. The model I purchased came pre-installed with 2GB RAM.
Upgrading the Revo
To get the performance I desired, upgrades were essential. I purchased the following extras:
- 2GB RAM upgrade from Crucial UK
- OCZ 120GB Solid State Hard Disk
The result is a system that is simply stunning. It’s ready to boot from cold in just 30 seconds, and takes around the 15 second mark to resume from hibernate. It plays HD (1080p) content from TV channels, or from media streamed from the Windows Home Server. Plus, using the “Live TV” function in Media Center acts exactly as it should: it is swift and responsive.
This is basically Sky+ on speed, using Media Center’s beautiful and clutter-free user interface with direct connection to the rest of the network which enables us to enjoy all the digital content we create.
Now, even with Freesat and Digital Terrestrial TV (which gives us over 100 free channels, many of which are very good, particularly the BBC ones), we can now watch and record HD content speedily and consume that same content elsewhere on our home network.
You can ditch the Sky+ subscription and still access Sky TV content
Windows Media Center is just a modern wonder of the world. A recent update to WMC means that you can now access Sky TV content over the internet, with programmes directly listed inside the Programme Guide. You then have the option of renting the programme with prices starting from 99p. Pretty cool – so I really can ‘have my cake and eat it’.
What did it all cost?
Not including the Samsung Series 7 46” LCD TV it is connected to, the Acer Revo R3610 from Amazon.co.uk was £239.99. A 2GB RAM upgrade from Crucial UK cost £34.59 and the 128GB Kingston Technology SATA SSD was £168. The TV Tuner was an impulse buy from Maplin Electronics some time back and cost £24.99.
At the end of the day, my ’dream media setup’ cost £469.
The added advantage as well is that we get a lightning quick Windows 7 PC connected to the TV via HDMI – so other digital content, Youtube, and the like, even iGoogle, is just a click away.




2 comments