• Save
Migration von Anwendungen in die Cloud
Upcoming SlideShare
Loading in...5
×
 

Migration von Anwendungen in die Cloud

on

  • 193 views

Älteres Deck von meinem Talk auf irgendeiner Cloud Konferenz

Älteres Deck von meinem Talk auf irgendeiner Cloud Konferenz

Statistics

Views

Total Views
193
Views on SlideShare
193
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Migration von Anwendungen in die Cloud Migration von Anwendungen in die Cloud Presentation Transcript

  • MIGRATION VONANWENDUNGENIN DIE CLOUDDariusz ParysTechnical Strategist Web PlatformMicrosoft Deutschland GmbH28.03 – 08.04.2011Slide 1
  • INHALT DIESER SESSION• Architektur Azure-basierter Cloud Services• Beispiel: Kassenverwaltung• Migration des Beispiels• Weitere SzenarienSlide 2
  • ARCHITEKTUR AZURE-BASIERTER CLOUDSERVICESCloud ServiceLBhttp://myApp.cloudapp.netWorker RoleWorker Role 2Worker Role 1Web RoleWeb RoleWindows AzureStorage(Table, Blob, Queue)SQL Azure Internet Services
  • LEISTUNG VON PAAS UNDARCHITKTURENTSCHEIDUNGENCloud ServiceLBhttp://myApp.cloudapp.netWorker RoleWorker Role 2Worker Role 1Web RoleWeb RoleWindows AzureStorage(Table, Blob, Queue)SQL Azure Internet ServicesVerteilung derAnwendungslogikOptimierung derInstanzenzahlKoppelungder RollenTraffic über RZ-Grenzen hinwegPersistenzHoch-Verfügbarkeit
  • HOCHVERFÜGBARKEIT> Herausforderung:> Ausführungsort eines Cloud Service kannzur Laufzeit wechseln und lokale Datenkönnen vernichtet werden, z.B. bei> Hardware-Ausfall / Host Update> Guest OS-Upgrade> Lösung:> Korrekte Persistenzoptionen verwenden> Architekturmuster verwenden (s.u.)> Lose Koppelungz.B. über ein Bus System(AppFabric Service Bus)> Vermeidung von „Shutdown“-Code> Einsatz von Queues für asynchroneKommunikation (Azure Queues)
  • PERSISTENZ IN WINDOWS AZURESQL Azure WA Tables WA Queues WA Blobs WA Drives Lokales FSTabellen mitSchemaKey-Value Nachrichten Blobs flexibel flexibelInformationstypJa, 3-fach Ja, 3-fach Ja, 3-fach Ja, 3-fach Ja, 3-fach NeinRedundanzJa Ja Ja Ja Ja NeinToleranz gegenInstanzausfallSehr gut,flexible KeysGut, ein Key Nein Nein Nein NeinZugriffs-optimierungHoch Hoch Hoch Hoch Hoch Sehr hochDatendurchsatzTDS REST REST REST NTFS NTFSSchnittstelleDatenbank-MaximalgrößeTatsächlicherSpeicherTatsächlicherSpeicherTatsächlicherSpeicherTatsächlicherSpeicherKeineSpeicherkostenKeine Pro Transaktion Pro Transaktion Pro Transaktion Pro Transaktion KeineZugriffskostenRelationaleDatenbank• Session-Persistenz• Massendatenmit einemSchlüsselAsynchroneKommunikation (z.B. zwischenRollen)Ablage vongroßenBinärdaten (z.B.Dokumente,Multimedia)Einsatz vonFrameworks,die einDateisystembenötigenCaching vonDatenTypischesEinsatz-szenarienAlternativen für die Datenspeicherung
  • SZENARIO FÜR DIESE SESSION• Eine zentrale Kassenverwaltung mit Anbindung an einLagersystem. Aktualisierungen durch Kassensoftware inden Filialen• Technisch:• ASP.NET MVC 2• Entity Framework 4• Workflow Foundation 4• IIS 7Slide 7
  • ARCHITEKTUR DER ANWENDUNGSlide 8LagerBuchungenStore Central(ASP.NET MVC)WebServiceKasseFilialleiterSQL ServerIISBrowserWindows Forms
  • Slide 9DEMO: POS CENTRAL
  • Store Central(ASP.NET MVC)WebServiceMIGRATION DER ARCHITEKTURSlide 10KasseFilialleiterBrowserWindows FormsSQL AzureBuchungenLagerSQL AzureWindows AzureWorkflowQueue
  • MIGRATIONSSCHRITTE• Datenbank Schema und Daten migrieren• MVC Projekt als Web Role hinzufügen• Diagnostic hinzufügen• Workflow in Worker Role hinzufügen• DeploymentSlide 11
  • DATENBANK MIGRATIONSlide 12
  • DATENBANK BENUTZER• Integrated Security  Nein• Umstellung des Connection Strings• Anlegen eines dedizierten Benutzers für die DatenbankSlide 13
  • DATENBANK SCHEMA MIGRIEREN• Entity Framework  „Generate Database From Model“• SQL Server Management Studio  Generate ScriptsSlide 14
  • DATENBANK INHALTE MIGRIEREN• SQL Server Integration Services• BCP.EXESlide 15
  • Slide 16SQL Azure Migration Wizard<http://sqlazuremw.codeplex.com>
  • DATENBANK BENUTZER ANLEGENSlide 17CREATE LOGIN posuser WITH PASSWORD = passwortCREATE USER pos FOR LOGIN posuserWITH DEFAULT_SCHEMA = dbo;EXEC sp_addrolemember Ndb_owner, Npos;In der Master-DatenbankIn der Ziel-Datenbank
  • EF CONNECTIONSTRING ANPASSENSlide 18Data Source=(local)sqlexpress;Initial Catalog=POSCentral;Integrated Security=True;Pooling=False;MultipleActiveResultSets=TrueBisherData Source=sxz382mwst.database.windows.net;Initial Catalog=POSCentral;User Id=posuser;Password=pass@word1;Pooling=False;MultipleActiveResultSets=FalseNeu
  • Slide 19DEMO: DATENBANK MIGRATION
  • MIGRAION DER WEB ANWENDUNGSlide 20
  • MVC PROJEKT IN WEB ROLEUMWANDELN• Visual Studio 2010 in Admin Mode starten• Hinzufügen der Azure Assembly Referenzen• Microsoft.WindowsAzure.Diagnostics• Microsoft.WindowsAzure.ServiceRuntime• Microsoft.WindowsAzure.StorageClient• Hinzufügen einer WebRole Klasse• Einstiegspunkt für Windows Azure• Konfiguration der Einstellungen• z.B. Wieviele Instanzen, Welches Betriebssystem, etc...• Starten der Anwendung in der EmulationSlide 21
  • WEBROLE.CSSlide 22public class WebRole : RoleEntryPoint{public override bool OnStart(){// eigener Initialisierungscodereturn base.OnStart();}}
  • Slide 23Using SQL Azure for Session State<http://blogs.msdn.com/b/sqlazure/archive/2010/08/04/10046103.aspx>
  • Slide 24DEMO: MVC  WEB ROLE
  • LOGS UND DIAGNOSTICSSlide 25
  • EMULATION != CLOUD• Logging ist Essentiell• Manche Fehler treten nur in der Produktivumgebung auf• z.B. fehlende Assemblies im Global Assembly CacheSlide 26
  • EMULATION != CLOUD• Das sollte man auf jeden Fall beobachten• IIS 7• Tracing• Crash Dumps• Windows Event Logs• Performance Counter• Zusätzliche Konfiguration und Initialisierungscode nötigSlide 27
  • IIS 7 LOGSSlide 28<system.webServer><tracing><traceFailedRequests><add path="*"><traceAreas><add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" /><add provider="ISAPI Extension" verbosity="Verbose" /><add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module" verbosity="Verbose" /></traceAreas><failureDefinitions statusCodes="400-599" /></add></traceFailedRequests></tracing></system.webServer>web.config
  • TRACE LISTENERSlide 29<system.diagnostics><trace><listeners><add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener,Microsoft.WindowsAzure.Diagnostics,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"name="AzureDiagnostics"><filter type="" /></add></listeners></trace></system.diagnostics>web.config
  • INITIALISIERUNGSCODESlide 30var wadConnectionString ="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString";var storageAccount =CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue(wadConnectionString));var roleInstanceDiagnosticManager =storageAccount.CreateRoleInstanceDiagnosticManager(RoleEnvironment.DeploymentId,RoleEnvironment.CurrentRoleInstance.Role.Name,RoleEnvironment.CurrentRoleInstance.Id);DiagnosticMonitorConfiguration config =DiagnosticMonitor.GetDefaultInitialConfiguration();WebRole – OnStart()
  • INITIALISIERUNGSCODE IISlide 31config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1D);config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Undefined;Windows Azure Logsconfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1D);IIS 7 Logs + Failed Request Logsconfig.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter =LogLevel.Warning;config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod =TimeSpan.FromMinutes(1D);Infrastructure Logs
  • INITIALISIERUNGSCODE IIISlide 32config.WindowsEventLog.DataSources.Add("System!*");config.WindowsEventLog.DataSources.Add("Application!*");config.WindowsEventLog.ScheduledTransferPeriod =TimeSpan.FromMinutes(1D);Windows Event Logsvar procTimeConfig = new PerformanceCounterConfiguration();procTimeConfig.CounterSpecifier = @"Processor(*)% Processor Time";procTimeConfig.SampleRate = TimeSpan.FromSeconds(1.0);config.PerformanceCounters.DataSources.Add(procTimeConfig);Performance Counter
  • INITIALISIERUNGSCODE IVSlide 33Crash DumpsCrashDumps.EnableCollection(true);Setzen der neuen KonfigurationeinstellungenroleInstanceDiagnosticManager.SetCurrentConfiguration(config);
  • DIE OS VERSIONEN UND LOGGING• Windows Server 2008 SP2• Windows Server 2008 R2Slide 34<ServiceConfigurationserviceName="AzurePOSCentral"xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1"osVersion="*">ServiceConfiguration.cscfg<ServiceConfigurationserviceName="AzurePOSCentral"xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="2"osVersion="*">ServiceConfiguration.cscfg
  • Slide 35Copy Logs Bug mit Windows Server 2008 R2Workaround von Christian Weyer
  • Slide 36DEMO: DIAGNOSTICS
  • DEPLOYMENTSlide 37
  • DAS DEPLOYMENT• Windows Azure Management Portal• Powershell Commandlets• Visual Studio 2010Slide 38
  • ZERTIFIKATE• Für das Deployment aus einem Tool benötigt man einManagement Zertifikat• Für die Remote Desktop Verbindung benötigt die Rolleden Private Key des Management Zertifikat Verschlüsselung von CredentialsSlide 39
  • INTELLITRACE AKTIVIEREN BEIMDEPLOYMENT AUS VISUAL STUDIO 2010• Intellitrace lässt sich beim Deployment aktivieren• Nachträgliches Post-Mortem Debugging der einzelnenRollenSlide 40
  • Slide 41System.Web.Mvc aufCopyLocal = true setzen
  • Slide 42Ausfallsicherheit (SLA) ist nur beim Deploymentvon mindestens 2 Instanzen pro Rollegewährleistet
  • Slide 43DEMO: DEPLOYMENT
  • WORKER ROLESlide 44
  • LAGERBESTANDVERWALTUNG INWORKER ROLE AUSLAGERN• Neues Worker Role Projekt hinzufügen• Die WF4 Aktivität in die Worker Role packen• WebRole.cs Code hinzufügen• Web Role Implementierung des WCF Dienstes anpassenSlide 45
  • MIT QUEUES ARBEITENSlide 46var storageAccount =CloudStorageAccount.FromConfigurationSetting("DataConnectionString");queueStorage = storageAccount.CreateCloudQueueClient();CloudQueue queue = queueStorage.GetQueueReference("bills");queue.CreateIfNotExist();Queue anlegenCloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>{configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));});Notwendiger Code um Konfigurationen lesen zu können
  • MIT QUEUES ARBEITEN IISlide 47public override void Run(){Trace.WriteLine("WarehouseRole entry point called", "Information");var queue = queueStorage.GetQueueReference("bills");while (true){var message = queue.GetMessage();if (message != null){// WF4 hier aufrufen}queue.DeleteMessage(message);}Thread.Sleep(10000);Trace.WriteLine("Working", "Information");}Worker wartet auf Arbeit
  • MIT QUEUES ARBEITEN IIISlide 48public void Transfer(POSBill bill){...var queue = queueStorage.GetQueueReference("bills");var message = new CloudQueueMessage(builder.ToString());queue.AddMessage(message);...}Web Role verschickt Rechnung über die Queue
  • Slide 49DEMO: WORKER ROLE
  • WEITERE SZENARIEN + BEISPIELE• Silverlight• Rein Silverlight benötigt nur Blob Storage• Rein SL + OData  Blob Storage + SQL Azure• Web Plattformen (Php, Java, Ruby und node.js)• Acceleration Kits• Startup Tasks <http://blog.smarx.com/posts/windows-azure-startup-tasks-tips-tricks-and-gotchas>• Native Anwendungen• C++ lässt sich einfach integrieren• Beispiel auf http://blogs.msdn.com/b/dparys/archive/2009/12/08/verteiltes-rechnen-mit-windows-azure-und-c.aspx• <http://things.smarx.com/>Slide 50
  • Slide 51dparys@microsoft.com@writelinehttp://downtocode.net
  • VIELEN DANK!Slide 52