TechEd Europe 2012; SQL Database Federation (Sharding)

Mit der Einführung von SQL Database Federation im Dezember 2011 hat Microsoft eine Funktionalität im Bereich der Azure SQL Database eingeführt, die so aktuell im on-premise Release Candidat von SQL 2012 nicht zu finden ist. Auch in der RTM Version des SQL Server 2012 wird sich die Funktionalität aller Wahrscheinlichkeit nach nicht finden.

Scott Klein hat in seinem Vortrag “Tips & Tricks for Microsoft SQL Azure Federations: How to Build Cross-Federation Queries and Other Tips” einen gelungenen Überblick über die Funktionalität gegeben. SQL Database Federation erlaubt es, bei hoher Last auf der Datenbank, diese in beliebig viele SQL Datenbanken aufzuteilen. Neben der Skalierung von Web-, und Worker Roles ergibt sich dadurch auch die Möglichkeit auf Ebene der Datenbank (theoretisch ohne Einschränkung) zu skalieren.

TechEd_SQLFederation_1

Letztendlich werden ausgewählte Tabellen einer Datenbank in eigene SQL Database Instanzen verlagert.  Der große Vorteil für den Entwickler ergibt sich aus der Tatsache, dass man sich nicht um die Verwaltung der jeweiligen DB Connections kümmern muss. Auch können Aufteilungen in verschiedene Datenbankinstanzen zur Laufzeit ohne Unterbrechung der Datenverfügbarkeit durchgeführt werden. Auch das Löschen von Instanzen kann ohne Down-Time der Datenbank als ganzes durchgeführt werden.

Die Anlage eines sog. Federation Members kann bei der Anlage einer Tabelle via T-SQL Erweiterung durchgeführt werden:

— create Federated tables, named CustomerAddress …
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[CustomerAddress](
[AddressID] [int] NOT NULL,
[CustomerID] [bigint] NOT NULL,
[AddressType] [nvarchar](50) NULL,
[AddressLine1] [nvarchar](60) NOT NULL,
[AddressLine2] [nvarchar](60) NULL,
[City] [nvarchar](30) NOT NULL,
[StateProvince] [nvarchar](30) NOT NULL,
[CountryRegion] [nvarchar](30) NOT NULL,
[PostalCode] [nvarchar](15) NOT NULL,
CONSTRAINT [PK_CustomerAddress] PRIMARY KEY CLUSTERED
(
[CustomerID],[AddressID] ASC
)
)FEDERATED ON (cid = CustomerID)
GO

Ein Beispiel wie eine SQL Federation Datenbank mit C# und ADO.NET angesprochen wird kann hier geladen werden.

Entity Framework kann zwar verwendet werden um die SQL Federation Datenbank anzusprechen. Jedoch erscheint die Verwendung zusätzlicher SQL Statements um die richtige Federation auszuwählen zumindest ungewöhnlich.

string strCmd = String.Format(„USE FEDERATION {0}({1}={2}) WITH RESET, FILTERING={3}“,
CONST_FEDERATION_NAME,
CONST_DISTRIBUTION_NAME,
lFederationKey,
(bFilteringOn ? „ON“ : „OFF“));

using (AWEFEntities dc = new AWEFEntities())
{
dc.Connection.Open();
dc.ExecuteStoreCommand(strCmd, null);
dataCustomer = dc.Customers.ToList();
dataCustomerAddress = dc.CustomerAddresses.ToList();
dc.Connection.Close();
}

 

Auf Nachfrage hat Scott Klein erwähnt, dass das Entity Framework Team an einer besseren Integration von EF mit SQL Database Federation mit Nachdruck arbeitet. Aus meiner Sicht empfiehlt es sich zum jetzigen Zeitpunkt SQL Federation Datenbanken mit ADO.NET anstelle eines O/R Mappers anzusprechen.

Zum Abschluss der Session hat Scott Klein noch einen Ausblick auf die kommenden Featuers gegeben.

TechEd_SQLFederation_2

Als besonders interessant erscheint die Möglichkeit eine Datensynchronisation zwischen Federation Members mit Hilfe des “Data Sync Service” zu konfigurieren.

TechEd Europe 2012; Boxing Bots, WebSites und Big Data

Boxing Bots

Die Keynote am ersten offiziellen TechEd Tag startet mit einem Knaller für alle Kinect und Robot Fans. Via Kinect können Boxing Bots in einem realen Boxkampf über 3 Runden ferngesteuert werden.  Alleine der nicht ganz Ernst gemeine Werbespot für die Bots kommt in der Halle super an. Natürlich habe ich es mir nicht nehmen lassen die Bots am Abend in der Expo Halle selbst auszuprobieren. Über das Ergebnis meines Boxkampfes mit einem sehr schmächtigen Asiaten möchte ich allerdings nicht weiter berichten.

