<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>RickAtMicrosoft</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/rickatmicrosoft/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 04:04:30 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>A Voyage to Android-land on a dotNet Ship: Getting Started</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/a-voyage-to-android-land-on-a-dotnet-ship-getting-started</link>
      <pubDate>Tue, 10 Sep 2013 11:41:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2013/09/10/a-voyage-to-android-land-on-a-dotnet-ship-getting-started/</guid>
      <description><![CDATA[This year, I've been writing about using Android phones to access&nbsp;Windows Azure Mobile Services...]]></description>
      <content:encoded><![CDATA[<p>This year, I've been writing about using Android phones to access&nbsp;Windows Azure Mobile Services (aka "<em>WAMS</em>")&nbsp;and&nbsp;was briefly writing about Service Bus&nbsp;Notification Hub.&nbsp;I've also done a lot of Server Scripting writing, and playing with Windows Store apps. Now I'm back writing more Android code.</p>
<p>So how has the journey to Android-land been for this dotNet developer?</p>
<p>I've been using the Android&nbsp;Eclipse IDE, which you can download from <a href="https://developer.android.com/sdk/index.html" target="_blank">here</a>. I am also considering using <a href="https://developer.android.com/sdk/installing/studio.html" target="_blank">Android Studio</a>: I will likely use Eclipse for my current coding, and then re-do it in Android Studio so I can compare the two. I have heard negative things about Eclipse, and perhaps the fact that there's an on-going replacement project lends credence, but for now I'm being charitable and assuming that most of the problems derive from my own lack of familiarity with Eclipse.</p>
<p>Here's my initial list of good and bad, coming from someone on a steep learning curve, and who "lives" inside Microsoft Visual Studio. This is based on <strong>Building Your First App</strong>, plus my experience writing several <em>WAMS</em> tutorials.</p>
<p>First the good:</p>
<ul>
<li>It works! This was my first stint at writing apps for any kind of phone, and I was amazed at how easy it was to get a "Hello World" app loaded onto my Android phone, as well as to run it in emulator mode. There was no hassle with any kind of App Store, I just coded it and loaded it onto my phone.</li>
<li>Google's docs are generally pretty good.</li>
<li>In Eclipse, I like being able to comment out code blocks&nbsp;automagically (and re-commenting them). I'd like to believe this feature is lurking somewhere inside Visual Studio too, but I haven't found it by looking around the VS menus. I probably need to do an internet search to verify this or not.</li>
<li>I like Eclipse's Package Manager and the ability to click on methods and go to the definition code.</li>
<li>From my limited standpoint, Android appears on the surface to be well architected and organized.</li>
</ul>
<p>Now for the "bad stuff" (relatively: I was able to figure this out and nothing permanently blocked me):</p>
<ul>
<li>Downloading a USB driver for my Android phone was NOT a seamless process.</li>
<li>Eclipse has a number of issues for me:</li>
<ul>
<li>The relationship between Workspaces and Projects is not clear. Is it analogous to Solutions and Projects in Visual Studio? When I see multiple projects in a Workspace, are they independent of each other, or considered to be pieces of a larger whole? When I am in one Project, I see errors that were generated in a different Project.</li>
<li>Eclipse doesn't seem to update real time: I had an error in a layout, fixed it, and had to save the file for the error to go away.</li>
<li><em><strong>Perspectives</strong></em> are confusing: I used the <em>Debug</em> perspective, wasn't aware that I needed to switch back to the <em>Java</em> perspective (or even that by debugging I had changed perspectives). Somewhere in all of this the Emulator icon vanished off my tool bar. I was able to run the Emulator from the command line, and eventually figured out how to get the icon back.</li>
<li>The Run command is kind of confusing: when you click it, it looks like nothing happens. I would like a message to tell me either to start up an emulator, or plug in my phone with a USB cable. Or at least some kind of error message. Having nothing happen is mysterious, and leaves it unclear whether it recompiled my latest changes, or what it did... Eventually, the Emulator started coming up consistently, but it was unclear what I did to cause this.</li>
<li>Having to separately download Java is annoying, and it is confusing where the best path to put it is.</li>
</ul>
<li>Emulator issues:</li>
<ul>
<li>The best advice when it is starting up is to just WAIT, eventually things work out.</li>
<li>But initially I had trouble getting the Emulator to update. I did the basic <a href="https://developer.android.com/training/basics/firstapp/creating-project.html" target="_blank">Hello World</a>, then followed up with <a href="https://developer.android.com/training/basics/firstapp/building-ui.html" target="_blank">Building a Simple User Interface</a>, and initially the Hello World app kept appearing in the emulator. But waiting worked, once I quit moving on to something else out of impatience...</li>
<li><a href="https://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-with-data-android/">Getting Started with Data</a> throws exceptions when run with my Emulator, but works fine when you connect an actual phone. This probably has something to do with the device that the Emulator is emulating, but the exceptions are pretty non-transparent. It would help if Google would recommend a "vanilla emulator" to use for tutorials.</li>
</ul>
</ul>
<p>I'm big on writing really clear tutorials for beginners, and know that&nbsp;this is much harder than it&nbsp;looks,&nbsp;largely because it is hard for an experienced person to put themselves back into the beginner's mind. Here, I'm lucky:&nbsp;I AM that beginner with Android. I find that approaching a new area with a blank mind is a great way to find shortcomings in documentation and UI, and uncover pitfalls that other beginners may fall into. Often when you know a subject deeply, you lose sight of all the assumptions, context, and implicit knowledge that a beginner has to learn. This is as true of Microsoft products as it is of Google's.</p>
<p>Overall, it appears to me that the Android docs don't always succeed in getting down to that beginner level. But this is perhaps my own perfectionism: they were good enough for me to get up and running. And I find my problems also reflected (and solved)&nbsp;on sites like StackOverflow.</p>
<p>I guess the bottom line is, since Eclipse is open source, if something bothers me enough, I should quit whining about it, and jump in and contribute code. Not sure I have the spare cycles to do that though...</p>]]></content:encoded>
    </item>
    <item>
      <title>These ARE the Androids you've been looking for!</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/these-are-the-androids-youve-been-looking-for</link>
      <pubDate>Fri, 08 Mar 2013 10:10:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2013/03/08/these-are-the-androids-youve-been-looking-for/</guid>
      <description><![CDATA[That's the title of my latest post over on Larry Franks' Silver Lining Blog. It deals with using...]]></description>
      <content:encoded><![CDATA[<p>That's the title of my latest post over on Larry Franks' <a href="https://blogs.msdn.com/b/silverlining/archive/2013/03/06/these-are-the-androids-you-ve-been-looking-for.aspx">Silver Lining Blog</a>. It deals with using Windows Azure Mobile Services to hook up an Android phone to an Azure back-end data store. And in some cases, to Google Cloud Messaging, in order to enable push notifications. Go check it out! There's a lot of links to tutorials that will get you started. You don't even have to own an Android phone, you can use the device emulator.</p>
<p>If you have read prior posts from me, you may wonder what an enterprise-oriented back end database guy like me is doing messing around with non-Microsoft phones. I have to confess to having always had kind of a technical split personality. I wound up writing the original Accounts Services pages at MSN because I was the only one in our group that knew bits of HTML. And I was very interested in Java, prior to the creation of C#, at a time when there wasn't much scope for that skill inside Microsoft.</p>
<p>I'm also very interested in understanding issues that arise for our open-source oriented customers who want to connect with Windows Azure. Microsoft has put an increasing focus on addressing open source issues in the last 2-3 years or so, it's been an amazing transformation to watch (I will simply confine myself to saying that way back in 1995 when I started contracting here, the attitude towards open source was not a warm one...). Basically I like to get outside the Microsoft culture I've been living in, and try to see things from other perspectives.</p>
<p>In particular, those of us embedded in the Microsoft ecosystem have our ways of doing things with Visual Studio and other tools and languages that don't map automatically to what happens in the open source world. In the Android tutorials, we use open source tools (Eclipse, Google api's, etc), but it is possible that I occasionally do so with a "Visual Studio flavor". We'd like this stuff to be useful to open source developers, so if you are one, and see something that makes you say "well no one I know would do it that way, that's just not how you do things in Eclipse", please let us know! We think our technology is sound, and that it successfully integrates multiple software worlds together, but if something jars you as being "too Microsoft style" or just not the best way to accomplish a task in Eclipse, let me know!</p>]]></content:encoded>
    </item>
    <item>
      <title>The CAP Theorem: Why “Everything is Different” with the Cloud and Internet</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/the-cap-theorem-why-everything-is-different-with-the-cloud-and-internet</link>
      <pubDate>Thu, 03 Jan 2013 13:13:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2013/01/03/the-cap-theorem-why-everything-is-different-with-the-cloud-and-internet/</guid>
      <description><![CDATA[This is a continuation of last Wednesday's post, which featured the intro section to my forthcoming...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family: arial,helvetica,sans-serif;">This is a continuation of last Wednesday's post, which featured the intro section to my forthcoming white paper, "Data Architecture in a Cloudy World".</span></p>
<p><span style="font-family: arial,helvetica,sans-serif;">In that overview, I briefly mentioned the bewildering array of choices facing developers today in the data architecture area. But the array of choices is actually much longer than I was able to describe in a brief overview.</span></p>
<h1><span style="font-family: arial,helvetica,sans-serif;">A Bewildering Array of Choices</span></h1>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">There is not only a wide variety of possible data stores, but there&nbsp;are also a number of choices for physical architecture.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Here is a short list of the possible data stores that could be used in an application:</span></p>
<ul>
<li><span style="line-height: 107%; font-family: arial,helvetica,sans-serif; font-size: small; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">A relational database such as Microsoft SQL Server, MySQL, or another relational database product</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Data Warehouses such as SQL Server Analysis Services</span></li>
<li>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Different kinds of &ldquo;NoSQL&rdquo; databases:</span></p>
</li>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><span style="line-height: 107%; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Key/Value stores such as </span>Windows Azure Tables;</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Document Databases;</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Graph Databases;</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Column Stores;</span></li>
</ul>
<li>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">&ldquo;Big Data<span style="line-height: 107%; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">&rdquo; solutions such as HDInsight (aka Hadoop on Windows), with its many components built on top of Hadoop</span></span></p>
</li>
<li>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Messaging Solutions:</span></p>
</li>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Windows Azure Storage Queues</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Windows Azure Service Bus</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">SQL Server 2012 StreamInsight for real time &ldquo;push&rdquo; event processing</span></li>
</ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Windows Azure Blobs</span></li>
</ul>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">And here is a list of possible choices for physical architecture:</span></p>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Cloud services, such as Windows Azure, which include several modes of operation:</span></li>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Platform as a Service (&ldquo;PaaS&rdquo;)</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Infrastructure as a Service (&ldquo;IaaS&rdquo;)</span></li>
</ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">On premise: in your own data center, which may or may not be a &ldquo;private cloud&rdquo;</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Hybrid combinations of the above</span></li>
</ul>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">The above is only a partial listing. PaaS is somewhat circumscribed by the services offered by the cloud service provider.&nbsp; So for example, with Windows Azure you have choices like Windows Azure Table Storage, or SQL Azure Database. On the other hand, the IAAS architecture is virtually unlimited in that you are free to install whatever you want on a VM.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">In the interests of full disclosure, while this paper addresses architecture in general, the cloud service provider&nbsp;&nbsp;focus is mainly on Windows Azure.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Another dimension to consider is that for some products, cloud versions and on-premise versions both exist, but the feature sets of the products might not be identical across the two platforms. Two examples of this are Microsoft SQL Server, and HDInsight. For both of these products there is a Windows Azure version, and an on-premise version. Over the long run you can expect the feature sets to converge, but at present you must take feature differences into account.</span></p>
<h1><span style="font-family: arial,helvetica,sans-serif;">Why &ldquo;Everything is Different&rdquo; with the Cloud and Internet</span></h1>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Two major differences have emerged:</span></p>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">Data is distributed across many independent nodes that are independent structurally and dispersed geographically; this has led to the &ldquo;death&rdquo; of the classical Two Phase Commit method of maintaining database consistency across transactions</span><span style="line-height: 107%; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">, and has also led to the emergence of a whole category of non-relational &ldquo;NoSQL&rdquo; databases.</span></span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">The Internet has made large amounts of data available to applications, in the petabyte range on up, thus the emergence of &ldquo;Big Data&rdquo;, and &ldquo;Internet Scale&rdquo; applications like Facebook <span style="line-height: 107%; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">. The data used by these applications are of such size that it cannot be realistically processed with a relational database, which has led to the emergence of &ldquo;Big Data&rdquo; solutions, notably Hadoop.</span></span></li>
</ul>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Several consequences flow from the above:</span></p>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Geographic dispersion of nodes implies the need to deal with latency. One way this is done is horizontal partitioning of relational databases.</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">The large number of nodes means that any &ldquo;internet scale&rdquo; application is faced with the inevitability of random node failure at any time, thus leading to the need for redundancy and resistance to the effects of node failure.</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">The need to scale out horizontally, the effects of latency, and the requirement for node redundancy all combine to make the use of commodity hardware more cost effective than using the highest performance premium hardware.</span></li>
</ul>
<h2><span style="font-family: arial,helvetica,sans-serif;">Two-Phase Commit and the &ldquo;CAP&rdquo; Theorem</span></h2>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">In a distributed system, the basic mechanism that enables complex transactions in relational databases, two-phase commit, no longer works well at extreme scaling. This has been summed up by the &ldquo;CAP Theorem&rdquo;, which says that in a large distributed system, you can provide only 2 of the following items, and not all 3:</span></p>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Consistency</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Availability</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Partition Tolerance</span></li>
</ul>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Consistency refers to the internal consistency of a database&rsquo;s data. Relational database transactions are expected to satisfy the ACID properties:</span></p>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Atomicity, meaning that transactions are either &ldquo;all or nothing": if part of a transaction fails, the entire transaction fails and the database state is rolled back to its initial state.</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Consistency requires that the result of a successful transaction is that the database transitions from one valid state to another.</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Isolation requires that multiple transactions execute in isolation, with no &ldquo;side effects&rdquo; dependent on their order.</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Durability requires that once a transaction is committed, it remains so, even in the event of system failures.</span></li>
</ul>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">With the two-phase commit protocol, you can ensure that your data is <strong><em>always</em></strong> consistent and satisfies the ACID properties. The stereotypical example is moving $10 from your bank&rsquo;s checking account to the savings account. You first subtract $10 from checking, and next add $10 to savings. If the system goes down, you don&rsquo;t want $10 to be subtracted from checking only. The &ldquo;two-phase commit&rdquo; process ensures that a transaction either completely succeeds, or is discarded.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Availability means that every transaction or request receives a response indicating whether it succeeded or failed.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Partition tolerance means that the overall system is unaffected when any piece of hardware fails, such as a disk, a computer, or an entire rack in the data center. This is ensured by means of massive hardware redundancy. Windows Azure provides at least 3 copies of every resource, and transparently recovers from hardware failures.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">The item that has the highest performance cost is &ldquo;Consistency&rdquo;, and particularly the two-phase commit process that relational databases use to enforce it. Consequently it is the commonest item to&nbsp;be dropped in large distributed systems, in </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">favor of availability and partition tolerance, since you can only get two out of three. Typically ACID consistency is relaxed to require &ldquo;eventual consistency&rdquo;: sooner or later the database is guaranteed to be in a consistent state.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">For more information on Distributed Two-Phase Commit and the CAP theorem see:</span></p>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><a href="https://vasters.com/clemensv/2013/01/02/Distributed+Transactions+And+Virtualization.aspx">Distributed Transactions and Virtualization</a>, which focusses on Windows Azure Service Bus, but is applicable more generally;</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><a href="https://en.wikipedia.org/wiki/CAP_theorem">CAP Theorem</a>, in Wikipedia</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><a href="https://guide.couchdb.org/draft/consistency.html">Consistency</a>, part of a work on CouchDB, a &ldquo;NoSQL&rdquo; database vendor</span></li>
<li><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><a href="https://groups.csail.mit.edu/tds/papers/Gilbert/Brewer2.pdf">Perspectives on the CAP Theorem</a>, for more theoretical depth.</span></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Data Architecture in a Cloudy World</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/data-architecture-in-a-cloudy-world</link>
      <pubDate>Wed, 02 Jan 2013 12:18:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2013/01/02/data-architecture-in-a-cloudy-world/</guid>
      <description><![CDATA[Like many Microsoft bloggers, I'm&nbsp;somewhat erratic, partly because of my own workload, and...]]></description>
      <content:encoded><![CDATA[<p>Like many Microsoft bloggers, I'm&nbsp;somewhat erratic, partly because of my own workload, and partly due to company decisions about what product information&nbsp;can be blogged about prior to public release. Anyway I'm back (for a while, at least).</p>
<p>I am writing a White Paper, tentatively titled "<em><strong>Data Architecture in a Cloudy World</strong></em>", (feel free to critique that title)&nbsp;and I'm going to experiment with posting parts of it, and&nbsp;collecting&nbsp;feedback <em><strong>before</strong></em> it is published.</p>
<p>Here's the intro to the paper:</p>
<p>"This paper provides best practice advice for two questions:</p>
<ul>
<li>Logical data architecture: which <strong><em>kind</em></strong> of data stores should I use? A relational database and a data warehouse? A NoSQL data store? Big Data? Windows Azure Service Bus? Etc. etc.</li>
<li>Physical architecture: <strong><em>where</em></strong> to <span style="line-height: 107%; font-family: 'Calibri','sans-serif'; font-size: small; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">distribute the data stores: on premise? In the cloud? In a hybrid scenario?</span></li>
</ul>
<p>Until the last decade, this used to be a straightforward problem: the data store would most likely be a relational database (with some content going into a file system), and the physical architecture would depend on your scaling and availability requirements, involving clusters, replication, hot backups, etc. While these were complex and deep subjects, they were at least well understood, and the best practices were somewhat widely known and uncontroversial.</p>
<p>Today all this has changed. There are many new storage options, driven by the emergence of Internet-scale applications: not only relational databases and data warehouses, but a host of &ldquo;NoSQL&rdquo; data stores, &ldquo;Big Data&rdquo;, and more. And the rise of the &ldquo;Cloud&rdquo; has led to several new, evolving physical architectures.</p>
<p>Choosing the right architecture is a critical decision for your application. In some cases the choice may be self-evident and easy; in other cases you may have to trade off conflicting factors in making your decision.</p>
<p>This paper provides current best practices for choosing both data and physical architectures. Once you have made your decision, there are additional architecture decisions to be made that are specific to a platform, which we will describe, and where available, provide best practices. And we&nbsp;provide links to other resources that go into more detail about&nbsp;each platform than we can do here."</p>
<p>The paper goes through each of the major architectures, and why you might pick one over the other, and for each architecture, goes into the secondary architectural decisions you may need to make. For example, in the case of Windows Azure SQL Database, if you need to scale out horizontally, then you will need to use the <em><strong>Federation</strong></em> feature, and the paper describes some of the design decisions involved in using <em><strong>Federation</strong></em>.</p>
<p>Some of your architectural decisions are well understood: for example, how to build a well-normalized relational database on premise. In such cases, I do not go into detail, and just link to some resources on the subject.</p>
<p>This was a pretty abstract overview of the paper. We've had some indication that the wide variety of data architecture choices available today has caused some customer confusion. I'd love to hear your feedback about whether you've found this with your own customers.</p>
<p>My next post will be the draft of a section tentatively&nbsp;titled <em><strong>Why Everything is Different with the Cloud and the Internet</strong></em>. It's main focus is the "<em>CAP Theorem</em>", how that affects the ability to do 2-phase commits of database transactions, and the&nbsp;architectural implications of that.</p>
<p>Normally we circulate papers inside Microsoft <strong>before </strong>they are published, but the subject&nbsp;I'm writing about has many experts on the outside as well, so I decided to experiment with soliciting feedback pre-publication. I'm interested in technical accuracy, but also, whether it addresses your questions as a customer, so feel free to wade in even if you don't consider yourself an expert.</p>
<p>An English/American folk proverb says, if you like to eat sausage, you probably don't want to watch how it's made. Well, this will be an experiment to see if that's true of writing also, hopefully not!&nbsp;I've been getting about 1700 hits per blog&nbsp;posting (a few less than Balmer or Sinovsky!), so if only 1% of you make comments, that will be a nice contribution!!</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Azure Performance: Best Practices</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/windows-azure-performance-best-practices</link>
      <pubDate>Tue, 26 Jun 2012 11:03:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2012/06/26/windows-azure-performance-best-practices/</guid>
      <description><![CDATA[This topic, Best Practices for Performance in Windows Azure Applications, appeared with the recent...]]></description>
      <content:encoded><![CDATA[<p>This topic, <a href="https://www.windowsazure.com/en-us/develop/net/best-practices/performance/">Best Practices for Performance in Windows Azure Applications</a>, appeared with the recent Windows Azure Spring 2012 refresh. It's focussed on design issues that affect performance. A related topic that was published at the same time, <a href="Troubleshttps://www.windowsazure.com/en-us/develop/net/best-practices/troubleshooting/">Troubleshooting in Windows Azure</a>, discusses the run-time side of things.</p>
<p>A lot of my topic deals with Windows Azure SQL Database (the database previously known as "SQL Azure"), and especially Federations. In that light, I want to call out a great&nbsp;video of a&nbsp;<a title="presentation and video on Federations " href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DBI408">presentation</a> on Federations by Cihan Biyikoglu at the 2012 US Tech Ed conference in Orlando. Cihan's <a href="https://blogs.msdn.com/b/cbiyikoglu/">blog</a> is also&nbsp;a great source of information about Federations.</p>
<p>Federations illustrates an interesting paradox concerning Windows Azure performance. Individual operations in Windows Azure are often slower than the corresponding operations on an in-premises server, for a number of reasons, including latency, and automated fail-over (nodes, including persistent data, are generally replicated a number of times: this takes time, and if a node goes down, and fails over to a secondary node, this also takes time). But this can be more than compensated for by the scaling out of resources,&nbsp;and Federations is an outstanding example of this. The result can be a massive parallelization of work, which can greatly increase performance.</p>
<p>While database scale-out is the commonest example, the same techniques can be applied to other Windows Azure resources.</p>
<p>Another important aspect of Windows Azure performance is the need to test your architectural design by <em><strong>early-on</strong></em> creating a proof of concept application. Windows Azure contains a lot of "moving parts", and it is in a state of rapid evolution and development. Your exact combination of parts has not necessarily been tested by Microsoft (a Computer Science class in Combinatorics will clarify why this is (hint: look at the factorial function...)), and you should validate your architecture early in the development cycle, rather than trying to fix perf problems when about to deploy your application, or even worse, after it's in production (this has of course never happened to me :-)).</p>
<p>Finally, Eric Lippert has a <a href="https://blogs.msdn.com/b/ericlippert/archive/2012/06/21/eric-rambles-on-about-c-again.aspx">video</a> where he talks briefly&nbsp;about performance <em>as an engineering discipline</em>. Actually most of the video is about C#'s new features and also about Roslyn... But his remarks about performance are worth hearing.</p>
<p>I want to give a shout-out to another topic in the Best Practices series, that was published along with the Performance and Trouble-Shooting ones: <a href="https://www.windowsazure.com/en-us/develop/net/best-practices/security/">Windows Azure Security Guidance</a>.</p>
<p>Finally, as always I welcome feedback! Windows Azure performance is a vast area, and there are undoubtedly areas that could use more detail. And it is a continuously evolving platform, so new issues are likely to appear.</p>]]></content:encoded>
    </item>
    <item>
      <title>Versioning SQL Azure Schemas by Using Federations</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/versioning-sql-azure-schemas-by-using-federations</link>
      <pubDate>Thu, 15 Mar 2012 11:38:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2012/03/15/versioning-sql-azure-schemas-by-using-federations/</guid>
      <description><![CDATA[This topic is now published on the MSDN Library at Versioning SQL Azure Schemas by Using...]]></description>
      <content:encoded><![CDATA[<p>This topic is now published on the MSDN Library at <a href="https://msdn.microsoft.com/en-us/library/hh859735(VS.103).aspx">Versioning SQL Azure Schemas by Using Federations</a>.</p>
<p>The bottom-line idea of the topic is that because SQL Azure Federation members can have different database schemas, therefore you can use this in order to upgrade your schema incrementally. This can be handy if you have an application with multiple customers, or a multi-tenant application: it enables you to roll out new features selectively, instead of all at once. You might want to do this if your customers vary in how quickly they wish to adopt new features. And it could be a useful way of validating your testing: just go live with a small subset of customers, and the impact of any bugs will be more contained.</p>
<p>I'd love to hear about your experiences using this scenario: is it easy to use? Are there glitches in the process that Microsoft could improve? Our software development gets driven by customer requests and experiences, so let us know what you think.</p>
<p>This topic describes one scenario that comes from being able to have different database schemas in federation members. But perhaps you have discovered a new scenario where you can use this feature. If so, we'd love to hear about it.</p>
<p>As an experiment, this was first released on the Microsoft Technet Wiki, at <a href="https://social.technet.microsoft.com/wiki/contents/articles/7894.versioning-sql-azure-schemas-by-using-federations.aspx">https://social.technet.microsoft.com/wiki/contents/articles/7894.versioning-sql-azure-schemas-by-using-federations.aspx.</a> As a wiki article, you can easily edit it and make changes to it, unlike with MSDN articles. I'll be monitoring the wiki article for updates and comments, so that I can incorporate them into the MSDN version.</p>]]></content:encoded>
    </item>
    <item>
      <title>Now for Something a Little Different: Translating Technet Wiki Articles into Spanish</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/now-for-something-a-little-different-translating-technet-wiki-articles-into-spanish</link>
      <pubDate>Thu, 05 Jan 2012 11:47:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2012/01/05/now-for-something-a-little-different-translating-technet-wiki-articles-into-spanish/</guid>
      <description><![CDATA[I've read quite a few posts on the Wiki Ninjas blog discussing translating articles from English...]]></description>
      <content:encoded><![CDATA[<p>I've read quite a few posts on the Wiki Ninjas blog discussing translating articles from English into other languages, mainly Italian and Brazilian Portuguese. I checked on <a href="https://social.technet.microsoft.com/wiki/contents/articles/364.aspx">Wiki: Non-English Language Title Guidelines</a>, and there didn't seem to be a lot of translations about Entity Framework&nbsp;into Spanish (despite the copious translations by Ed Price on other subjects). Since I speak Spanish pretty well, having gone to 2ary school in Chile for 3 years, I decided to try translating the <a href="https://social.technet.microsoft.com/wiki/contents/articles/entity-framework-faq.aspx">Entity Framework FAQs</a> into Spanish. This is the story of how that journey went.</p>
<p>The first step is to use the Translation Widget on the wiki English page to create an automated translation. Next, you hand-correct it, since&nbsp;the translation&nbsp;quality varies widely. I had some initial unclarity over the exact mechanics of making this work: but once I figured it out (I may edit the wiki article on how to use the widget), it went smoothly: really, no different than learning any other new technology.</p>
<p>One bit of advice I was given was to write simple, uncomplicated sentence structures. Since I was translating an existing article, this wasn't an option. I could have rewritten the English version, but you don't know in advance what is going to cause problems, so are likely to do more work than is needed.</p>
<p>A problem in translation is technical terms. For example, a common term in the Entity Framework&nbsp;area is "Plain Old CLR Objects"", and you can just&nbsp;imagine what the Widget did with this: colloquial terms like "plain old" are hard to translate.&nbsp;Here at Microsoft we have a centralized glossary of technical terms and their translations into a variety of languages. Having this available both speeded up my manual translating significantly, and it also ensured consistency. If you don't work at Microsoft, and need to do a significant amount of translating, I advise compiling such a glossary.</p>
<p>Another problem is slang. For example, "good to go"' gets translated literally, word for word. As you likely know, slang is specific to a country or region. As a high school student in Chile, my friends and I&nbsp;produced some hilarious results in both languages because we didn't realize this at first.</p>
<p>The bottom line is that the Widget saves you a whole lot of time. Despite the occasional poor quality of translation, it is much faster than doing it entirely by hand. And if you have a technical glossary available, things go even faster.</p>
<p><strong>&nbsp;Examples of Translation Problems (Warning: non-English appearing soon)</strong></p>
<p>How good is the automated translation? Here are a few examples of problematic results.</p>
<p>A general&nbsp;problem seems to be the amount of context that the Widget takes into account. It appears to have a narrow&nbsp;window of&nbsp;just a few&nbsp;words surrounding any given word, and so sometimes loses the overall syntax. At times it looks like the Widget has done a word for word translation. But often it does a good, or adequate, job.</p>
<p>Another problem is ambiguity. Here is a sentence from one of the FAQs:</p>
<p style="padding-left: 30px;">For more details, and a full example of <span style="background-color: #ffff00;">reading entities</span> from a stored procedure, se&euml;:</p>
<p>The word ""reading"" is clearly a verb, however the translator interprets it as an adjective modfiying ""entities"". So it evidently thinks that there are entities, and then there are special ""reading entities"". Here's the translation it produces:</p>
<p style="padding-left: 30px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">Para obtener m&aacute;s detalles y un ejemplo completo de <span style="background-color: #ffff00;">entidades de lectura</span> desde un procedimiento almacenado, consulte:</span></p>
<p><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">The sentence also sounds slightly off, so I corrected the translation to this:</span></p>
<p style="padding-left: 30px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">Para obtener informaci&oacute;n m&aacute;s detallada y un ejemplo completo que explica como <span style="background-color: #ffff00;">leer entidades</span> usando un procedimiento almacenado, consulte:</span></span></p>
<p><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">And then, every so often the widget seems to get very random. Here's a sentence where I can't really deduce what it did.</span></span></p>
<p style="padding-left: 30px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">This is something we <span style="background-color: #ffff00;">considered</span> but in the end <span style="background-color: #99cc00;">rejected</span></span></span></p>
<p><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">which turns into</span></span></p>
<p style="padding-left: 30px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">Esto es algo que <span style="background-color: #ffff00;">considera</span> pero al final <span style="background-color: #99cc00;">rechazada</span></span></span></span><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span></span></span></span></span></p>
<p><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">For some reason the widget forgot how to conjugate verbs properly, and since the sentence isn't that complex, I can't really guess why.</span></span></span></p>
<p><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span style="font: 12px/normal 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; text-align: left; color: #333333; text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; float: none; display: inline !important; white-space: normal; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">For some more examples, use the widget on this page to translate this posting into a language you know. That should provide you with a good feel for the quality of what gets produced.</span></span></span></p>
<p></p>
<p></p>
<p></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Azure Prescriptive Guidance Released</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/windows-azure-prescriptive-guidance-released</link>
      <pubDate>Mon, 12 Dec 2011 09:41:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2011/12/12/windows-azure-prescriptive-guidance-released/</guid>
      <description><![CDATA[A virtual team of us released this last Friday. It provides you with "best practices and...]]></description>
      <content:encoded><![CDATA[<p>A virtual team of us released <a href="https://msdn.microsoft.com/en-us/library/windowsazure/gg452699.aspx">this</a> last Friday. It provides you with "best practices and recomendations for working with the Windows Azure platform". So if you find yourself overwhelmed and intimidated by "The Cloud", this is a really good place to go to get specific recomendations and "best practices".</p>
<p>My contribution to this, largely co-authored with James Podgorski from the Windows Azure Customer Advisory Team (who did the really hard work of discovering customer pain points, and coming up with code to solve them), is inside <a href="https://msdn.microsoft.com/en-us/library/windowsazure/hh674486(v=VS.103).aspx">Developing Windows Azure Applications</a>: the section titled <a href="https://msdn.microsoft.com/en-us/library/windowsazure/hh698320(v=VS.103).aspx">SQL Azure and On-Premises SQL Server: Development Differences</a>. The section contains topics about things that are different between SQL Server and SQL Azure: things that you know about developing with SQL Server (including Entity Framework), that work differently in SQL Azure. Or to be blunt about it: some code that you write for SQL Server will not work in SQL Azure without some modifications.</p>
<p>The section includes these topics:</p>
<ul>
<li><a href="https://msdn.microsoft.com/en-us/library/windowsazure/hh689724(v=VS.103).aspx">Handling Transient Connections in Windows Azure</a>: my last two blog posts were about this. Please note that this topic currently&nbsp;has a broken link for the <a href="https://msdn.microsoft.com/en-us/library/hh680918(PandP.50).aspx">Microsoft Enterprise Library 5.0 Integration Pack for Windows Azure</a>.</li>
<li><a href="https://msdn.microsoft.com/en-us/library/windowsazure/hh689720(v=VS.103).aspx">Entity Framework Connections and Federations</a></li>
<li><a href="https://msdn.microsoft.com/en-us/library/windowsazure/hh699845(v=VS.103).aspx">Issues with Transactions and Federated Databases</a></li>
<li><a href="https://msdn.microsoft.com/en-us/library/windowsazure/hh703245(v=VS.103).aspx">Transactions with Entity Framework in Federated Databases</a></li>
</ul>
<p>These topics show you the code changes needed to resolve specific problems. We are also researching more general solutions that might require less code on your part.</p>
<p>The section overview, <a href="https://msdn.microsoft.com/en-us/library/windowsazure/hh698320(v=VS.103).aspx">SQL Azure and On-Premises SQL Server: Development Differences</a>, lists two topics as being in the section that are not linked to:</p>
<ul>
<li>Unsupported Features in SQL Azure: SQL Server commands that are not implemented in SQL Azure</li>
<li>Schema Definition Differences: good database schema design principles are slightly different for SQL Azure</li>
</ul>
<p>These topics will be coming out "real soon now", and the broken link mentioned above will get fixed ASAP.</p>
<p>Are there other obstacles you run into when you take your existing SQL Server knowlege and apply it to SQL Azure? Things that you "know" from developing with SQL Server that "don't work" in SQL Azure? Let me know in the comments to this post, and if they are of general enough interest, I'll get them written up and added. And if you've already solved similar problems in the past, again, let me know.</p>]]></content:encoded>
    </item>
    <item>
      <title>More on the CAT Team's SQL Azure Dropped Connections Framework</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/more-on-the-cat-teams-sql-azure-dropped-connections-framework</link>
      <pubDate>Thu, 01 Dec 2011 10:46:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2011/12/01/more-on-the-cat-teams-sql-azure-dropped-connections-framework/</guid>
      <description><![CDATA[In my preceding post I talked about the Windows Azure Customer Advisory Team ("CAT")'s framework for...]]></description>
      <content:encoded><![CDATA[<p>In my <a href="https://blogs.msdn.com/b/rickatmicrosoft/archive/2011/11/23/intermittent-connections-in-windows-azure-useful-resources.aspx">preceding post</a> I talked about the Windows Azure Customer Advisory Team ("CAT")'s <a href="https://windowsazurecat.com/2010/10/best-practices-for-handling-transient-conditions-in-sql-azure-client-applications/">framework for handling transient connections</a> in SQL Azure client connections.</p>
<p>This framework has 3 components to it:</p>
<ul>
<li>a classification scheme for connection exceptions that tells you which ones are worth trying to reconnect, since not all of them are</li>
<li>a set of strategies for actually doing the re-connect: things like "retry immediately", or, "retry every 5 seconds", etc. The client application has to choose one of these strategies.</li>
<li>execution: when an exception is encountered, carry out the chosen reconnect strategy.</li>
</ul>
<p>Two points that might not have been clear from my post:</p>
<ul>
<li>this framework can be used for all forms of Windows Azure storage, not just SQL Azure, but also Azure tables, and Azure queues</li>
<li>it looks to me like this framework could be used for non-Azure SQL Server connections as well: I haven't tried this, but may be verifying it in the next month or two.</li>
</ul>
<p>To me it looks like this framework, or something similar, ought to be pulled into the .Net Framework. I have no knowledge of any plans in this regards (and even if I knew, I likely couldn't tell you), but it seems like a pretty logical thing to do.</p>
<p>I should probably add the usual disclaimer about these blog posts representing my own opinions and not those of my employer, unless otherwise explicitly stated, so consider it done!</p>]]></content:encoded>
    </item>
    <item>
      <title>Transient Connections in Windows Azure: Useful Resources</title>
      <link>https://docs.microsoft.com/archive/blogs/rickatmicrosoft/transient-connections-in-windows-azure-useful-resources</link>
      <pubDate>Wed, 23 Nov 2011 10:37:00 GMT</pubDate>
      <dc:creator><![CDATA[Rick Saling - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/rickatmicrosoft/2011/11/23/transient-connections-in-windows-azure-useful-resources/</guid>
      <description><![CDATA[This is a collection of resources I have encountered while researching the problem...]]></description>
      <content:encoded><![CDATA[<p>This is a collection of resources I have encountered while researching the problem of&nbsp;intermittent connections in Windows Azure. I will be writing about how these affect not just Entity Framework, but Windows Azure more generally.</p>
<p>"Transient connections"&nbsp;is a polite way of saying "dropped connections". These are of course a fact of life when developing distributed appilications: a wide variety of network errors can occur. However there are additional causes of dropped connections in Windows Azure, and these additional cases are not all bad things.</p>
<p>Here are the main causes of dropped connections:</p>
<ul>
<li>the usual network errors that are inherent in distributed applications</li>
<li>SQL Azure throttling exceptions: because SQL Azure is a multi-tenant database service based on shared resources, it will throw exceptions on any applications that use "too many" resources. SQL applications that hog resources are generally a bad thing, and can often be a symptom of a badly written query. Dealing with SQL Azure throttling exceptions is pretty similar to applying best practices to any distributed SQL application.</li>
<li>Windows Azure has extensive capabilities for reliability, load balancing, and scaling: these are in fact some of the major benefits of using Windows Azure, and were high priority design goals for the service. One implication of this architecture is that there are replicated instances of your application, and that sooner or later, one of these instances will get taken down (either by hardware failure, or database sharding, or resource re-balancing). Ideally these actions would be invisible to your application, but at this point in time your application must anticipate connections dropping, and be able to handle reconnecting.</li>
<li>SQL Azure "sharding" aka the <strong>Federations</strong> feature: contemplate what happens when your app is executing a query while a partition is being "re-sharded"; or if you are running a multi-partition query while re-sharding happens, and some of the partitions are in the old state, and some in the new state. I will be researching this scenario more in the near future: I am just calling it to your attention to think about, as a source of interesting query behavior.</li>
</ul>
<p>Here are some resources that I have found useful.</p>
<p><a href="https://social.technet.microsoft.com/wiki/contents/articles/sql-azure-connection-management.aspx#Connection-loss_Errors">SQL Azure Connection Management</a>: provides a great overview, as well as detailed listings and explanations of the individual exceptions you may encounter.</p>
<p><a href="https://blogs.msdn.com/b/appfabriccat/archive/2010/12/11/sql-azure-and-entity-framework-connection-fault-handling.aspx">SQL Azure and Entity Framework Connection Fault Handling</a>: very detailed explanation with code samples of how to handle the exceptions encountered when using the ObjectContext class in Entity Framework. Uses a retry framework described in the next resource.</p>
<p><a href="https://windowsazurecat.com/2010/10/best-practices-for-handling-transient-conditions-in-sql-azure-client-applications/">Best Practices for Handling Transient Conditions in SQL Azure Client Applications</a>: describes a framework that can be used to implement retry logic in SQL Azure; the preceding resource uses this framework.</p>
<p><a href="https://code.msdn.microsoft.com/Transient-Fault-Handling-b209151f">Transient Fault Handling Framework</a>: the code used by the retry framework in the preceding resource</p>
<p><a href="https://blogs.msdn.com/b/adonet/archive/2011/11/05/minimizing-connection-pool-errors-in-sql-azure.aspx">Minimizing Connection Pool errors in SQL Azure</a>: illustrates how to handle dropped connections</p>
<p>I've particularly found the postings from members of the Windows Azure Customer Advisory Team ("CAT") valuable, since they are based on creating solutions to actual customer problems. Other source of information include Bing, the&nbsp;<a href="https://social.msdn.microsoft.com/Forums/en-US/category/windowsazureplatform">Windows&nbsp;Azure Platform&nbsp;forums</a>, etc.</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>