Verbindungsprobleme beim Datenbankzugriff zwischen Windows Azure und SQL Azure

Saturday, January 28, 2012 8:26:02 AM (W. Europe Standard Time, UTC+01:00)

Sql-AzureBei einer Webanwendung, dich gerade in ASP.NET entwickle, bin ich vor kurzem auf eine große Anzahl von Verbindungsproblemen zwischen Windows Azure (IIS) und SQL Azure gestoßen.

Die Webseite nutzt Windows Azure, AppFabric-Cache und SQL Azure. Alles lag im Rechenzentrum West-Europa.

Wie haben sich die Probleme geäußert und wann sind sie aufgetreten?

Beim Datenbankzugriff mit dem Entity Framework gab es folgende Exceptions:

  • Invalid attempt to read when no data is present.
  • The underlying provider failed on Open.
  • Calling 'Read' when the data reader is closed is not a valid operation.
  • An error occurred while reading from the store provider's data reader.
  • A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
  • A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)

Die Fehler sind sind aufgetreten, sobald die Webseite etwas stärker belastet wurde. Dies geschah immer dann, wenn die Webseite durch einen Bot (z.B. Google oder Bing) gecrawlt wurde. Eigentlich sollten solche geringen Lastschwankungen Windows Azure bzw. SQL Azure nicht weiter beeindrucken - dachte ich.

Mein erster Versuch die Fehler zu beheben, war die Größe der VM Instanz zu erhöhen. Leider brachte dies keine Besserung.
An meinem Code konnten diese Fehler nicht liegen, da die Webseite vor dem Umzug zu Azure schon einige Monate auf meinem eigenen Server fehlerfrei lief.
Ich schilderte diese Probleme dem Azure Support und war von der Antwort sehr überrascht. Der Support wusste von dem Problem und hatte auch einen Namen dafür parat: “Transient Conditions”. Ich wurde auf einen Artikel vom “Windows Azure Customer Advisory Team” hingewiesen, in dem folgendes zu lesen ist:

The database connections may also be dropped due to the variety of reasons related to network connectivity between the client and distant Microsoft data centers: quality of network, intermittent network faults in the client’s LAN or WAN infrastructure and other transient technical reasons.

Als Lösung wird der Einsatz des so genannten Transient Fault Handling Framework vorgeschlagen, das im wesentlichen nichts weiter macht, als den Datenbankzugriff zu überwachen. Im Fehlerfall wird der Datenbankzugriff einfach erneut versucht.

Ich habe mich aus mehreren Gründen gegen den Einsatz dieses Frameworks entschieden:

  • das Framework ist riesengroß und hat einige Abhängigkeiten
  • es ist schlecht dokumentiert
  • ich sehe nicht ein, Infrastruktur-Fehler im Code auszugleichen, wodurch die Ladegeschwindigkeit der Webseite sinken würde

Gerade zum letzten Punkt, der Performance, habe ich einige Versuche gemacht.
30 bis 50 Versuche um Daten zu lesen waren im Fehlerfall keine Seltenheit und das, obwohl Datenbank und IIS im selben Azure – Rechenzentrum (West-Europa) lagen. Die Performance der Webseite würde mit dieser Strategie deutlich in die Knie gehen.

Als nächstes habe ich versucht herauszufinden, ob man die Verbindungsprobleme nicht anders in den Griff bekommen kann.
Ich habe die Webseite wieder auf meinem eigenen Webserver gelegt, aber die Datenbank bei Azure gelassen, schon waren die Fehler weg!

Auch wenn die Webseite im Rechenzentrum Europa Nord liegt und die Datenbank in Europa West, gibt es keine Probleme. In dieser Konstellation läuft die Webseite jetzt einen Monat fehlerfrei.

Bin ich mit meinen Erfahrungen ein Einzelfall (Ich habe ja öfter mal Pech mit Server-Hardware), oder hat Microsoft hier noch massive Probleme?

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Windows Azure, ASP.NET Webforms 4.0 und System.Web.Routing, 404 vorprogrammiert

Monday, December 19, 2011 12:36:45 AM (W. Europe Standard Time, UTC+01:00)