TechEd_BoxingBot_1

WebSites

Vor ca. 2 Wochen hat Scott Guthrie im Ramen des Azure Spring Release die Azure WebSites vorgestellt. Eine sehr einfache Möglichkeit Internet Applikationen innerhalb der Azure Cloud in einem Shared Environment zu hosten. Karandeep Anand hat in seinem Talk “WebSites on Windows Azure” nun klargestellt, das nur die ersten 12 Monate in einer Shared Umgebung kostenlos sind. Die danach anfallenden Kosten stehen  noch nicht fest.

TechEd_WebSites_1

Eine weitere Einschränkung von WebSites im Shared Hosting wurde erläutert. Custom Domain Names (z. B. www.mydomain.de) welche auf die WebSite via CNAME Eintrag weiterleiten sind demnach nur im Reserved Hosting möglich.

hadoop

Die Einschätzung vom gestrigen Blog-Post, dass Hadoop Einzug in die Microsoft Storage Dienste hält, hat sich am ersten offiziellen Konferenztag bestätigt. Hadoop wurde sogar mit einem Beitrag von Riccardo Muti in der Key Note gewürdigt. Einfach bis zur Timeline 02:02:00 vorspulen. Auch wenn es ein Problem während der Demo gab und auf das Sekundärsystem ausgewichen werden musste, zeigt es doch den Stellenwert, den hadoop im Rahmen der Big Data Services von Microsoft einnimmt.

TechEd Europe 2012; hadoop on Azure – a.k.a. Isotope

TechEdIntro

Der Erste Tag der diesjährigen TechEd in Amsterdam ist vorüber und traditionell wurden die Pre-Cons durchgeführt. Im Track “Real-World Coud Computing on Windows Azure” haben Steve Fox, Denis Mulder, Simon Hart, Paul Stubbs und Wilfried Schadenboeck die Neuerungen rund um Windows Azure vorgestellt.

TechEdTrack

Es wurden hauptsächlich die Features des Azure Spring Release, die Scott Guthrie in der Nacht vom 07. auf den 08. Juni in San Francisco vorgestellt hat, im Detail beleuchtet. Angenehm war, dass den Fragen der Teilnehmer sehr viel Zeit eingeräumt wurde und alle Fragen sehr detailliert beantwortet wurden.

Im Talk von Denis Mulder “Data in the cloud – from small to big” fanden sich jedoch Informationen bezüglich hadoop on Azure die so beim Event in San Francisco nicht aufgetaucht sind.

 

