migrating applications to azure cloud. azure migration is a porting project gap analysis migration...
TRANSCRIPT
Full IIS vs. Hosted Web Core
Multiple sites or virtual applications activation of WCF services over non-HTTP transports
Simple, less resources
Tip: Enable Full IIS
<Sites> <Site name="Web"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites>
Add Sites to the csdef file….
Tip: Shy away from session state
• ASP.NET cache is not shared between instances as well
• Move session to SQL azure
• Velocity for Azure is coming later in the year– You can use memcached meanwhile
Tip: Move configuration from app.config/web.config
• Changes in web.config – mean redeployment• Move
Can you Azure this?
<html> <head><title>Hello World PHP</title></head> <body> <?php echo 'Today is '. date('Y-m-d') ."\n"; ?> </body> </html>
Add a Webrole.config…<?xml version="1.0" encoding="utf-8" ?><configuration> <system.webServer> <fastCgi> <application fullPath="%RoleRoot%\approot\php\php-cgi.exe"/> </fastCgi> </system.webServer></configuration>
<WebRole name="WebRole" enableNativeCodeExecution="true
…and enable native code in the .csdef
Run under full IIS to get scale out and management capabilities
Service 1
Service 2
Service 3
Web Role (full IIS)
Service 1
Service 2
Service 3
Web Role (full IIS)
Tip: Make your WCF accessible to silverlight clients
<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy> <allow-http-request-headers-from domain="*" headers="*"/></cross-domain-policy
Drop crossdomain.xml in the root directory of the WebRole
VM Role vs. Worker Role – another look
• VM role you can do anything but things are not persisted
• VM role needs manual maintenance (e.g. upgrades to OS)
Worker Role includes facilities to make migration simpler
• CloudDrive
• Mapping logs to table storage
Tip: pay attention to how you configure your logging
By the way this setup cost 5.25$ per year (per instance and just for the transactions)
private void SetupDiagnostics() { var config = DiagnosticMonitor.GetDefaultInitialConfiguration(); var eventsConfig = new WindowsEventLogsBufferConfiguration { BufferQuotaInMB = 256, ScheduledTransferLogLevelFilter = LogLevel.Warning, ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0) }; eventsConfig.DataSources.Add("Application!*"); config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1); config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose; config.WindowsEventLog = eventsConfig; DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config); }
Application!*[System[Provider[@Name='MyApp']]]
Don’t COM around here no more
• (can’t update the registry)
• Use COM+ and manifest / Native C++
• Wrap with WCF host
Db1(SQL Azure)
Db2(SQL Azure)
Db3(SQL Azure
Db3Archive
(Table Storage)
VM Role
IIS
……
Migrated SQL CLR CodeMigrated SQL CLR Code
NT Service
NT Service
Getting Azure’s SLA means at least 2 instances
• Must make sure app can “scale” to two computers – even for VM role
Tip: Why not host your own SQL?
• Disks partitioning is unknown and does not come with an SLA• Not guaranteed to be persistent • Need to build availability on top
SQL Migration
Wizard
Compatibility Issue DB 1 DB2 DB3 DB4
Add Cluster Index to table X X X X
Dbcc reindex X X X
Table hint without WITH X X
CREATE UDX X
DB_NAME X X
IndexKey_Property X
Checkpoint X
SELECT INTO X X
Sp_helpfile * X
Sys.allocation_units * X
Sys.internal_tables * X
Sys.partitions * X
NOT FOR REPLICATION X X
BACKUP X X
XP_CMDShell X X
Global Temp objects X X
SysJobs X X
Sp_addMessage X
File_Name – false positive flag! X
Sp_spaceused X
Sp_Xml_RemoveDocument X
OpenXml X
kill X
RESTORE FILELISTONLY X
DBCC InputBuffer X
sp_OA X
sysschedules X
Tip: SQL Retry • SQL Connections: Retry on failure– Connections can drop for variety of reasons
• Idleness• Transient (network) errors
• Intentional throttling– First step: reconnect immediately
• Handles idleness- and transient-disconnects
– Gateway handles connection retry for app• Connections attempted for ~30s before failure
– What to do on connection failure?• Wait (10 seconds), then retry • Change your workload if throttled
Backup &
Restore
Existing apps were developed in an age of
abundance in resources
Cloud apps should be more cost aware
What else?• Monitoring• Application Lifecycle Management (including
system & performance testing)• · Archiving• · Authentication and authorization (between
tiers as well as of users)• · CDNs• · Charging model• · Configuration• · Data Access Layer• · Data encryption• · Data partitioning• Data storage and transactions• Dependencies and 3rd party components• Deployment, continuous integration &
automation• Diagnostics, logging & instrumentation• Elasticity (dynamic, scheduled, or manual)•
• · Geographical co-location• · Idempotency• · Import/export routines• Message security• · Message size• · Multi-tenancy• · Network latency• · Page weight• · Reporting• · Session state• · SLAs (availability, performance, etc)• · SQL features• · Windows Services & batch jobs
http://blogs.msdn.com/b/simonince/archive/2010/04/13/checklist-discussing-an-azure-migration.aspx
E.g. Can’t host SMTP server in the cloud
• Can open TCP connection from Azure to the outside world … (and find a SMTP server)
Links
• TCO calculator http://www.microsoft.com/windowsazure/economics/
• Azure Migration Wizard - http://sqlazuremw.codeplex.com/
• http://blogs.msdn.com/b/windowsazure/archive/2010/12/02/new-full-iis-capabilities-differences-from-hosted-web-core.aspx
• Cloudoscope – http://www.cloudvalue.com