Azure 404Vor gut einer Woche habe ich mich dazu durchgerungen, meine ersten Gehversuche in der Microsoft Wolke zu wagen.
Es ging um die Portierung einer mittelgroßen ASP.NET 4.0 (Webforms) App zu Windows Azure. Der erste Schritt was das Umziehen der Datenbank zu SqlAzure, was sehr unproblematisch war. Die einzige Änderung, die ich an der Datenbank machen musste, war das Anlegen von Clustered Indexes auf Zuordnungstabellen. Diese sind notwendig, weil die Datenbank bei SqlAzure repliziert wird. Mehr dazu hier: http://blogs.msdn.com/b/sqlazure/archive/2010/05/12/10011257.aspx

Die eigentliche Webseite hatte ich vorerst auf meinem eigenen Server gelassen und die Datenbank lief in der Cloud. Von dieser Kombination hatte ich mir eine schlechte Performance erwartet, da für jede Datenbankabfrage ein Round Trip von Berlin nach Amsterdam notwendig war. Jedoch konnte ich keine zusätzliche Verzögerung messen.

Jetzt hatte ich genug Zeit, um auch die Webseite zu Windows Azure zu bringen. Die brauchte ich auch. Der einfache Weg, den man in vielen Webcasts sehen kann, lief wie geschmiert:

  • Hinzufügen eines Windows Azure Projects zur Solution
  • 2, 3 Settings anpassen
  • Publish im Windows Azure Projects klicken
  • Kaffee holen weil Windows Azure die VM’s einrichtet und hochfährt, dies dauert ca. 10 Minuten

Schön, die Webseite war online und die Freude war groß. Leider währte dieses Erfolgserlebnis nur kurz. Genauer gesagt, bis ich den ersten Link auf der Webseite klickte und ich feststellen musste das das ASP.NET Routing nicht funktionierte.
Jede geroutete URL lieferte ein „404 – File not found“ zurück.
Die Fehlersuche begann im IIS, der auf der VM in Windows Azure lief. In meiner App konnte kein Fehler sein, da sie schon ein paar Monate fehlerfrei auf meinem eigenen Server lief. Die Einstellungen im IIS waren alle sauber. Das Rätselraten begann.

Wenn kann man an Wochenende um Rat fragen?

Leider ist die Azure - Community in Deutschland praktisch nicht vorhanden, nur ein Blogger schlägt sich tapfer und veröffentlicht regelmäßig Artikel rund um Windows Azure: Sascha Dittmann.
Bei einem Telefonat mit ihm erfuhr ich, dass die Azure VM’s per default nicht mit Windows Server 2008 R2 laufen, sondern mit Windows Server 2008!
Warum das so ist, kann ich nicht nachvollziehen. Bei der Datenbank setzt Microsoft schon auf Denali und in der Azure Management App können sogar schon CTP Features des nächsten SQL Servers genutzt werden.

Es ist möglich, vor der Instanziierung einer VM das OS zu bestimmen und den Windows Server 2008 R2 auszuwählen:

  • ServiceConfiguration.Local.cscfg bzw. in der ServiceConfiguration.Cloud.cscfg öffnen
  • Im Tag ServiceConfiguration folgende Attribute ändern/hinzufügen: osFamily="2"

Gesagt – getan, schon lief mein Routing.

Tja, da fehlte wohl irgendein Patch in der Windows Azure - Windows Server 2008 Installation, der in der R2 Version vorhanden ist.

Hier noch mal eine kurze Zusammenfassung:

Per default bekommt man in Windows Azure nur eine Windows Server 2008 Installation. Mit dieser kann man das Routing in ASP.NET 4.0 Webforms nicht nutzen, es hagelt 404’er.
Abhilfe schafft die Auswahl des Windows Servers R2.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


prio.conference 2010 – mein Braindump

Wednesday, October 20, 2010 9:20:54 PM (W. Europe Daylight Time, UTC+02:00)

Vom 19. bis 20. Oktober 2010 fand die prio.conference zum ersten Mal in Nürnberg statt. Der Veranstaltungsort kam mir sehr gelegen, da ich bis zur Meistersingerhalle nur 15 Minuten mit dem Auto fahren musste.

In den zwei Tagen gab es ziemlich viel neues. Einiges davon hatte ich schon über Twitter vom .NET Open Space mitbekommen, welcher einige Tage vorher in Leipzig statt fand.

Da ich während der Sessions auf der prio.conference nichts mitgeschrieben habe, nutze ich einfach mal diesen Blogpost um zu notieren, was ich für wichtig halte. Sicher interessiert es auch den ein oder anderen.