Für all diejenigen, die noch keine Berührungspunkte mit hadoop hatten, gab es eine kurze Einführung, mit Hinweis auf das aktuelle Angebot von Microsoft (https://www.hadooponazure.com) und wie einfach hadoop Ergebnisse in eine Sharepoint Installation eingebunden werden können.

In einem der letzten Slides des Talks wurde die künftige Strategie von Microsoft bzgl. hadoop vorgestellt. Interessant ist, dass hadoop eine tiefe Integration in Visual Studio bekommen wird.

TechEdHadoopStrategy

Aus meiner Sicht bedeutet dies, dass wir im Bereich der Azure Storage Dienste, neben Blobs, Tables, Queues und Drives, bald mit einem gleich berechtigtem “big data System” hadoop rechnen können.

Die Integration von hadoop in das PaaS Angebot von Windows Azure zeigt wieder einmal, wie ernst es Microsoft mit der Öffnung und Unterstützung von etablierten “nicht Microsoft Techniken” ist und wie einfach es zukünftig sein wird „big-data“ zu verwalten, abzufragen und performante Lösungen zu entwickeln.

Windows Azure IaaS Preview

Im Rahmen des Meet Windows Azure Events hat Scott Guthrie die neuen IaaS Funktionen von Windows Azure vorgestellt. Dieser Blog Post gibt einen ersten kurzen Einblick und Erfahrungsbericht zur Anlage einer Windows 2012 Server VM.

Anmeldung zur Preview

Um die Azure IaaS Services nutzen zu können, muss man sich zunächst unter https://account.windowsazure.com/PreviewFeatures für die Nutzung der Beta Dienste freischalten lassen. In meinem Fall ist das innerhalb von Sekunden geschehen. Kein Vergleich zur teils tagelangen Wartezeit bei der Freischaltung der VM-Role Beta in der Vergangenheit. Der erste Pluspunkt ist damit schon gesammelt.

Provisionierung

Die Erzeugung der VM gestaltet sich äußerst einfach. Im WindowsAzure Administrationsportal startet man den Wizzard zur Erstellung einer neuen VM:

image

und bekommt danach die Auswahl der bereits vordefinierten “Grundsysteme” auf deren die eigene VM basieren soll. In der Auswahl finden sich neben den erwarteten Windows 2008 R2 und Windows 2012 RC sowie einem Microsoft SQL Server 2012 auch Linux Distributionen von OpenLogic, Suse und Ubuntu.

image

In den Wizzard Schritten 2 und 3 werden noch elementare Informationen wie gewünschter “virtual machine name”, Admin Password und gewünschte Instanzengröße abgefragt. Nach Eingabe der Informationen startet auch schon die Erzeugung der VM.

 

VM Anlage

In meinem Fall war nach 9 Minuten eine voll funktionsfähige VM mit Windows 2012 RC fertiggestellt und zur Verwendung online. Da sich die IaaS Funktionen noch offiziell im Beta Stadium befinden darf hier sicherlich mit einer nochmals verbesserten Performance gerechnet werden, sobald das Feature in den Produktivbetrieb geht. Wobei 9 Minuten für die komplette Erzeugung einer VM (incl. Konfiguration und Start) ein Wert ist, der nach meiner Erfahrung in manchen on-premise Umgebungen nicht zur Verfügung steht.

image

Jedwede weitere Konfiguration oder Installation von Software innerhalb der VM kann bequem über eine RDP Verbindung erfolgen. Der Start der RDP Verbindung ist komfortabel über das Portal möglich.

 

Diagnose Daten / Auslastung

Einen großen Fortschritt stellt aus meiner Sicht die sofortige Bereitstellung von Diagnose Daten kurz nach dem Start der VM dar. War es bisher zumindest aufwendig Daten zur Auslastung und Diagnose von VMs zu sammeln, stellt das neue Dashboard hier eine sehr einfache und übersichtliche Darstellung zur Verfügung.

image

Meet Windows Azure; Windows Azure Spring Release

 

imageScott Guthrie hat in der Nacht vom 07.06. zum 08.06.2012 in seiner Key-Note zum “Meet Windows Azure” Event die Features des aktuellen Azure Releases vorgestellt.

Aus meiner Sicht wurden drei absolute Highlights vorgestellt:

IaaS Unterstützung 

image

Die aktuell verfügbare Beta der VM-Role hatte bisher einige “challenges” für uns Entwickler. Unter anderem ist sie state-less. D. h. nach einem Reboot waren alle Informationen die lokal innerhalb der VM gehalten wurden unwiederbringlich verloren. Workarounds sind verfügbar (z. B. ein NTFS formatiertes BLOB Drive oder die Azure Storage Dienste) es blieben aber immer kleine “Aber” bestehen. Diese Probleme gehören ab sofort der Vergangenheit an. Scott hat in seiner Keynote die neuen IaaS Funktionen von Azure vorgestellt. Nicht nur dass die zukünftigen VMs persistent sind und Ihren Status auch nach einem Reboot behalten, man kann jetzt mit ein paar Mausklicks aus bereitgestellten OS-Images die benötigte VM zusammenstellen. Zusätzlich benötigte Software (z. B. Legacy Database oder Software die bisher mit Startup Tasks nicht oder nur schwer installiert werden konnte) kann einfach installiert werden. Unterstützt werden neben Windows als Betriebssystem auch diverse Linux Distributionen. Der Installation eines eigenen Sharepoint Servers, SQL Servers oder einer Legacy App die bisher nur mit Workarounds in einer Azure-Role betrieben werden konnte steht nichts mehr im Wege.

image

Scott ging noch einen Schritt weiter. In einem Slide wurde gezeigt, wie Vhd basierte VMs nicht nur on-premise oder in Azure gehostet werden können. Nein es wurde ausdrücklich von “Other Service Providers” gesprochen.

Damit ist es möglich VMs nicht nur in Azure zu hosten und zu betreiben. Sollte man aus welchen Gründen auch immer die VMs nicht mehr in Azure hosten, kann diese zu einem anderen Provider gegeben werden. Cool!

web sites

Ebenfalls mit ein paar Mausklicks ist es möglich aus Visual Studio (VS 2010 und VS 2012) ein Webprojekt (kein Azure Projekt) zu erstellen und in einem kostenlosen (!!)  shared multi tenant environment innerhalb von Azure zu hosten.

In der Demo wurde gezeigt, wie einfach es ist, durch ein paar Einstellungen im neuen Azure Admin Portal die Applikation aus dem “shared environment” in eine dedizierte Umgebung zu migrieren. D. h. sobald der Traffic auf einer Anwendung sich erhöht und z. B. die Performance des “shared environment” nicht mehr ausreicht, kann diese sehr einfach auf eine dedizierte VM migriert werden.

Damit jedoch nicht genug. Es ist sehr einfach möglich Open Source Projekte ebenfalls in eine “web site” zu integrieren. Möchte man beispielsweise seinen Blog innerhalb von Azure auf Basis von wordpress betreiben oder eine Umbraco basierte Site aufbauen, so war dies bisher immer mit Aufwand verbunden. Erstellen der Azure Role, Installation der nötigen Datenbank, Installation von wordpress oder Umbraco usw.

Visual Studio stellt jetzt einen neue Funktion “Create from template” zur Verfügung. Auf Basis des entsprechenden Templates wird die notwendige Infrastruktur (Datenbank, wordpress oder Umbraco etc.) automatisch in der Azure Role installiert und steht nach wenigen Minuten zur Verfügung.

 

VPN Unterstützung

Der bisherige Azure Connect Service wurde essentiell erweitert und verbessert. Es ist nun möglich, komplette on-premise Netzwerke mit Cloud Diensten in einem VPN miteinander zu verbinden. Microsoft kooperiert hier mit diversen Herstellern von VPN Soft-, und Hardware. Dies ermöglicht es im Azure Administrations Portal die notwendigen Azure Dienste zu konfigurieren und danach die passende Konfiguration für die lokalen Router, Firewalls etc. vom Portal zu laden und damit die on-premise Hardware entsprechend zu konfigurieren. Netzwerkadministratoren werden diese Funktionalität zu schätzen wissen.

Migration ASP.NET Anwendung nach Windows Azure; Membership DB

Vor kurzem hatte ich die Aufgabe eine existierende ASP.NET Anwendung welche Authentifizierung und Autorisierung über die Forms 2.0 Authentication und die in ASP.NET integrierten Controls und Funktionen verwendet nach Windows Azure zu migrieren.

In einem ersten Schritt soll die Applikation nach Windows Azure migriert werden. Auf Sicht ist die Verwendung des AppFabric ACS (Access Control Service) geplant.

Bei der Migration sollten zwei Punkte beachtet werden:

1: Erzeugung SQL Server Tabellen und Schema

Nachdem im Azure Service Portal eine neue Datenbank angelegt wurde, muss das entsprechende Datenbank Schema angelegt werden. Bei einem on-premise SQL Server übernimmt dies das mit Visual Studio installierte Tool aspnet_regsql.

aspnet_regsql

Leider kann das Tool zum Erzeugen der notwendigen Tabellen und Felder nicht verwendet werden. Auch die Migration einer existierenden on-premise Datenbank mit den bekannten Migrationstools funktioniert leider meist nicht.

Abhilfe schafft nur die manuelle Erzeugung der notwendigen Tabellen. Die notwendigen T-SQL Statements können finden sich hier eine detaillierte Anleitung findet sich ebenfalls bei MSDN.

Achtung:

Verwendet man ein lokal installiertes “Sql Server Management Studio” bzw. die entsprechende Express Edition zur Anlage der Tabellenstruktur ist darauf zu achten, dass die “R2” Version verwendet wird. Die Vorgängerversionen werfen einen Fehler beim Connect zur SQL Azure Datenbank.

2: “Trusted Security” vs. “SQL Server Login”

Viele (gerade kleinere) Anwendungen arbeiten mit einer SQL Server Datenbank Datei im App_Data Verzeichnis und damit mit „Trusted Security“ beim Login zum SQL Server.

SQL Azure kennt nun nur den “SQL Server Login”. Deshalb muss der korrespondierende Connection String (meist in der Web.config) geändert werden:

  <?xml version="1.0"?>
  <configuration>
    <connectionStrings>
      <remove name="cpHydraDB" />

      <!--Connection String with DB as attached Instance of SQL Server-->
      <!--Membership Provider-->
      <!--
	<add name="cpHydraDB" 
   	  connectionString="data source=.SQLEXPRESS;
	  User Id=xx; Pwd=xx; 
	  Initial Catalog=C:xxCPHYDRAAPP_DATACPHYDRA.MDF" 
	  providerName="System.Data.SqlClient"/>-->

        <add name="cpHydraDB"
          connectionString="data source=xx.database.windows.net;
	  User Id=xx; Pwd=xx; 
	  Initial Catalog=aspnetdb"
          providerName="System.Data.SqlClient"/>

...

Beachtet man diese zwei Punkte, ist es ein leichtes eine existierende ASP.NET Applikation mit Membership Provider nach Windows Azure zu migrieren.