<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Buck Woody : Best Practices, Windows Azure, Cloud Computing</title><link>http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/Windows+Azure/Cloud+Computing/default.aspx</link><description>Tags: Best Practices, Windows Azure, Cloud Computing</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Book Review (Book 11) - Applied Architecture Patterns on the Microsoft Platform</title><link>http://sqlblog.com/blogs/buck_woody/archive/2012/05/15/book-review-book-11-applied-architecture-patterns-on-the-microsoft-platform.aspx</link><pubDate>Tue, 15 May 2012 16:50:34 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:43364</guid><dc:creator>BuckWoody</dc:creator><slash:comments>1</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/43364.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=43364</wfw:commentRss><description>&lt;p&gt;This is a continuation of the books I challenged myself to read to help my career - one a month, for year. &lt;a href="http://sqlblog.com/b/buckwoody/archive/2011/06/28/book-review-programming-windows-azure-by-siriram-krishnan.aspx"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#0066cc;"&gt;You can read my first book review here&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;, and &lt;a href="http://sqlblog.com/b/buckwoody/archive/2011/06/07/head-in-the-clouds-eyes-on-the-books.aspx" target="_blank"&gt;the entire list is here&lt;/a&gt;. The book I chose for April 2012 was: &lt;a href="http://www.amazon.com/Applied-Architecture-Patterns-Microsoft-Platform/dp/184968054X" target="_blank"&gt;Applied Architecture Patterns on the Microsoft Platform&lt;/a&gt;. I was traveling at the end of last month so I&amp;rsquo;m a bit late posting this review here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why I chose this book: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I actually know a few of the authors on this book, so when they told me about it I wanted to check it out. The premise of the book is exactly as it states in the title - to learn how to solve a problem using products from Microsoft.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What I learned:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I liked the book - a lot. They've arranged the content in a "Solution Decision Framework", that presents a few elements to help you identify a need and then propose alternate solutions to solve them, and then the rationale for the choice. But the payoff is that the authors then walk through the solution they implement and what they ran into doing it.&lt;/p&gt;
&lt;p&gt;I really liked this approach. It's not a huge book, but one I've referred to again since I've read it. It's fairly comprehensive, and includes server-oriented products, not things like Microsoft Office or other client-side tools. In fact, I would LOVE to have a work like this for Open Source and other vendors as well - would make for a&amp;nbsp;great library for a Systems Architect. This one is unashamedly aimed at the Microsoft products, and even if I didn't work here, I'd be fine with that. As I said, it would be interesting to see some books on other platforms like this, but I haven't run across something that presents other systems in quite this way.&lt;/p&gt;
&lt;p&gt;And that brings up an interesting point - This book is aimed at folks who create solutions within an organization. It's not aimed at Administrators, DBA's, Developers or the like, although I think all of those audiences could benefit from reading it. The solutions are made up, and not to a huge level of depth - nor should they be. It's a great exercise in thinking these kinds of things through in a structured way.&lt;/p&gt;
&lt;p&gt;The information is a bit dated, especially for Windows and SQL Azure. While the general concepts hold, the cloud platform from Microsoft is evolving so quickly that any printed book finds it hard to keep up with the improvements.&lt;/p&gt;
&lt;p&gt;I do have one quibble with the text - the chapters are a bit uneven. This is always a danger with multiple authors, but it shows up in a couple of chapters. I winced at one of the chapters that tried to take a more conversational, humorous style. This kind of academic work doesn't lend itself to that style.&lt;/p&gt;
&lt;p&gt;I recommend you get the book - and use it. I hope they keep it updated - I'll be a frequent customer. :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=43364" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Application+Architecture/default.aspx">Application Architecture</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Book+Review/default.aspx">Book Review</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Career/default.aspx">Career</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Concepts/default.aspx">Concepts</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Design/default.aspx">Design</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Tips/default.aspx">Tips</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Preparation is key to a successful cloud deployment</title><link>http://sqlblog.com/blogs/buck_woody/archive/2012/05/01/preparation-is-key-to-a-successful-cloud-deployment.aspx</link><pubDate>Tue, 01 May 2012 13:09:16 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:43122</guid><dc:creator>BuckWoody</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/43122.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=43122</wfw:commentRss><description>&lt;p&gt;If you want to be wise, watch the actions and outcomes of others. Emulate the successful actions, and avoid the actions that cause failure. That’s true in life in general - and in technology projects in specific.&amp;#160; &lt;/p&gt;  &lt;p&gt;I’ve worked with several clients who have created or migrated an application to “the cloud” - meaning using Microsoft Windows Azure or another provider. Although the statement in the title of this post is trite, I cannot over-emphasize how accurate it is. In every case of those who had a great experience with a distributed computing environment (which is thankfully the vast majority of my projects), &lt;/p&gt;  &lt;p&gt;What kind of preparation do you need to do? Here are some tips I’ve learned in the successful (and not-so-successful) deployments I’ve seen: &lt;/p&gt;  &lt;h3&gt;Follow standard recommendations for successful projects in general &lt;/h3&gt;  &lt;p&gt;You and your organization have probably done a few projects before - this one should have the same general attributes: a well-defined goal, a small, motivated team, a realistic timeline, and an adequate budget. I know, I know, you *never* seem to get those things - but if you don’t, you’ll fail. Simple as that. &lt;/p&gt;  &lt;h3&gt;Educate yourself&lt;/h3&gt;  &lt;p&gt;Computing technology started out on a single set of hardware for a single purpose - and realizing the limits of the hardware at hand, systems designers quickly realized that scale-out and virtualization was key. No, that’s not new - mainframes almost always worked on the concept of scale-out and virtual machines. But we switched in the 1980’s to single-user systems again, and we’ve been there ever since. By that I mean you install an OS on the things you work on. Now we move back to distributed system concepts, and there are some real differences. You’ll need to learn how those work, and do things a new way. Hey, we’re IT - we LOVE learning new things, right? &lt;/p&gt;  &lt;h3&gt;Get a partner if needed&lt;/h3&gt;  &lt;p&gt;There are a few of us white-haired Gandalf’s around that remember how to work in a distributed system, but if it’s new to you, that’s completely OK. You can save yourself a world of trouble by working with someone who’s done this before - a partner you hire, someone from Microsoft Consulting, whatever. &lt;/p&gt;  &lt;p&gt;And don’t forget support - who will handle each issue, what is the escalation model, who are your contacts at Microsoft, and what is your “light’s out” strategy?&lt;/p&gt;  &lt;p&gt;“A new broom sweeps clean”, the old adage goes, but the old brooms know where the dirt is. &lt;/p&gt;  &lt;h3&gt;Build a model&lt;/h3&gt;  &lt;p&gt;Take some time to do a Proof of Concept on your local system and using your Azure hours from your MSDN account if you have one. Going through this build - and being willing to throw it away and try it a different way - is invaluable. &lt;/p&gt;  &lt;h3&gt;Test your theories&lt;/h3&gt;  &lt;p&gt;Three statisticians are walking in a field. They see a rabbit - the first guy raises his gun, firing far in front of the rabbit. The second guy simultaneously raises his gun and fires far behind the rabbit. The third guy yells “We got him!”&lt;/p&gt;  &lt;p&gt;Not every theory is correct - not every attempt is the right one. Build in your success tests while you’re building your model. Then check them - don’t leave this step out. &lt;/p&gt;  &lt;h3&gt;Rinse, lather, repeat&lt;/h3&gt;  &lt;p&gt;This is advice from a shampoo bottle - which I’ve never used (I don’t really have that much hair - especially now). But in a “Cloud” project, it’s important. It’s an evolving system, that gains new improvements at an amazing rate. As soon as you deploy and stabilize you need to start the process over again. If you created your system in a Services model, with contracts for the APIs and abstracted code, this is far easier. &lt;/p&gt;  &lt;p&gt;It’s not hard to do a cloud project right. But it’s really simple to do it wrong. Follow these guidelines and you’ll learn from the successes - and mistakes - of others. &lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=43122" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Concepts/default.aspx">Concepts</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Customer+Contact/default.aspx">Customer Contact</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Design/default.aspx">Design</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Development/default.aspx">Development</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Planning/default.aspx">Planning</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Process/default.aspx">Process</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/SOA/default.aspx">SOA</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Tips/default.aspx">Tips</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Pay in the future should make you think in the present</title><link>http://sqlblog.com/blogs/buck_woody/archive/2012/04/10/pay-in-the-future-should-make-you-think-in-the-present.aspx</link><pubDate>Tue, 10 Apr 2012 13:53:50 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:42764</guid><dc:creator>BuckWoody</dc:creator><slash:comments>5</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/42764.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=42764</wfw:commentRss><description>&lt;p&gt;Distributed Computing - and more importantly “-as-a-Service” models of computing have a different cost model. This is something that sounds obvious on the surface but it’s often forgotten during the design and coding phase of a project. &lt;/p&gt;  &lt;p&gt;In on-premises computing, we’re used to purchasing a server and all of the hardware infrastructure and software licenses needed not only for one project, but several. This is an up-front or “sunk” cost that we consume by running code the organization needs to perform its function. Using a direct connection over wires you’ve already paid for, we don’t often have to think about bandwidth, hits on the data store or the amount of compute we use - we just know more is better. In a pay-as-you-go model, however, each of these architecture decisions has a potential cost impact. The amount of data you store, the number of times you access it, and the amount you send back all come with a charge. The offset is that you don’t buy anything at all up-front, so that sunk cost is freed up. And financial professionals know that money &lt;em&gt;now &lt;/em&gt;is worth more than money &lt;em&gt;later&lt;/em&gt;. Saving that up-front cost allows you to invest it in other things. &lt;/p&gt;  &lt;p&gt;It’s not just that you’re using things that now cost money - it’s that the design itself in distributed computing has a cost impact. That can be a really good thing, such as when you dynamically add capacity for paying customers. If you can tie back the cost of a series of clicks to what a user will pay to do so, you can set a profit margin that is easy to track. &lt;/p&gt;  &lt;p&gt;Here’s a case in point: Assume you are using a large instance in Windows Azure to compute some data that you retrieve from a SQL Azure database. If you don’t monitor the path of the application, you may not know what you are really using. Since you’re paying by the size of the instance, it’s best to maximize it all the time. Recently I evaluated just this situation, and found that downsizing the instance and adding another one where needed, adding a caching function to the application, moving part of the data into Windows Azure tables not only increased the speed of the application, but reduced the cost and more closely tied the cost to the profit. &lt;/p&gt;  &lt;p&gt;The key is this: from the very outset - the design - make sure you include metrics to measure for the cost/performance (sometimes these are the same) for your application. Windows Azure opens up awesome new ways of doing things, so make sure you study distributed systems architecture before you try and force in the application design you have on premises into your new application structure. &lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=42764" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Application+Architecture/default.aspx">Application Architecture</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Tips/default.aspx">Tips</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>“I could use a little help here” or “I can do it myself, thank you” for Cloud Projects</title><link>http://sqlblog.com/blogs/buck_woody/archive/2012/04/03/i-could-use-a-little-help-here-or-i-can-do-it-myself-thank-you-for-cloud-projects.aspx</link><pubDate>Tue, 03 Apr 2012 13:20:55 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:42665</guid><dc:creator>BuckWoody</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/42665.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=42665</wfw:commentRss><description>&lt;p&gt;Windows Azure allows you to write code in languages within the .NET stack, you can use Java, C++, PHP, NodeJS and others. Code is code - other than keeping things stateless, using a Web or Worker Role in Azure is not all that different from working with an on-premises system. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;However….&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Working in a scalable, component-based stateless architecture that can use federated security is not all that common for many developers. Some are used to owning the server, scaling up, and state-full paradigms that have a single security domain. Making the transition whilst trying to create a new software application or even port a previous one can be daunting. &lt;a href="http://blogs.msdn.com/b/buckwoody/archive/2010/11/16/windows-azure-learning-plan.aspx" target="_blank"&gt;Sure, we have absolutely tons of free training, kits, videos, online books and more to learn on your own&lt;/a&gt;, but some things like architecture can be pivotal as you move along. &lt;/p&gt;  &lt;p&gt;So the question is, should you just strike out on your own for a Cloud project, or get &lt;a href="http://www.microsoft.com/microsoftservices/en/us/journey_to_the_cloud.aspx" target="_blank"&gt;Microsoft Consulting Services&lt;/a&gt; or another partner to work with you on your first one? I use a few decision points to help guide the projects I assist in.&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font color="#c0504d"&gt;Note: I’m a huge fan of having help that ends up giving you training and leaves you in charge. If you do engage with someone to help you, make sure you keep this clear and take more and more ownership yourself as the project progresses.&lt;/font&gt;&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How much time do you have?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Usually the first thing I ask is about the timeline for the project. It doesn’t matter how skilled you are, if you have a short window to get things done it’s better to get help - especially if this is your first cloud project. Having someone that knows the platform well can save you amazing amounts of time. If you have longer, then start with the training in the link above and once you feel confident, jump in. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How complex is the project?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;I&lt;/strong&gt;f there are a lot of moving parts, it’s best to engage a partner. The reason is that certain interactions - particularly things like Service Bus or Data Integration&amp;#160; - can be quite different than what you may have encountered before. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How many people do you have?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I have a “pizza rule” about projects I’ve used in my career - if it takes over two pizzas to feed everyone on the project, it’s too big and will fail. &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/8780.wlEmoticon_2D00_smile_5F00_2.png" /&gt; That being said, one developer and a one-week deadline does not a good project make, usually. It’s best to have at least one architect (or someone in that role) guiding the project along, and at least two developers to work on a cloud project. That’s a generalization of course, since I’ve seen great software on Azure with one developer writing code all by herself, but for more complex projects, more (to a point) is better. The nice thing about bringing on a partner is that you don’t have to hire them full time - they help you and then they go away. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How critical is the project?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There’s no shame in using some help. If the platform is new, if the project is large and complex, and if it is critical to the business, you should engage a partner. That’s regardless of Cloud or anything else - get some help. You don’t want to hit your company’s bottom line in a negative way, but you have to innovate and get them a competitive advantage. Do your research, make sure the partner is qualified to help you, and get it done.&lt;/p&gt;  &lt;p&gt;Don’t let these questions scare you off. There are lots of projects you can implement on Windows and SQL Azure with nothing other than the Software Development Kit (SDK) that you get for free with Windows Azure. And assistance comes in many forms - sometimes just phone support, a friend you can ask. Microsoft Consulting Services or any of our great partners. You can get help on just the architecture piece or have them show you how to write the code. They’ll get involved as little or as much as you like. &lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=42665" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Career/default.aspx">Career</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Design/default.aspx">Design</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Help/default.aspx">Help</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Planning/default.aspx">Planning</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Tips/default.aspx">Tips</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Why do I need two Instances in Windows Azure?</title><link>http://sqlblog.com/blogs/buck_woody/archive/2012/03/20/why-do-i-need-two-roles-in-windows-azure.aspx</link><pubDate>Tue, 20 Mar 2012 13:23:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:42411</guid><dc:creator>BuckWoody</dc:creator><slash:comments>2</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/42411.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=42411</wfw:commentRss><description>&lt;div style="float:none;margin:0px;padding:4px 0px 4px 0px;" class="wlWriterHeaderFooter"&gt;&lt;/div&gt;
&lt;p&gt;Windows Azure as a Platform as a Service (PaaS) means that there are various components you can use in it to solve a problem:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Compute &amp;ldquo;Roles&amp;rdquo;&lt;/strong&gt; - Computers running an OS and optionally IIS - you can have more than one "Instance" of a given Role&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage&lt;/strong&gt; - Blobs, Tables and Queues for Storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Other Services&lt;/strong&gt; - Things like the Service Bus, Azure Connection Services, SQL Azure and Caching&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It&amp;rsquo;s important to understand that some of these services are &lt;em&gt;Stateless&lt;/em&gt; and others &lt;em&gt;maintain State&lt;/em&gt;. &lt;em&gt;Stateless &lt;/em&gt;means (at least in this case) that a system might disappear from one physical location and appear elsewhere. You can think of this as a cashier at the front of a store. If you&amp;rsquo;re in line, a cashier might take his break, and another person might replace him. As long as the order proceeds, you as the customer aren&amp;rsquo;t really affected except for the few seconds it takes to change them out. The cashier function in this example is stateless.&lt;/p&gt;
&lt;p&gt;The Compute Role Instances in Windows Azure are Stateless. To upgrade hardware, because of a fault or many other reasons, a Compute Role's Instance&amp;nbsp;might stop on one physical server, and another will pick it up. This is done through the controlling fabric that Windows Azure uses to manage the systems.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s important to note that storage in Azure &lt;em&gt;does &lt;/em&gt;maintain State. Your data will not simply disappear - it is maintained - in fact, it&amp;rsquo;s maintained three times in a single datacenter and all those copies are replicated to another for safety. Going back to our example, storage is similar to the cash register itself. Even though a cashier leaves, the record of your payment is maintained.&lt;/p&gt;
&lt;p&gt;So if a Compute Role Instance can disappear and re-appear, the things running on that first Instance would stop working. If you wrote your code in a Stateless way, then another Role Instance simply re-starts that transaction and keeps working, just like the other cashier in the example.&lt;/p&gt;
&lt;p&gt;But if you only have one Instance of a Role, then when the Role Instance is re-started, or when you need to upgrade your own code, you can face downtime, since there&amp;rsquo;s only one. That means you should deploy at least two of each Role Instance not only for scale to handle load, but so that the first &amp;ldquo;cashier&amp;rdquo; has someone to replace them when they disappear. It&amp;rsquo;s not just a good idea - to gain the Service Level Agreement (SLA) for our uptime in Azure it&amp;rsquo;s a requirement. We point this out right in the Management Portal when you deploy the application:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sqlblog.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/2703.Uptime1_5F00_2.jpg"&gt;&lt;img style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border:0px;" title="Uptime1" border="0" alt="Uptime1" src="http://sqlblog.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/7180.Uptime1_5F00_thumb.jpg" width="587" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Click to enlarge)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When you deploy a Role Instance you can also set the &amp;ldquo;Upgrade Domain&amp;rdquo;. Placing Roles on separate Upgrade Domains means that you have a continuous service whenever you upgrade&amp;nbsp;(more on upgrades in another post) - the process looks like this for two Roles. This example covers the scenario for upgrade, so you have four roles total&amp;nbsp;- One Web and one Worker running the "older" code, and one of each running the new code. In all those Roles you want at least two instances, and this example shows that you're covered for High Availability and upgrade paths:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://i.msdn.microsoft.com/dynimg/IC345880.png" /&gt;&lt;/p&gt;
&lt;p&gt;The take-away is this - always plan for forward-facing Roles to have at least two copies. For Worker Roles that do background processing, there are ways to architect around this number, but it does affect the SLA if you have only one.&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=42411" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Compute/default.aspx">Compute</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Concepts/default.aspx">Concepts</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Web/default.aspx">Web</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Application Lifecycle Management Overview for Windows Azure</title><link>http://sqlblog.com/blogs/buck_woody/archive/2012/02/07/application-lifecycle-management-overview-for-windows-azure.aspx</link><pubDate>Tue, 07 Feb 2012 14:58:39 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:41593</guid><dc:creator>BuckWoody</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/41593.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=41593</wfw:commentRss><description>&lt;p&gt;Developing in Windows Azure is at once not that much different from what you’re familiar with in on-premises systems, and different in significant ways. Because of these differences, developers often ask about the specific process to develop and deploy a Windows Azure application - more formally called an Application Lifecycle Management, or ALM. &lt;/p&gt;  &lt;p&gt;There are specific resources you can use to learn more about various parts of ALM - I’ve referenced those at the end of this post. But ALM has multiple definitions, from the governance of code injection, domain upgrade, testing, process flow and more. Many developers are interested in the finer-grained information, like how do I develop and deploy an application? What tools do I need, and how do I get the code running somewhere that I can test? &lt;/p&gt;  &lt;p&gt;I’ll cover the very high-level process here, and refer you to specifics at the end of each section, so that you can take it all in at one viewing, and then bookmark for more detail when you need more information. I won’t be covering processes like Continuous Integration or Agile and other methodologies in this post - I’ll blog those later. &lt;/p&gt;  &lt;h2&gt;Initial Development&lt;/h2&gt;  &lt;p&gt;You start with writing code. You have three ways to do this. You can use Visual Studio (even the Express Edition Works), Eclipse, or by &lt;a href="https://www.ibm.com/developerworks/webservices/library/ws-restful/" target="_blank"&gt;leveraging the REST API format&lt;/a&gt;. You can do this in a standalone (non-connected) environment like your laptop. &lt;/p&gt;  &lt;p align="left"&gt;Using Visual Studio is one of the simplest methods to create an Azure application, allowing you to combine the Azure components you want to leverage (Storage, Compute, SQL Azure, the Service Bus, etc.) along with the on-premises code you have now or are creating. Once you’ve installed and patched Visual Studio, just download and install the Windows Azure Software Development Kit (SDK) and you’ll have not only all the API’s you need to talk to Azure, but a fully functioning local environment to run and test your code before you deploy it. You’ll also get a robust set of samples. You can download what you need for all of that (free) here: &lt;a href="http://www.windowsazure.com/en-us/develop/downloads/"&gt;http://www.windowsazure.com/en-us/develop/downloads/&lt;/a&gt; . There’s a step-by-step process here: &lt;a href="http://msdn.microsoft.com/en-us/magazine/ee336122.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;http://msdn.microsoft.com/en-us/magazine/ee336122.aspx&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can also use Eclipse to develop for Windows Azure. You won’t get the full runtime environment in just that kit alone, but you can use this successfully on a Linux system. I have several folks using this method. The downloads and documentation for that is here: &lt;a href="http://www.windowsazure4e.org/"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;http://www.windowsazure4e.org/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You can use REST API’s to hit Azure Assets and control them. Not my preferred method, but possible. There are REST API’s for various sections of Azure. You can find the main reference for that here: &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ff800682.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/ff800682.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font color="#9bbb59"&gt;&lt;font color="#c0504d"&gt;&lt;strong&gt;&lt;em&gt;Note: &lt;/em&gt;&lt;/strong&gt;We recently demonstrated using a Cloud-based Integrated Development Environment (IDE) for Node.js deployment to Windows Azure. More on that here:&lt;/font&gt; &lt;/font&gt;&lt;a href="http://www.readwriteweb.com/cloud/2012/01/cloud9-ide-to-enable-nodejs-ap.php"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;http://www.readwriteweb.com/cloud/2012/01/cloud9-ide-to-enable-nodejs-ap.php&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Deploying to a Test Instance&lt;/h2&gt;  &lt;p&gt;After you write the code, you’ll need to test it somewhere. The Azure Emulator on your development laptop is for a single user on that laptop, and it also has some subtle differences from the production fabric as you might imagine. Normally you’ll set up a small subscription to run and test the application, just like you would have a set of test servers. Each subscription has its own management keys and certificates, so this assists in keeping the testing environment separate for billing and control. &lt;/p&gt;  &lt;p&gt;More on that general information here: &lt;a href="http://msdn.microsoft.com/en-us/library/ff803362.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff803362.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Deploying to Production&lt;/h2&gt;  &lt;p&gt;Once you have developed the code and tested it, you need to move it to a location where users can access it. In reality, there is no physical difference in the type of machines, fabric or any other component in “Production” Windows Azure accounts and the “Test” accounts, but you’ll most often pick smaller systems to deploy on in testing, and you’ll probably keep the URL in the plain format.&lt;/p&gt;  &lt;p&gt;In the Production Windows Azure account, the team normally limits the access to the account for deployment to a separate set of developers. This ensures code flow and control. A DNS name is normally mapped to the longer, Microsoft-generated URL so that your users access the application or data the way you want them to. &lt;/p&gt;  &lt;p&gt;More on setting up an account here: &lt;a href="http://techinch.com/2010/06/14/setup-your-windows-azure-account/"&gt;http://techinch.com/2010/06/14/setup-your-windows-azure-account/&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Managing Code Change&lt;/h2&gt;  &lt;p&gt;With the application deployed, there are two broad tasks you need to consider. One is managing changes through the application, and the other involves management, monitoring and performance tuning for an application.&lt;/p&gt;  &lt;p&gt;To make a code change, the standard ALM process is followed, just as above. You can use command-line tools to automate the process as you would with an on-premises system. A vide on that shows you how: &lt;a href="http://www.microsoftpdc.com/2009/SVC25"&gt;http://www.microsoftpdc.com/2009/SVC25&lt;/a&gt;. Normally this is used with an “In-Place” upgrade into Production Account, since your testing is completed in a separate account. More on that process here: &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee517255.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/ee517255.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;One difference is the “VIP Swap” process you can use for the final push to Production. In essence, this allows you to have two copies of the application running on the Production account, with a quick way to cut over and back when you’re ready. The process for that is detailed here: &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee517253.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/ee517253.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For monitoring, you have several options. You should enable the Windows Azure Diagnostics in your code - more on that here: &lt;a href="http://archive.msdn.microsoft.com/WADiagnostics"&gt;http://archive.msdn.microsoft.com/WADiagnostics&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;You can observe uptime and other information on the Windows Azure Service Dashboard, where you can also consume the uptime as an RSS feed: &lt;a href="http://www.windowsazure.com/en-us/support/service-dashboard/"&gt;http://www.windowsazure.com/en-us/support/service-dashboard/&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;From there, you can also use System Center to monitor not only Windows Azure deployments but internal applications as well. The Management Pack and documentation for that is here: &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=11324"&gt;http://www.microsoft.com/download/en/details.aspx?id=11324&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;There are also 3rd-party tools to manage Windows Azure. More on that here: &lt;a href="http://www.bing.com/search?q=monitor+Windows+Azure&amp;amp;form=OSDSRC"&gt;http://www.bing.com/search?q=monitor+Windows+Azure&amp;amp;form=OSDSRC&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Other References: &lt;/h3&gt;  &lt;p&gt;There is a lot more detail in this official reference: &lt;a href="https://www.windowsazure.com/en-us/develop/net/fundamentals/deploying-applications/"&gt;https://www.windowsazure.com/en-us/develop/net/fundamentals/deploying-applications/&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bryan Group explains the ramifications of the Secure Development Lifecycle (SDL) with lots of collateral you can review: &lt;a href="http://blogs.msdn.com/b/bryang/archive/2011/04/26/applying-the-sdl-to-windows-azure.aspx"&gt;http://blogs.msdn.com/b/bryang/archive/2011/04/26/applying-the-sdl-to-windows-azure.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=41593" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Application+Architecture/default.aspx">Application Architecture</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Concepts/default.aspx">Concepts</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Design/default.aspx">Design</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Developer/default.aspx">Developer</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Development/default.aspx">Development</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Links/default.aspx">Links</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Planning/default.aspx">Planning</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Process/default.aspx">Process</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/System+Center+Operations+Manager/default.aspx">System Center Operations Manager</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Tips/default.aspx">Tips</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Rip and Replace or Extend and Embrace?</title><link>http://sqlblog.com/blogs/buck_woody/archive/2011/09/13/rip-and-replace-or-extend-and-embrace.aspx</link><pubDate>Tue, 13 Sep 2011 11:20:05 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:38437</guid><dc:creator>BuckWoody</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/38437.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=38437</wfw:commentRss><description>&lt;p&gt;As most of you know, I don&amp;rsquo;t like the term &amp;ldquo;cloud&amp;rdquo; very&lt;br /&gt;much. It isn&amp;rsquo;t defined, which means it can be anything. I prefer &amp;ldquo;distributed&lt;br /&gt;computing&amp;rdquo;, which is more technically accurate and describes what you&amp;rsquo;re doing&lt;br /&gt;in more concrete terms.&lt;/p&gt;
&lt;p&gt;So when you think about Windows and SQL Azure, you don&amp;rsquo;t&lt;br /&gt;have to think about an entire product &amp;ndash; you can use parts of the system&lt;br /&gt;together or independently to accomplish what you need to do. You can use the&lt;br /&gt;computing functions, storage, and more and more I see folks leverage the&lt;br /&gt;Service Bus to enable current applications to expose things to the web.&lt;/p&gt;
&lt;p&gt;And that brings up the point of this post. Once you decide&lt;br /&gt;that a distributed architecture works to solve a problem, you&amp;rsquo;re faced with a&lt;br /&gt;decision: should you completely re-write your architecture to take advantage of&lt;br /&gt;the current systems or should you just fold in new code that makes the data or&lt;br /&gt;function available to the web?&lt;/p&gt;
&lt;p&gt;Of course, the answer is always &amp;ldquo;it depends&amp;rdquo; on the situation&lt;br /&gt;&amp;ndash; and it does. But unless you&amp;rsquo;re fixing a problem with current code, I usually&lt;br /&gt;advocate a migration approach. That means at the very least retaining the&lt;br /&gt;business logic (again, unless it&amp;rsquo;s not currently working) and as much of the&lt;br /&gt;code as you can. In fact, if you follow this paradigm, you&amp;rsquo;re on your way to&lt;br /&gt;making a Service Bus out of the functions you currently have. You can expose&lt;br /&gt;the results of a system rather than opening the system up. Let&amp;rsquo;s take an&lt;br /&gt;example.&lt;/p&gt;
&lt;p&gt;Assume for a moment that you have an order-taking system&lt;br /&gt;on-premise. That system performs many functions, one of which might creating a&lt;br /&gt;Purchase Order. Your system might be enclosed, meaning that it has an&lt;br /&gt;application that talks to a middle-tier, and then from there to a database&lt;br /&gt;system. A query is generated from a screen, and passed along to eventually&lt;br /&gt;compute, store and return a Purchase Order Number, along with other&lt;br /&gt;information. Imagine now that you wire up the code not only to return the PO&lt;br /&gt;number to the client, but to make that number available on an endpoint &amp;ndash;&lt;br /&gt;actually really not that hard to do.&lt;/p&gt;
&lt;p&gt;Now you can make that PO number available to the web using&lt;br /&gt;Azure. You could restrict who can make that call to the system, or open it up&lt;br /&gt;to a broader audience. Or instead of the PO Number, you could make a product&lt;br /&gt;list available. And you can go further than that &amp;ndash; EBay, for instance, uses the&lt;br /&gt;OData protocol (which is very cool in and of itself) which you can query from&lt;br /&gt;the web. You could compare your company&amp;rsquo;s product catalog to what is on EBay,&lt;br /&gt;and list the items you have there if there are no competitors in that space.&lt;br /&gt;And on and on it goes.&lt;/p&gt;
&lt;p&gt;So the point is this &amp;ndash; where you can, retain what works.&lt;br /&gt;Fold in systems like Azure where they make sense. Extend and Embrace.&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=38437" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Application+Architecture/default.aspx">Application Architecture</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Application+Fabric/default.aspx">Application Fabric</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure+Use+Cases/default.aspx">Azure Use Cases</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Computing/default.aspx">Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Data/default.aspx">Data</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Design/default.aspx">Design</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Developer/default.aspx">Developer</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Development/default.aspx">Development</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Plan for Diagnostics in Cloud Computing From the Git-Go</title><link>http://sqlblog.com/blogs/buck_woody/archive/2011/09/06/plan-for-diagnostics-in-cloud-computing-from-the-git-go.aspx</link><pubDate>Tue, 06 Sep 2011 13:11:22 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:38295</guid><dc:creator>BuckWoody</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/38295.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=38295</wfw:commentRss><description>&lt;p&gt;“Git-Go” is something we say in the South that means “right at the start”. I’ve seen several applications for on-premise systems that don’t have much in the way of diagnostics - the developers rely on a debugger, the event logs on the server and client workstation, and most of all, the ability to watch the system from end-to-end. &lt;/p&gt;  &lt;p&gt;This approach is a mistake for an on-premise system, and it’s definitely a problem for a distributed architecture. You simply do not own all of the components from end to end in a cloud environment, nor are you always able to attach a debugger or other remote monitoring tools to the various areas within the code path. So you need to make sure that from the very outset of your design that you build in diagnostics. My personal preference is to build a system such that a control file turns on deeper information gathering from the system, up to a minimal level.&lt;/p&gt;  &lt;p&gt;When I do that, I set a high level of logging, a medium level, and a moderate level. I normally use the deepest level of information during the testing and acceptance phase of the deployment, then switch to moderate and then the least level of information gathering. Also in my design I often set an error condition to begin gathering the deeper information along with the exception, where possible.&lt;/p&gt;  &lt;p&gt;There are decisions you need to make as to where to store the diagnostics (many operations in the cloud cost money), how often you collect them, and so on. You can get a quick overview on using the diagnostics that come with Windows Azure here: &lt;a href="http://www.azuresupport.com/2010/03/getting-started-with-windows-azure-diagnostics-and-monitoring/"&gt;http://www.azuresupport.com/2010/03/getting-started-with-windows-azure-diagnostics-and-monitoring/&lt;/a&gt; This is where you should start first. More detail on that: &lt;a href="http://msdn.microsoft.com/en-us/library/gg433048.aspx"&gt;http://msdn.microsoft.com/en-us/library/gg433048.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;My friend Dave Pallman has a great tool he’s released for free: &lt;a href="http://davidpallmann.blogspot.com/2009/03/azure-application-monitor-now-on.html"&gt;http://davidpallmann.blogspot.com/2009/03/azure-application-monitor-now-on.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If the issue is in storage apps: &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/d84ba34b-b0e0-4961-a167-bbe7618beb83"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/d84ba34b-b0e0-4961-a167-bbe7618beb83&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you have System Center, this is the quickest and easiest way to implement the monitoring – really handy: &lt;a href="http://pinpoint.microsoft.com/en-us/applications/windows-azure-application-monitoring-management-pack-release-candidate-12884907699"&gt;http://pinpoint.microsoft.com/en-us/applications/windows-azure-application-monitoring-management-pack-release-candidate-12884907699&lt;/a&gt;&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=38295" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Concepts/default.aspx">Concepts</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Design/default.aspx">Design</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Developer/default.aspx">Developer</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Development/default.aspx">Development</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Error+Codes/default.aspx">Error Codes</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Link+Lists/default.aspx">Link Lists</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Monitoring/default.aspx">Monitoring</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Testing/default.aspx">Testing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Should All Data Be Encrypted By Default?</title><link>http://sqlblog.com/blogs/buck_woody/archive/2011/08/09/should-all-data-be-encrypted-by-default.aspx</link><pubDate>Tue, 09 Aug 2011 13:45:04 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:37638</guid><dc:creator>BuckWoody</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/37638.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=37638</wfw:commentRss><description>&lt;p&gt;Recently several IT industry information outlets have reported that there has been a 10-year concentrated, organized effort on breaking through computer security at some of the largest companies in the world. Government sites have also been attacked in multiple countries. Add to this the regular loss of data by banking and other industries, and the fear of “the cloud” as a storage location, and it seems to beg the question asked in the title in this post: “should all data, everywhere, be encrypted by default?” &lt;/p&gt;  &lt;p&gt;If you’re new to encryption, there’s an excellent video and overview here: &lt;a href="http://blogs.msdn.com/b/plankytronixx/archive/2010/10/23/crypto-primer-understanding-encryption-public-private-key-signatures-and-certificates.aspx"&gt;http://blogs.msdn.com/b/plankytronixx/archive/2010/10/23/crypto-primer-understanding-encryption-public-private-key-signatures-and-certificates.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If all data were encrypted, the break-in to websites would still continue, but the value would be lessened for some types of “orthogonal” attacks that only seek the pure stream of data. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Data States&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Computing has two major components - static program elements and data. The program doesn’t change (until it is updated, of course) over the course of a transaction between a user and the ultimate data store. Data is classified as anything that is manipulated by the program. That implies three states of the data interchange: Creation, Transmission, and Storage. In on-premise systems, many times none of these states are encrypted. The entire system from user to data store is viewed as “secure”, which of course evidence has proved it is not. In some cases, even laptops are viewed as part of an on-premise system, and so is left unprotected. If all data were treated as “publicly viewable”, that mindset would lead to encrypting the data at all states, even for on-premise systems.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Creation&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;In this phase, a user, device or other input program creates data to send to the program. This can be entries on a web form, input from a weather sensor, or one service (program) sending information to another service. There are multiple ways to encrypt data at this state, most notably using client-side libraries such as the Windows Crypto API, hardware encryption and others. The reference for the Crypto API is here: &lt;a href="http://msdn.microsoft.com/en-us/library/ms867086.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms867086.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Transmission&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;After the data is created, it needs to be transmitted to the processing and storage system. the references above explain how to secure the communications channel between the client systems and the various components used within the system. In the case of Windows Azure, the session can be protected with a secure session, and all communications within the Azure datacenters are encrypted. The key is that the transmission of data, regardless of method, should be considered to be “in the clear”, and treated as such. Without the decryption algorithm, it’s much harder to get to the ultimate goal. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Storage (data at rest) &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;It follows that f the data is encrypted at the source, and the decryption method is retained only with the code that processes the data, then the data “at rest” if obtained is less accessible. If the data is not encrypted at the source, then this step should be put into place at a minimum. In many cloud systems, including Windows and SQL Azure, the data is not encrypted at rest. There are various reasons for this, including performance, physical and logical security already in place, and the fact that the encryption process would expose customer data to the provider while it is being encrypted. In this case, the key is to encrypt the data before it is transmitted and stored, so that it is encrypted ahead of time. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Considerations&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Encrypting data is a separate process, and must be factored into the original codebase. This means additional effort, and more CPU power for the encryption process (although many systems have security hardware included which help with this) and of course protecting the keys. If the keys are accessed, the data is considered unencrypted from then on, and all previous encryption with that particular key is now vulnerable. Key rotation and protection is essential. Even so, the benefits of treating all data as being at risk outweighs the efforts.&lt;/p&gt;  &lt;p&gt;You can learn more about general encryption here: &lt;a href="http://msdn.microsoft.com/en-us/library/aa380255(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa380255(VS.85).aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=37638" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Data/default.aspx">Data</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Encryption/default.aspx">Encryption</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Security/default.aspx">Security</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Windows Azure Security Review</title><link>http://sqlblog.com/blogs/buck_woody/archive/2011/08/02/windows-azure-security-review.aspx</link><pubDate>Tue, 02 Aug 2011 13:24:50 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:37432</guid><dc:creator>BuckWoody</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/37432.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=37432</wfw:commentRss><description>&lt;p&gt;&lt;em&gt;&lt;font color="#d19049"&gt;Current as of 08/01/2011 - Check the Resources listed below for more up-to-date information on this topic&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Background:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Security for any computing platform involves three primary areas:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;font color="#ff0000"&gt;Principals&lt;/font&gt; (users or programmatic access to an asset or other program) &lt;/li&gt;    &lt;li&gt;&lt;font color="#ff0000"&gt;Securables&lt;/font&gt; (objects, data or programs that can be accessed) &lt;/li&gt;    &lt;li&gt;&lt;font color="#ff0000"&gt;Channels&lt;/font&gt; (methods of access by Principals to Securables) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;On-premise systems normally use a central system to control security. In a Windows operating system-based environment, this is &lt;a href="http://technet.microsoft.com/en-us/library/cc758436(WS.10).aspx" target="_blank"&gt;often accomplished with Active Directory&lt;/a&gt; or other systems that&amp;#160; provide sign-on and user identity information. While other networking security paradigms have different terminology, all involve the three areas defined above. &lt;/p&gt;  &lt;p&gt;In addition to the names and passwords for a user, Active Directory (like other security mechanisms) store other information about Principals - called &lt;em&gt;&lt;a href="http://claimsid.codeplex.com/" target="_blank"&gt;Claims&lt;/a&gt;&lt;/em&gt;. These claims can include any custom fields the provider allows. In many networks, these fields are not used heavily, because applications that eventually need to secure the assets they control are not always deployed on the same platforms everywhere. &lt;/p&gt;  &lt;p&gt;In a single environment, security is often quite simple. A Principal is created such as a user or group, and then the Principal is granted access to a Securable such as a a folder, database or other asset. Permissions or Rights (or both) combine to allow a particular Principal to read, write, delete or edit data, or to access or run a particular program.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/3324.Figure1_5F00_2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Figure1" border="0" alt="Figure1" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/5140.Figure1_5F00_thumb.png" width="549" height="398" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#008000"&gt;Figure 1 - On-premise security environment example&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The simplicity of this arrangement is due to a single, homogenous boundary. Even if more than one location is used, the Principals and Securables are grouped into a single logical boundary that is managed from one location. &lt;/p&gt;  &lt;p&gt;This background serves as the starting point for the Federating Security topic below.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows Azure Security Boundaries&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Windows Azure is a series of resources - servers, data and service buses, in addition to other features. Developers write code, and the deploy that to the Azure environment. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/1665.Figure2a_5F00_2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Figure2a" border="0" alt="Figure2a" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/3480.Figure2a_5F00_thumb.png" width="702" height="471" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#008000"&gt;Figure 2 - Azure Components&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The code or data can be deployed to use one or more of the services. In other words, the &lt;a href="http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/how-to-combine-worker-and-web-role-in.html" target="_blank"&gt;Web Role in Windows Azure might host a simple website&lt;/a&gt;, and no other component need be used. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/4073.Figure2_5F00_2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Figure2" border="0" alt="Figure2" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/1258.Figure2_5F00_thumb.png" width="737" height="252" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#008000"&gt;Figure 3 - Simple Azure Web Role Application - only one feature used&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Or, &lt;a href="http://blogs.msdn.com/b/buckwoody/archive/2011/02/22/windows-azure-use-case-hybrid-applications.aspx" target="_blank"&gt;a complex mix of Web, Worker and Data Services, along with a Service Bus, RDBS and even on-site systems&lt;/a&gt; can be grouped into a much larger program. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/6136.Figure4_5F00_2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Figure4" border="0" alt="Figure4" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/4863.Figure4_5F00_thumb.png" width="735" height="456" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#008000"&gt;Figure 4 - Complex Windows and SQL Azure Application With Multiple Interactions&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;For a more basic introduction to Windows and SQL Azure, see this link: &lt;a href="http://channel9.msdn.com/Events/TechEd/Europe/2010/COS322"&gt;http://channel9.msdn.com/Events/TechEd/Europe/2010/COS322&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Windows Azure, like any web-based property, has three general layers of security:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;font color="#ff0000"&gt;Physical Access&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font color="#ff0000"&gt;Operating Environment (Including the Operating System itself)&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font color="#ff0000"&gt;Data and Programmatic Security&lt;/font&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Each of these layers have additional layers within themselves, and this forms the basis of a secure experience for the end user or program. Some of these layers are the responsibility of Microsoft; others are the responsibility of the architect and developer; others are a joint or shared responsibility of both Microsoft and the client.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#0000ff"&gt;Layer One: Physical Access&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The first layer of security within a web property such as Windows or SQL Azure is a secure facility. the following data points are important to understand for the worldwide facilities that host Windows and SQL Azure:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Microsoft Global Foundation Services (GFS) is responsible for the physical security of the datacenters located worldwide for Windows and SQL Azure. Information on Microsoft datacenters can be found here:&amp;#160; &lt;a href="http://www.globalfoundationservices.com/"&gt;http://www.globalfoundationservices.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;The address and exact locations facilities are not commonly documented for security reasons. &lt;/li&gt;    &lt;li&gt;Microsoft runs it’s own data centers and does not contract this function out. &lt;/li&gt;    &lt;li&gt;The GFS controlled facilities hold an ISO/IEC 27001:2005 certification, and are audited to SAS level II. &lt;/li&gt;    &lt;li&gt;Standard secure operations protocols are in place, including least-privilege access. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#0000ff"&gt;Layer Two: Operating Environment&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Windows Azure and SQL Azure do not currently hold certifications. Microsoft does not comment on the security certifications being pursued for Windows or SQL Azure. That being said, the Windows Azure environment is based on a modified Windows 2008 R2 Enterprise environment, developed using the Trustworthy Computing Initiative (TCI). &lt;/p&gt;  &lt;p&gt;The system controlling the host machines and their guest environments that ultimately hold the Web and Worker Roles within Windows Azure is called the Fabric - not to be confused with the Application Fabric feature. The Fabric is not accessible by client code - it controls the inner workings of Windows Azure, including Load-balancing, system restarts, maintenance and monitoring. &lt;/p&gt;  &lt;p&gt;Within the host machines that house the Web and Worker Roles, special networking constructs broker all conversations between Virtual Machines. Virtual Machines - even ones configured to communicate with each other - move through this network. Direct-machine to machine communication is not allowed, protecting one application from another or one data construct from another.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/8015.Figure5_5F00_2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Figure5" border="0" alt="Figure5" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/8182.Figure5_5F00_thumb.png" width="720" height="351" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#008000"&gt;Figure 5 - Windows Azure Fabric&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Windows and SQL Azure support only TCP-based communications. Ports commonly used are:&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;80 - Default public port used for Web Roles - can be enabled/disabled per configuration &lt;/li&gt;    &lt;li&gt;443 - Default secure port used for Web roles - &lt;a href="http://msdn.microsoft.com/en-us/gg271302" target="_blank"&gt;can be enabled/disabled per configuration&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;9350-9353 - These ports are used by the Windows Azure AppFabric service bus bindings. Refer to &lt;a href="http://msdn.microsoft.com/en-us/library/ee732535.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee732535.aspx&lt;/a&gt; for more details &lt;/li&gt;    &lt;li&gt;1433 - SQL Azure &lt;/li&gt;    &lt;li&gt;3389 - This port is used for RDP access to VM-based roles, only if enabled &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#0000ff"&gt;Layer Three: Data and Programmatic Security&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;All internal access through use of keys only. Without the proper key, code or data will not transfer. Storage Accounts have individual keys, so in this manner different security layers may be applied not only programmatically but at the account layer. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/6840.Figure6_5F00_2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Figure6" border="0" alt="Figure6" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/4370.Figure6_5F00_thumb.png" width="703" height="290" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#008000"&gt;Figure 6 - Windows Azure communications between components&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Calls to Windows Azure are made using standard SOAP, XML or REST-based protocols. The communications channel can be encrypted between the client and Windows Azure or allow it to remain unencrypted based on security needs. &lt;/p&gt;  &lt;p&gt;SQL Azure uses the standard SQL Server Tabular Data Stream (TDS) protocol, but only allows encrypted communications.&lt;/p&gt;  &lt;p&gt;Data is unencrypted within Windows Azure Blob or Table Storage - but is only accessible via the key for a storage account. &lt;a href="http://blogs.msdn.com/b/plankytronixx/archive/2010/10/23/crypto-primer-understanding-encryption-public-private-key-signatures-and-certificates.aspx" target="_blank"&gt;Data can be encrypted client-side and stored in Windows Azure in an encrypted fashion&lt;/a&gt;. Microsoft does not inspect internal data for validity or encryption enforcement.&amp;#160; The key is that the data is client-side encrypted and decrypted.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/8203.Figure7_5F00_2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Figure7" border="0" alt="Figure7" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/4466.Figure7_5F00_thumb.png" width="702" height="307" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#008000"&gt;Figure 7 - Example data at rest encryption scenario &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Alternatively, a hybrid solution can store sensitive data locally and non-sensitive data in Azure Storage. The data can be coalesced at the client level such that the data is never transferred over any channel not owned or controlled by the organization.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Federating Security:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In the case of a single security boundary for Windows Azure, multiple security options are available. Users can be anonymously authorized, such as in the case of a public website for advertisement or informational purposes. &lt;/p&gt;  &lt;p&gt;Another option is to create an Internet Information Services (IIS) Internal Security Store. This is not a best-practice (although still possible) approach since the Fabric services within Windows Azure may recycle an instance and the session may sever between a given role and a client. Architecting stateless applications is a preferred approach.&lt;/p&gt;  &lt;p&gt;Using Claims-Based Authentication is a better solution. In this approach, the Principal is authenticated through a trusted party, such as Active Directory, OpenID, OpenAuthentication, or LiveID. Many web-properties use these methods, such as Microsoft, Google, Yahoo and Facebook to name a few. After authenticating with one of these services, the client is issued Claims using the WS-Federation (WS-Fed) or Security Assertion Markup Language (SAML)&amp;#160; that are passed to Windows Azure. At no time does Windows Azure store, transfer or interrogate the Principal’s security token. Claims can be anything from a group or role membership to location or any other settable attribute. Assets are then secured allowing only the Claim, without regard to the user’s location or access method. In this fashion a single security paradigm covers the Securables, with the Principals being controlled in any number of other mechanisms. This allows single-sign-on and/or federated security access from multiple providers. &lt;/p&gt;  &lt;p&gt;The simplest mechanism for building this environment is the Access Control Services (ACS) feature found in the Windows Azure Application Fabric component. It is a federated authorization management service that simplifies user access authorization across organizations and ID providers and performs claims transformation to map identities with access levels.&lt;/p&gt;  &lt;p&gt;ACS can:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create and manage scopes such as URLs &lt;/li&gt;    &lt;li&gt;Create and manage claim types &lt;/li&gt;    &lt;li&gt;Create and manage signing and encryption keys &lt;/li&gt;    &lt;li&gt;Create and manage rules within an application scope &lt;/li&gt;    &lt;li&gt;Chain claims rules &lt;/li&gt;    &lt;li&gt;Manage permissions on scopes or perform delegation &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/2728.Figure8_5F00_2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Figure8" border="0" alt="Figure8" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-79-79-metablogapi/5852.Figure8_5F00_thumb.png" width="693" height="410" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#008000"&gt;Figure 8 - Federated Security Example &lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Full information on the Access Control Service is available at this link:&amp;#160; &lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/windows-identity-foundation-wif-and-azure-appfabric-access-control-service-acs-survival-guide.aspx?wa=wsignin1.0"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;http://social.technet.microsoft.com/wiki/contents/articles/windows-identity-foundation-wif-and-azure-appfabric-access-control-service-acs-survival-guide.aspx?wa=wsignin1.0&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Since the Web and Worker Roles within Windows Azure are designed to be stateless, Microsoft created a Certification Store within the Management area to hold Certificates that can be called from within code. An example of using the Certification Store is here: &lt;a href="http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure-vms.aspx"&gt;http://blogs.msdn.com/b/jnak/archive/2010/01/29/installing-certificates-in-windows-azure-vms.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Additional Resources:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color:#1f497d;font-size:10pt;"&gt;&lt;font face="Calibri"&gt;Official, authoritative security resource list: &lt;a href="http://msdn.microsoft.com/en-us/library/ff934690.aspx"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff934690.aspxTechnical"&gt;http://msdn.microsoft.com/en-us/library/ff934690.aspx&lt;/a&gt;&lt;/a&gt;         &lt;br /&gt;&lt;/a&gt;&lt;/font&gt;&lt;span style="color:#1f497d;font-size:10pt;"&gt;&lt;font face="Calibri"&gt;Technical&lt;/font&gt; Overview of the Security Features in the Windows Azure Platform: &lt;/span&gt;&lt;a href="http://www.microsoft.com/online/legal/?langid=en-us&amp;amp;docid=11"&gt;&lt;u&gt;&lt;font color="#0000ff" face="Calibri"&gt;http://www.microsoft.com/online/legal/?langid=en-us&amp;amp;docid=11&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;.        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color:#1f497d;font-size:10pt;"&gt;&lt;font face="Calibri"&gt;Windows Azure Security Overview: &lt;/font&gt;&lt;a href="http://www.globalfoundationservices.com/security/documents/WindowsAzureSecurityOverview1_0Aug2010.pdf"&gt;&lt;u&gt;&lt;font color="#0000ff" face="Calibri"&gt;http://www.globalfoundationservices.com/security/documents/WindowsAzureSecurityOverview1_0Aug2010.pdf&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="color:#1f497d;font-size:10pt;"&gt;&lt;font face="Calibri"&gt;Windows Azure Privacy: &lt;/font&gt;&lt;a href="http://www.microsoft.com/online/legal/?langid=en-us&amp;amp;docid=11"&gt;&lt;u&gt;&lt;font color="#0000ff" face="Calibri"&gt;http://www.microsoft.com/online/legal/?langid=en-us&amp;amp;docid=11&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="color:#1f497d;font-size:10pt;"&gt;&lt;font face="Calibri"&gt;Securing Microsoft Cloud Infrastructure: &lt;/font&gt;&lt;a href="http://www.globalfoundationservices.com/security/documents/SecuringtheMSCloudMay09.pdf"&gt;&lt;u&gt;&lt;font color="#0000ff" face="Calibri"&gt;http://www.globalfoundationservices.com/security/documents/SecuringtheMSCloudMay09.pdf&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;.        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;A list of other security resources is here: &lt;a href="http://blogs.msdn.com/b/buckwoody/archive/2010/12/07/windows-azure-learning-plan-security.aspx"&gt;http://blogs.msdn.com/b/buckwoody/archive/2010/12/07/windows-azure-learning-plan-security.aspx&lt;/a&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff" size="1"&gt;&lt;em&gt;Image Attribution: David Pallmann: &lt;/em&gt;&lt;/font&gt;&lt;a href="http://davidpallmann.blogspot.com/2011/07/windows-azure-design-patterns-part-1.html"&gt;&lt;font color="#0000ff" size="1"&gt;&lt;em&gt;http://davidpallmann.blogspot.com/2011/07/windows-azure-design-patterns-part-1.html&lt;/em&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=37432" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Application+Architecture/default.aspx">Application Architecture</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Application+Fabric/default.aspx">Application Fabric</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud/default.aspx">Cloud</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Concepts/default.aspx">Concepts</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Data/default.aspx">Data</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Design/default.aspx">Design</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Encryption/default.aspx">Encryption</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Platform+Independence/default.aspx">Platform Independence</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/SOA/default.aspx">SOA</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/SQL+Azure/default.aspx">SQL Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Walkthroughs/default.aspx">Walkthroughs</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Web/default.aspx">Web</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>The Conundrum of Cloud Computing Evidence</title><link>http://sqlblog.com/blogs/buck_woody/archive/2011/07/26/the-conundrum-of-cloud-computing-evidence.aspx</link><pubDate>Tue, 26 Jul 2011 12:56:08 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:37317</guid><dc:creator>BuckWoody</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/buck_woody/comments/37317.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/buck_woody/commentrss.aspx?PostID=37317</wfw:commentRss><description>&lt;p&gt;“Who is using Windows Azure? How are they doing it?” &lt;/p&gt; &lt;p&gt;I get asked this all the time as I speak to our clients when we mention Windows or SQL Azure as a possible solutions to an architectural problem the company has. I completely understand the question. I’ve worked far longer outside of Microsoft than here, and one of my roles as a Systems Architect was to select solutions from a range of possibilities. When you’re faced with a decision like that, it saves a ton of time if you can find out where others have done the same thing and what problems and successes they had with this or that approach. I’m not a marketing person, so I work with clients directly all the time, and so folks know I’ve seen the way others do things. And they want to know what someone else has done before they try it. &lt;/p&gt; &lt;p&gt;But therein lies the rub.&lt;/p&gt; &lt;p&gt;Most folks aren’t willing to talk about their internal infrastructure much. &lt;a href="http://technet.microsoft.com/en-us/library/bb687780.aspx" target="_blank"&gt;We talk about how we do things here at Microsoft quite frequently, and if you’re not using this resource, definitely go research what we’ve done&lt;/a&gt;. In fact, I don’t think I’ve seen many other technology companies with this depth of information. For instance, here’s a quick list of the areas we talk about on our internal systems: &lt;/p&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl32" href="http://technet.microsoft.com/en-us/library/bb687768.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;BizTalk&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl33" href="http://technet.microsoft.com/en-us/library/bb687782.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Exchange Server&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl34" href="http://technet.microsoft.com/en-us/library/ee862420.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Internet Explorer&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl35" href="http://technet.microsoft.com/en-us/library/gg605859.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Lync&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl36" href="http://technet.microsoft.com/en-us/library/cc982289.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Microsoft Desktop Optimization Pack&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl37" href="http://technet.microsoft.com/en-us/library/dd197309.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Microsoft Dynamics&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl38" href="http://technet.microsoft.com/en-us/library/dd197310.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Microsoft Forefront&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Office System&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl39" href="http://technet.microsoft.com/en-us/library/bb687788.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Office Communications Server&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl40" href="http://technet.microsoft.com/en-us/library/bb687797.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;SharePoint Server&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl41" href="http://technet.microsoft.com/en-us/library/bb687792.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Office&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl42" href="http://technet.microsoft.com/en-us/library/bb687798.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;SQL Server&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;System Center&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl43" href="http://technet.microsoft.com/en-us/library/bb687796.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;System Center Configuration Manager&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl44" href="http://technet.microsoft.com/en-us/library/bb736232.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;System Center Data Protection Manager&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl45" href="http://technet.microsoft.com/en-us/library/bb687791.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;System Center Operations Manager&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl46" href="http://technet.microsoft.com/en-us/library/gg236616.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;System Center Service Manager&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl47" href="http://technet.microsoft.com/en-us/library/hh124528.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Virtual Machine Manager&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl48" href="http://technet.microsoft.com/en-us/library/bb687801.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Visual Studio&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl49" href="http://technet.microsoft.com/en-us/library/gg605186.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Windows Azure&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl50" href="http://technet.microsoft.com/en-us/library/bb687804.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Windows Client&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a id="ctl00_MTCS_main_ctl51" href="http://technet.microsoft.com/en-us/library/bb687806.aspx"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;Windows Server&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt; &lt;li class="content-item"&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;li class="content-item"&gt; &lt;p&gt;And yes, Azure as you can see is part of that list - we’ve implemented it everywhere. But when I point out that we’re using IT resources just like any other company, I hear “yeah, but you’re &lt;em&gt;Microsoft&lt;/em&gt;. You have lots of people to handle the systems, and you can just have the developer who wrote the software come over and fix it if it breaks.” Well, that’s not the way it works at all. When I got here, I met with some folks from Microsoft IT, and I was absolutely shocked at how few people manage our systems. From Systems Administrators all the way to the DBA’s, the ratio of technical resource to machines is really extraordinary, and I had far more folks managing systems for me in my other companies than we have here. And no, we don’t send developers to fix production systems “just for us”, although we will do that when we are using a beta of something that we haven’t even released to CTP yet. &lt;/p&gt; &lt;p&gt;But even with this evidence of ourselves, clients want to “see how others are doing things with Azure”. &lt;a href="http://www.microsoft.com/windowsazure/evidence/" target="_blank"&gt;We do have the customer evidence site, and we have lots of case-studies there&lt;/a&gt;. But many of these lack technical details, again, because folks aren’t always willing to share that. That’s understandable - for instance, even though Microsoft does it, I’m not sure I would have the Visio diagrams for my company’s applications posted in a public place. There may even be legal or competitive reasons &lt;em&gt;not &lt;/em&gt;to do that. So as you peruse that list, keep in mind these are only the companies that are willing to talk in public about their experience - we have far more on Azure than this list. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/jmeier/archive/2011/07/25/microsoft-cloud-case-studies-at-a-glance.aspx" target="_blank"&gt;J.D. Meiers has a good blog post entry&lt;/a&gt; of a rundown of the companies that have released case studies on Azure. And be assured that &lt;a href="http://msdn.microsoft.com/en-us/library/ff898430.aspx" target="_blank"&gt;we have a patterns and practices group that works with the teams here at Azure&lt;/a&gt; to make sure we apply what we learn as we help each client. And many of our partners that you use to help you implement technology are here at Microsoft this week, sharing customer stories (with permission, of course), which allows us to learn from them on how you’re doing things - what works and what doesn’t. &lt;/p&gt; &lt;p&gt;As time goes on I think you’ll see more patterns emerge from the engagements we’ve done. Right now those are sometimes a competitive advantage, so you’ll see us generalize the patterns into content we can release. For now, check out those case studies, and do make use of the Internal Microsoft IT sites. They really are quite detailed, and have a lot of information you can use. &lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=37317" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure/default.aspx">Azure</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Azure+Use+Cases/default.aspx">Azure Use Cases</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Cloud+Computing/default.aspx">Cloud Computing</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Customer+Contact/default.aspx">Customer Contact</category><category domain="http://sqlblog.com/blogs/buck_woody/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item></channel></rss>