Die Konferenz startete erst einmal ziemlich ungewöhnlich mit einer Märchenerzählerin und einem Vortrag von einem Filmregisseur. Die Märchenerzählerin gab während des ersten Tages einige Grimm-Märchen zum besten und mappte die Lehren aus den Märchen auf die heutige Welt der Softwareentwicklung. Nette Idee, aber für mich war es ein bisschen zu langatmig.

Ivan Engler ist ein Schweizer Regisseur, der vor seiner Karriere beim Film auch mal 5 Jahre Software entwickelt hat. Er zog viele Parallelen zwischen der Filmproduktion und der Softwareentwicklung. Die wesentliche Aussage war: Erst denken, dann programmieren.

Danach gab es erst mal etwas handfestes von Thorsten Hans und Jürgen Gutsch. Thorsten zeigte den Einsatz von JSON in .NET und jQuery. Jürgen beschäftigte sich in der Vergangenheit oft mit WebDAV und berichtete in 60 Minuten sehr anschaulich über seine Erfahrungen mit diesem offenen Standard.

In einer so genannten General Session erklärte Martin Huber die Unterschiede zwischen verschiedenen Mechanismen für die verteilte Kommunikation, schließlich war ja verteilte Architektur das Thema der prio. Sein Schwerpunkt war das Für und Wider von RESTful HTTP.

Golo Roden hielt auf der Prio zwei Vorträge, einer war zum Thema Windows Identity Foundation. Ein Framework was kaum einer kennt und schlecht dokumentiert ist. WIF ist aber sicher nicht uninteressant, wenn man auf der Suche nach einer zentralen Lösung für Authentifizierung und Rechtevergabe ist.

Auf der prio wurde in mindestens zwei Vorträgen deutlich, dass wir uns immer öfter fragen müssen, ob wir nicht alt eingeschliffene Vorgehensweisen hinterfragen sollten. Am deutlichsten wurde dies am Beispiel vom klassischen 3 (bzw. n) Tier Schichtenmodell und von zentralen relationalen Datenbanken.
Am Abend des ersten Tages stellte Udi Dahan die CQRS Architektur (Command Query Responsibility Segregation) vor und erklärte die Vorteile gegenüber einer klassischen Schichtenarchitektur. CQRS sollte zum Beispiel eingesetzt werden, wenn hochperformante Anwendungen gefordert werden bei denen sich extrem viele User gleichzeitig anmelden.

Nach einem guten Essen und zwei, drei Bier mit Jürgen ging es zum Coding Dojo. Dies war mein erstes Dojo. In der letzten Zeit konnte man über Blogs und in Twitter scheinbar endlose Diskussionen über die verschiedenen Dojo-Styles und über die Frage wer es erfunden hat, mitverfolgen. Diese Diskussionen haben aus meiner Sicht ein schlechtes Bild auf die Idee des Dojos und auf deren Veranstalter geworfen. Jetzt konnte ich mir selbst ein Bild davon machen. Stefan Lieser und Ralf Westphal haben das Dojo moderiert und haben sich dabei vielleicht ein wenig zu viel zurückgehalten. Die Aufgabe war ein einfacher Formelparser der kurz vor knapp fertig wurde. Wie im richtigen Leben. Ich fand es besonders cool, dass die Aufgabe nach viel hin und her von zwei “alten Hasen” ganz souverän mit TDD Unterstützung gemeistert wurde. Ich finde die Idee, zusammen zu coden, gut weil man dabei viel von einander lernt. Wie man das ganze nennt und in welchem Rahmen man das macht, sind für mich “nur Implementierungsdetails”.

Der zweite Tag der Konferenz begann mit einem Vortrag von Stefan Lieser zum Thema Bounded Contexts. Der Vortrag kritisierte das von Microsoft empfohlene Modell einer zentralen relationalen Datenbank weil je nach Kontext andere Daten wichtig sind. Er zeigte, wie man in einer großen Anwendung durchaus mehrere Datenbanken einsetzen kann. Je nach Aufgabe kann dabei ein anderes Datenbanksystem (NoSQL,  RDMS …) eingesetzt werden. Für den Abgleich der Datenbanken untereinander empfahl er einen Service Bus.
Zum Thema Service Bus hielt Björn Rochel einen sehr guten Vortrag. Er gab eine Einführung in den Rhino Service Bus. Der Bus basiert auf verschiedenen vorhandenen Technologien wie zum Beispiel MSMQ 4.0 und und hat als Ziel den Einstieg in das Thema Service Bus sehr einfach zu gestalten. Dies konnte Björn gut demonstrieren.

