CHAPTER 16 WINDOWS AZURE 441 Table Storage Azure table storage is the third Azure storage option and allows you to store .NET objects (entities in Azure terminology) and access them in a manner compatible with WCF Data Services. Azure table storage also requires that your entities have three additional fields: • PartitionKey • RowKey • TimeStamp PartionKey and RowKey are combined as a composite key to uniquely identify a row, so it is important the combination of the two must be unique (Figure 16-20). The PartitionKey can be used by Azure to divide data up onto different servers for load-balancing purposes, while TimeStamp is used for conflict resolution. Figure 16-20. Visualization of an Azure table I think it’s fair to say that table storage is probably not the most intuitive technology ever invented, but it is very flexible and easy to use once you get over the initial, "What the heck is this?". Items stored in table storage are created as standard .NET classes that inherit from TableServiceEntity. Another context class that inherits from TableServiceContext is also created that is used to interact with table storage. This is actually simpler than it sounds, so let’s create an example of table storage now to save and retrieve a Film entity. 1. Create a new Cloud Service project called Chapter16.TableStorage, adding a single ASP.NET web role to it. 2. In the WebRole1 project add a reference to System.Data.Services.Client. 3. Open the ServiceDefinition.csdef file and add the following entry to the ConfigurationSettings section: <Setting name="DataConnectionString" /> 4. Open ServiceConfiguration.cscfg and add the following entry to ConfigurationSettings: <Setting name="DataConnectionString" value="UseDevelopmentStorage=true" /> CHAPTER 16 WINDOWS AZURE 442 5. Add a new class to the project called AzureDataServiceContext and add the following using directives: using Microsoft.WindowsAzure.StorageClient; using Microsoft.WindowsAzure; 6. Now enter the following code in AzureDataServiceContext.cs: public class AzureDataServiceContext : TableServiceContext { public AzureDataServiceContext(string baseAddress, StorageCredentials credentials) : base(baseAddress, credentials) { } public IQueryable<Film> FilmTable { get { return this.CreateQuery<Film>("Films"); } } } 7. Add a new class to the project called Film with the following using directive: using Microsoft.WindowsAzure.StorageClient; 8. Now add the following code to define the class: public class Film : TableServiceEntity { public int FilmID { get; set; } public string Title {get; set; } } 9. Open Default.aspx.cs and add the following using statements: using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.ServiceRuntime; using Microsoft.WindowsAzure.StorageClient; 10. Now enter the following code: CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) => { // Provide the configSetter with the initial value configSetter(RoleEnvironment.GetConfigurationSettingValue(configName)); }); var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString"); var tableStorage = storageAccount.CreateCloudTableClient(); tableStorage.CreateTableIfNotExist("Films"); CHAPTER 16 WINDOWS AZURE 443 AzureDataServiceContext svc = new AzureDataServiceContext(storageAccount.TableEndpoint.ToString(), storageAccount.Credentials); Film f1 = new Film(); f1.FilmID = 777; f1.Title = "Commando"; f1.Timestamp = System.DateTime.Now; f1.PartitionKey = "UK"; f1.RowKey = Guid.NewGuid().ToString(); svc.AddObject("Films", f1); svc.SaveChanges(); Film film = svc.FilmTable.Where(f => f.FilmID == 777).FirstOrDefault(); Response.Write(film.Title); 11. Press F5 to run your application and you should have the film title Commando printed out to the screen. Other Azure Services In addition to Windows Azure Services and SQL Azure, Microsoft offers a number of other services such as Microsoft.NET Services and Windows Live Services. Microsoft.NET Services Microsoft.NET Services is made up of a number of services aimed at providing integration and authentication: • Service Bus. The Service Bus is a message broker used for connecting applications across networks and through firewalls. • Access Control Service. This provides a centralized access control mechanism exposed as a web service. • WorkFlow Service (not currently available). The original previews of Windows Azure contained a workflow service, but this has since been removed. It is likely that at some point this will be re-introduced. Windows Live Services Windows Live Services is a collection of pretty much any other web-based service Microsoft has ever provided and is now held under the umbrella of Windows Live Services and accessed using the Live SDK. At the time of writing the SDK documentation and Azure site listed the following services (some of which are not yet complete): • Advertising • Alerts • Live Messenger • FeedSync CHAPTER 16 WINDOWS AZURE 444 • Live Search • Live Spaces • Media Streaming • Mesh • Photo gallery • Silverlight Streaming • User-Data Storage services • Writer • Virtual Earth and Geospatial services For more information please refer to http://msdn.microsoft.com/en-us/library/bb264574.aspx. Pricing and SLA Most cloud computing platforms only charge you for what you use, and Windows Azure is no exception. Microsoft says that free trials will be on offer for developers to experiment with Azure and preview accounts will be cancelled in January. Table 16-1 lists the prices. I've also included a brief summary of the current SLA agreement. Alan Dean (one of the organizers of the UK Alt Net conference and REST architecture expert) suggested to me this could lead to financial reviews being carried out on code (as if you didn’t have enough to worry about without accountants as well). For example, unnecessary use of ViewState could result in a big bill at the end of the month. Table 16-1. Summary of Windows Azure Pricing Servi ce Pricing Windows Azure Compute @ $0.12 / hour Storage @ $0.15 / GB stored Storage Transactions @ $0.01 / 10K Bandwidth $0.10 in / $0.15 out / GB SQL Azure Web Edition – Up to 1 GB relational database @ $9.99 Business Edition – Up to 10 GB relational database @ $99.99 Bandwidth – $0.10 in / $0.15 out / GB .NET Services Messages @ $0.15/100K message operations, including Service Bus messages and Access Control tokens All Bandwidth across all three services will be charged at $0.10 in / $0.15 out / GB Source: http://www.microsoft.com/azure/pricing.mspx CHAPTER 16 WINDOWS AZURE 445 Azure employs a pricing model similar to other cloud-computing suppliers such as Amazon. I was a little disappointed that Microsoft was not more innovative in this respect, and, as you can see, it could be quite tricky to work out how much your application will actually cost you (particularly with limited analysis support at present). The Windows Azure site lists the following regarding SLA agreement: “Windows Azure has separate SLAs for compute and storage. For compute, we guarantee that when you deploy two or more role instances in different fault and upgrade domains your Internet facing roles will have external connectivity at least 99.95% of the time. Additionally, we will monitor all of your individual role instances and guarantee that 99.9% of the time we will detect within two minutes when a role instance’s process is not running and initiate corrective action. For storage, we guarantee that at least 99.9% of the time we will successfully process correctly formatted requests that we receive to add, update, read and delete data. We also guarantee that your storage accounts will have connectivity to our Internet gateway.” http://www.microsoft.com/azure/pricing.mspx Real World Azure I talked to a couple of developers about their experience of working with Windows Azure: Ray Booysen http://vistasquad.co.uk/blogs/nondestructive/default.aspx Ray Booysen has developed two Windows Azure applications. The first is a proof of concept/ demonstration project to visually display how articles are linked in Wikipedia (http://www. dotnetsolutions.co.uk/evidence/wikiexplorer/, shown in Figure 16-21) and the second is an application for providing financial risk assessment. Ray had the following tips: • When working with Azure storage stop thinking normalization—this is not a normal database. • Carefully consider your partition and row keys as cross partition searching is very slow (in his Wikipedia explorer example the first letter of the article was used as the partition key). • Consider duplicating data for performance reasons. Ray felt that Azure could be improved by • Better logging and analytics • Performance counters and some kind of query analyzer for Azure table storage • Option to use the distributed cache system velocity CHAPTER 16 WINDOWS AZURE 446 Figure 16-21. DotNetSolutions Wikipedia explorer http://www.dotnetsolutions.co.uk/ evidence/wikiexplorer/ Rusty Johnson and Andy Britcliffe, SharpCloud (www.sharpcloud.com) SharpCloud is currently developing a Silverlight/Azure project risk assessment application (discussed in Chapter 15 as well). The application carries out many complex calculations (using Azure worker roles) and suggests the optimal project selection. Rusty and Andy had the following to say: • The move to Azure was very easy (previously they were using Amazon's cloud services). • Azure Table storage can take a bit of getting used to but is quite intuitive once you start using it. • Azure is about s scalabi lity n not perf orman ce —this is an important difference and you will have to do additional performance work. CHAPTER 16 WINDOWS AZURE 447 Advantages Here is a summary of the main advantages of Windows Azure and cloud computing: • Low entry cost and ability to quickly scale up your applications infrastructure for peaks of demand • No infrastructure expertise necessary—let Microsoft take care of this for you • Potentially cheaper than dedicated data center although a detailed analysis would be necessary to determine this • Greener computing • Allows you to utilize existing .NET skills • No hardware compatibility issues due to abstraction of hardware (although I would question how much of a problem this currently is) Disadvantages Here is a summary of the main disadvantages of Windows Azure and cloud computing: • Cloud computing has many potential security issues that may make it unsuitable for some applications. You can obviously not be sure who has access to data and cannot ensure true deletion. • There are governance/data protection issues with data being held around the world. Microsoft will in the future allow you to specify the hosting location. • Poor debugging and logging support for deployed applications • Untested compared to Google and Amazon’s offerings • Less control • Pricing could and likely will change over years. • How are you going to import large amounts of data? • Vendor lock in—although unlikely Microsoft could terminate service in the future; where would this leave you? • Learning curve • Note: With regard to security concerns, it is worth keeping an eye on developments in a field known as “Homomorphic encryption.” This could allow data to be encrypted in such a way that calculations can be conducted on it without un- encrypting it. Recently Craig Gentry at IBM made advances in this area: http://www.forbes.com/forbes/2009/0713/breakthroughs-privacy-super-secret- encryption.html CHAPTER 16 WINDOWS AZURE 448 Conclusion Windows Azure looks very promising but is currently hampered by poor logging and analytics. In time, however, these issues will no doubt be resolved. Microsoft has a big advantage over its competitors by integrating Azure into its development product portfolio, so expect to see Windows Azure becoming a major if not dominant player in the cloud computing sky. Further Reading • http://smarx.com/ • http://blogs.msdn.com/jnak/default.aspx • http://silverlightuk.blogspot.com/ We have covered a huge amount of technologies over the last 400 or so pages and it is my hope that I have given you a good overview of all the cool stuff that awaits you in VS2010 and .net4. It is very likely that you now have many more questions than before you started reading–great! Now that you have an overview of what’s new then it is up to you to explore VS2010 and .net4 further and hopefully share your experiences with the development community. Probably both the best and most annoying aspect of .net (and programming) is that it is continually evolving - you have to work hard to keep up to date but there is always more to learn to keep you interested. :-) . Servi ce Pricing Windows Azure Compute @ $0. 12 / hour Storage @ $0. 15 / GB stored Storage Transactions @ $0. 01 / 10K Bandwidth $0. 10 in / $0. 15 out / GB SQL Azure Web Edition – Up to 1. database @ $9.99 Business Edition – Up to 10 GB relational database @ $99.99 Bandwidth – $0. 10 in / $0. 15 out / GB .NET Services Messages @ $0. 15/ 100 K message operations, including Service Bus. of technologies over the last 40 0 or so pages and it is my hope that I have given you a good overview of all the cool stuff that awaits you in VS 201 0 and .net 4. It is very likely that you