33-Migrating-website-to-cloud - DevNet
Download
Report
Transcript 33-Migrating-website-to-cloud - DevNet
Migrating Website To Cloud
Partners’ Webinar
04/25/2013
Karol Jarkovsky
Solution Architect
[email protected]
Why cloud?
Scalability
Performance
High
Availability
Reliability
Georeplication
Cloud Architecture and Kentico I
[n]
Smart Search
Worker Role
…
ASP.NET Web
Role
I0
I1
I2
CDN
AppFabric
(Caching +
Session)
Blob Storage
SQL
Azure
Cloud Architecture and Kentico II
CDN
Blob Storage
Traffic
Manager
SQL
Azure
…
AppFabric
(Caching +
Session)
…
Blob Storage
Traffic
Manager
SQL Data Sync
Cloud Architecture and Kentico III
Cloud Architecture and Kentico IV
AppFabric
(Caching
+ Session)
•
•
•
•
Non-HIPAA compliant
Maybe slower to access due to the roundtrips between role and cache
Alternative caching options – In-role/Dedicated (local) Caching
Storing Session State SQL Azure using ASP.NET Universal Providers
•
•
Network service using HTTP(S)
Use Azure Affinity Groups to locate hosted service and blob in same data
center
Access from different geographical regions may be slower use CDN
Backup strategy 3rd party tools (CloudBerry, Cloud Storage Studio)
Blob Storage
•
•
•
SQL
Azure
•
Multi-deployment scenarios (different geographical regions) use SQL
Data Sync to replicate
Backup strategy 3rd party tools (redgate SQL Azure Backup) OR copy
DB
Migration Stages
SQL Server DB
Code-base
Azure
Project
Web
Application
Website
Project
DB
DB
DB
SQL
Azure
Migrating Project to Azure
Both WSP and WAP
1. Upgrade project to .NET Framework 4.0+
–
Validate everything works before proceeding
2. Install clean Kentico Azure project
3. Copy customized files to the CMSApp project
–
–
–
Do it outside VS to get it done faster
DO NOT overwrite CMSApp’s web.config file – merge custom settings manually instead
DO NOT copy anything that you don’t need (old import/export packages, unused files in custom
locations, unused design files, etc.) – less files = smaller deployment package = faster deployment
4. Empty folders
~/App_Data/CMSModules/SmartSearch
- Except SmartSearch/_StopWords
~/App_Data/CMSModules/WebAnalytics
- Except WebAnalytics/MaxMind
~/App_Data/CMSModules/OnlineMarketing
~/App_Data/CMSTemp
5. In VS display all files and include new content
–
Include everything, but App_Data, Bin, obj folders
and any *.SLN files you copied over
Migrating Project to Azure
Additional steps - WSP
6. Convert newly added files to Web Application,
–
–
–
Right-click CMSApp project, and select Convert to Web Application
Converts files to WAP format, generates *.designer files, and relocates App_Code content
Move Old_App_Code[n] folder content to Old_App_Code, overwrite existing files with customized
version
Migrating Project to Azure
Migrating media files
7. Migrate meta files
–
If project size > 600 MB (Azure limits maximum size of deployment package)
• Meta files stored in ~/CMSFiles folder - exclude folder from project before deployment
• Copy files manually to cmsstorage/cmsfiles container in blob storage (path has to be all in
lower case!)
8. Migrate site files
–
If project size > 600 MB
• Site files stored in ~/<site_name>/files – exclude folder from project before deployment
• Copy files manually to cmsstorage/<site_name>/files container in blob storage
9. Migrate media libraries
–
If project size > 600 MB
• Library files stored in ~/<site_name>/media – exclude folder from project before deployment
• Copy files manually to cmsstorage/<site_name>/media container in blob storage
• Manually update links to library files to ~/CMSPages/GetAzureFile.aspx?path=<file_path>
Best-practices & Recommendations
Migration
• Deployment package includes ONLY Content items
–
•
Make sure all your custom files has attribute Build Action set to Content
Including huge number of custom files may take too long in VS
–
You can edit CMSApp.proj file manually and include files like
<ItemGroup>
<Content Include="CMSAdminControls\AsyncBackground.ascx" />
<Compile Include="CMSAdminControls\AsyncBackground.ascx.cs">
<DependentUpon>AsyncBackground.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="CMSAdminControls\AsyncBackground.ascx.designer.cs">
<DependentUpon>AsyncBackground.ascx</DependentUpon>
</Compile>
</ItemGroup>
Best-practices & Recommendations
•
After migration the Powered by Windows Azure logo should appear in CMS UI
–
Make sure ~/Old_App_Code/Application/CMSHttpApplication.cs calls
AzureInit.Current.ApplicationStartInit() and file ~/Old_App_Code/CMSModules/WindowsAzure/AzureInit.cs
exists in the project folder
Development
• When development using local Azure Emulator is slow you can open ~/WebApp.sln
(instead ~/CMSAzure.sln) and work with it as a regular WAP,
–
It’s typically faster to run debug on WAP project, as well as responsiveness of WAP is better than
Azure emulator. You’ll need 2 versions of web.config and exclude
~/Old_App_Code/CMSModules/WindowsAzure/AzureInit.cs from WAP solution
•
If you get errors related to starting roles when debugging as on Azure Emulator, set
CMSAzure to use IIS Express instead of IIS
•
When modifying code files containing *.designer file double-check control types
are matching auto-generated types
–
You won’t get error during project publishing until
loading page/control for the first time
Best-practices & Recommendations
•
When using Windows Distributed Cache (AppFabric Cache) for caching and Session
storage, make sure all objects you add to cache/session are serializable
–
You most likely won’t get any errors related to serialization on localhost, until deployed to cloud
Deployment
• Wire settings from web.config file with CMSAzure\ServiceConfiguration.Cloud.csfg
–
–
•
Use Traffic Manager to direct users to the closest region deployment
–
•
Won’t need to re-deploy with every web.config change
Don’t forget to sync with local solution
You can test Traffic Manager forwards to the right region using some on-line load testing tool like
Load Impact
Configure External services to run scheduled tasks as standalone Windows Service
running as part of Smart Search worker role
–
External services are disabled in Azure by default, requires additional configuration
THANK YOU!