Weiter ging es für mich mit der Session von Bernd Marquardt zum Thema MPI. Ein mächtiges Werkzeug um Rechenoperationen über ein Netzwerk zu verteilen, also zu parallelisieren. Das braucht man immer wieder, wenn man zum Beispiel die Elektronendichte in einem Gasnebel berechnen will Zwinkerndes Smiley

Der Top Speaker der Konferenz war sicher Ayende Rahien. Er hielt eine Session, in der er NoSQL-Datenbanken, Dokument-Datenbanken, Graph-Datenbanken und so genannte Column Family Databases miteinander verglich. Der Vortrag war ganz ok. Anschaulicher wurde es jedoch im nächsten Vortrag von Sergey Shishkin der verschiedene NoSQL- und Clouddatenbanken an praktischen Beispielen, inklusive Quellcode, vorstellte.

Das letzte große Highlight der Konferenz war Ralf Westphal mit seinem Vortrag zu EBC (Event-Based Components). Ich hatte seine Artikel zu EBC in der Vergangenheit nur kurz überflogen und hab das Thema nicht besonders ernst genommen. Der Vortrag hat aber definitiv Lust auf mehr gemacht, vor allem wenn Stefan und Ralf das Tooling noch zu Ende entwickeln, sind EBC’s ganz bestimmt eine feine Sache.

Mein Fazit der Konferenz:

  • Der Einsatz von relationalen Datenbanken sollte genau geprüft werden, können andere Datenbanken die Anforderungen besser erfüllen (siehe CAP-Theorem)?
  • Die Cloud kommt und macht auch Sinn.
  • Nur Code ist die Wahrheit.
  • Den Rhino Service Bus und die Couch DB in Verbindung mit JQuery sollte man sich ansehen.
  • Exceptions heißen ab sofort Bumsti.
  • Schichtenarchitektur in Frage stellen und mit EBC bzw. CQRS  vergleichen.


Wo nehme ich bloß die Zeit her, um mich mit den ganzen Sachen zu beschäftigen?

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Video vom Bloggertreffen mit Steve Ballmer

Wednesday, October 06, 2010 10:45:08 PM (W. Europe Daylight Time, UTC+02:00)

Während des Bloggertreffens mit Steve Ballmer in Köln hat uns ein Kamerateam begleitet, welches uns zwischen den Terminen interviewt, sowie Stimmungen eingefangen hat:

Weitere Videos über Cloud Computing, Windows 7 und den Besuch von Steve Ballmer in Köln gibt es im YouTube Channel der Microsoft Presseabteilung.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Blogger-Interview mit Steve Ballmer

Wednesday, October 06, 2010 10:28:25 PM (W. Europe Daylight Time, UTC+02:00)

Um 13:30 war es soweit. Thomas Kuberek, Marco Wyrsch und ich hatten die Möglichkeit, ein Interview mit Steve Ballmer zu führen. Das Interview fand im Microsoft Region Office in Köln statt. Steve Ballmer ist unglaublich locker, vermittelt seine Aussagen trotzdem sehr überzeugend und glaubwürdig.

IMG_6499Beim Interview waren neben Steve Ballmer u.a. auch Dorothea Henke (CLIP Program Manager) und Ralph Haupter (Vorsitzender der Geschäftsführung Microsoft Deutschland) anwesend.
Marc, Thomas und ich stellten Fragen aus dem Bereich Cloud Computig und Windows Phone 7.

IMG_6497Meine erste Frage bezog sich auf Windows Azure und die Einhaltung der Datenschutzbestimmungen des jeweiligen Herkunftslandes. Er erklärte, dass man den Serverstandort für seine Application selbst bestimmen kann. Zum Beispiel könne man für eine Anwendung aus Europa den Standort Irland wählen. Ihm ist bewusst, dass in Deutschland ganz besonders auf Datenschutz geachtet wird. Dies wird bei Microsoft berücksichtigt. Er teilte die Kunden in drei Gruppen ein (Consumer, Business und Government), für die spezielle Datenschutzbedingungen gelten.

