Tải bản đầy đủ (.pdf) (8 trang)

Lập trình .net 4.0 và visual studio 2010 part 66 ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (302.38 KB, 8 trang )

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
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:

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



Real World Azure
I talked to a couple of developers about their experience of working with Windows Azure:
Ray Booysen

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
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:
/>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



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 .net 4.
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 .net 4
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. :-)

×