IMG_6503Meine zweite Frage war, ob es zukünftig eine kostenlose Version von Windows Azure geben wird, die, analog zu den Visual Studio Express Versionen, für Einsteiger und Hobbyprogrammierer interessant sein könnte. Er meinte: „Das ist keine Frage, sondern ein Vorschlag!“. Er notierte sich diese Idee. Vielleicht gibt es ja bald eine Express Version von Windows Azure :-)

Meine dritte Frage bezog sich wieder auf Windows Phone 7. Ich wollte wissen, ob Microsoft eine eigene Hardware für das neue mobile Betriebssystem plant. Diese wird es nicht geben. Es gibt ausgewählte Hardwarepartner, die strenge Hardwarevoraussetzungen erfüllen müssen. Die Rechenleistung des Windows Phone 7 wird mit der Rechenleistung der ersten Xbox vergleichbar sein.

IMG_6505

Mein Fazit: Steve Ballmer hat den Interviewtermin sehr ernst genommen, ist auf unsere Fragen eingegangen und hat sich von uns Ideen mitgenommen. Man hat gespürt, dass Microsoft die Community ernst nimmt und sie gern unterstützt.

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Internationale Cloud Computing Konferenz der BITKOM

Wednesday, October 06, 2010 11:11:08 AM (W. Europe Daylight Time, UTC+02:00)

P1020974Die Cloud Computing Konferenz wurde eröffnet durch Ranga Yogeshwar, der aus dem WDR bekannt ist. Nach der Begrüßung hielt Rene Obermann (Vorstandsvorsitzende der Deutschen Telekom AG und Vizepräsident BITKOM e.V.) die Keynote.
Er warb für die „Cloud made in Germany“ die von T-Systems angeboten wird. Er erklärte, dass diese Cloud besondere Sicherheit nach deutschen Richtlinien bietet. Entscheidend für den Erfolg der Cloud sind der rechtliche Rahmen und strenge Datenschutzrichtlinien, diese müssten weltweit auf ein einheitliches Niveau gebracht werden. Außerdem müssten standardisierte API’s geschaffen werden.

Er erinnerte daran, dass wir im Kölner E-Werk sitzen und das die Einführung der Elektrizität damals eine ähnliche bahnbrechende technologische Wende war. „Services müssen künftig wie Strom aus der Steckdose kommen“

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de


Internationale Cloud Computing Konferenz und Microsoft 3S in Köln mit Steve Ballmer

Saturday, October 02, 2010 6:45:14 PM (W. Europe Daylight Time, UTC+02:00)

Der Bundesverband Informationswirtschaft, Telekommunikation und neue Medien e.V. - kurz BITKOM veranstaltet am 6. Oktober 2010 die Internationale Cloud Konferenz in Köln. Auf dieser Konferenz wird Steve Ballmer (CEO Microsoft) die Keynote mit dem Titel „The future of cloud services“ halten.

Gleichzeitig findet das Microsoft Software Strategy Summit (kurz Microsoft 3S) statt. Zielgruppe des 3S sind Softwarehersteller und Systemintegratoren . Sie erhalten einen Ausblick auf die neuesten Softwaretrends und Entwicklungen von morgen, wie zum Beispiel Windows Azure oder Microsoft Kinect.
Auf dieser Konferenz sprechen unter anderem Steve Ballmer, Frank Fischer (Leiter des  Geschäftsbereichs Mobility, Microsoft Deutschland GmbH) und Dr. Said Zahedani (Senior Director Developer Platform and Strategy Group Microsoft Deutschland GmbH).

Steve_Ballmer

Steve A. Ballmer trat 1980 in den Microsoft Konzern ein und war der 24. Mitarbeiter und erste Manager.
Im Laufe der Zeit leitete er verschiedene Bereiche bei Microsoft, darunter Betriebssystem-Entwicklung, Absatz und Kundenservice. Seit Januar 2000 ist er der Nachfolger von Bill Gates als Vorstandsvorsitzender von Microsoft.



Zusammen mit Thomas Kuberek (Leiter des MSCEBoard.de und CLIP Mitglied) und Marco Wyrsch (MVP, CLIP Mitglied und Leiter des Forums PocketPC.ch) werde ich an diesem Tag Steve Ballmer begleiten und auch Zeit für ein kurzes Interview mit ihm haben.
Hier im Blog und über meinen Twitter Account werde ich live aus Köln berichten.

Ich freue mich auf einen aufregenden und wolkigen Tag :-)

Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war,
bitte "kicken" sie ihn.

Kick it on dotnet-kicks.de