将应用程序迁移到云的技巧Word格式文档下载.docx
《将应用程序迁移到云的技巧Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《将应用程序迁移到云的技巧Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
▪应用程序兼容性
▪数据库兼容性
我们在迁移实验中最常听到的问题和关注点就以这四个方面为中心。
因此,我们将围绕这些主题进行讨论。
我们常遇到一种误解,就是在使用WindowsAzure迁移到云或在云中创建应用程序时,认为开发人员无需担心常见体系结构模式的一些值得关注的问题,如可用性、可伸缩性、可靠性和安全性。
事实上,构建的应用程序无论是进行内部部署还是WindowsAzure部署,分布式计算上下文中的体系结构模式都同样有效。
应用程序管理
无论您的应用程序在内部部署还是在云中运行,操作管理团队都需要一些数据来做出有效的决策。
您将需要考虑一些问题,包括服务级别协议、容量计划、客户计费、审核、应用程序监视、流量分析和成本管理(知道何时升高或降低)。
这些问题需要在将应用程序部署到生产环境中之前得到解决,而且往往最好在创建应用程序之前解决。
这些只是需要在WindowsAzure迁移实验中考虑的一部分问题。
通过利用WindowsAzureSDK中提供的WindowsAzure诊断API(Microsoft.WindowsAzure.Diagnostics),客户可以公开应用程序故障转储、失败的请求跟踪、Windows事件日志、IIS日志、WindowsAzure日志以及性能计数器。
这远比您的预期简单得多。
您告诉诊断监视器要收集哪些类型的诊断信息(请参见图1中的示例),并将这些信息的数据传输计划设置为传输到中央WindowsAzure存储位置。
图1设置诊断
复制代码
publicclassWebRole:
RoleEntryPoint{
publicoverrideboolOnStart(){
DiagnosticMonitorConfigurationconfig=
DiagnosticMonitor.GetDefaultInitialConfiguration();
//Toseewhichcountersyoucancapture,type
//"
typeperf.exe/q"
inacommandwindow.
//CaptureCPUutilization.
PerformanceCounterConfigurationprocUtilization=
newPerformanceCounterConfiguration();
procUtilization.CounterSpecifier=
@"
Processor(*)\%ProcessorTime"
;
procUtilization.SampleRate=
System.TimeSpan.FromSeconds(30.0);
config.PerformanceCounters.DataSources.Add(procUtilization);
//Monitoravailablememory.
PerformanceCounterConfigurationprocAvailMemory=
procAvailMemory.CounterSpecifier=@"
\Memory\AvailMBytes"
procAvailMemory.SampleRate=
config.PerformanceCounters.DataSources.Add(procAvailMemory);
//AddeventcollectionfromWindowsEventLog
//(SystemandApplicationeventlogs).
config.WindowsEventLog.DataSources.Add("
System!
*"
);
Application!
//Alloftheinformationmonitoredsofarisbeingstoredlocally.
//Telldiagnosticmonitorwhatscheduleperiodshouldbeusedwhen
//transferingtheevents.
config.Directories.ScheduledTransferPeriod=
TimeSpan.FromMinutes
(1);
config.Logs.ScheduledTransferPeriod=
//Startthediagnosticsmonitor.
DiagnosticMonitor.Start("
DiagnosticsConnectionString"
config);
//Truegivesfullcrashdumps.Falsegivessmallcrashdumps.
CrashDumps.EnableCollection(false);
System.Diagnostics.Trace.TraceInformation("
OnStartCompleted"
RoleEnvironment.Changing+=RoleEnvironmentChanging;
returnbase.OnStart();
}
...
有关WindowsAzure诊断的更多信息,请参见云诊断:
控制WindowsAzure中的日志记录与跟踪这篇文章(由MikeKelley撰写,发表在MSDN杂志的2010年6月刊上)。
应用程序安全性
对于任何组织而言,迁移到云时关注的首要问题就是安全性。
大多数公司都已在设计和开发安全模型方面投入了大量的时间、财力和工程资源,因此让它们能够利用现有投资(如身份存储、单一登录解决方案和防火墙)是十分重要的。
虽然公司可以采用许多种方式来保护基于云的应用程序,但是一种基于声明的方法已成为越来越流行的模式。
图2显示了此过程。
为使应用程序能够处理来自安全令牌服务(STS)的安全令牌,必须在STS与应用程序之间建立信任关系。
图2应用程序上下文中基于声明的标识
将定义符合业务要求(即,哪些用户可登录到应用程序中)的访问控制规则(步骤1)。
这些规则与STS一起存储。
当用户尝试访问应用程序时,他将被重定向到STS,以便他能够接收到有效令牌(步骤2)。
该用户向STS提供一组输入声明(例如,LiveID或域帐户)以便进行身份验证。
该用户通过身份验证后,STS将这些声明映射到一组输出声明(步骤3)。
在步骤4中,输出声明将打包到安全声明标记语言(SAML)令牌中,由STS签名,并返回给用户,以便转发给应用程序(步骤5中的依赖合作伙伴)。
应用程序确认该SAML令牌有效且来自可信STS(步骤6)。
验证令牌后,应用程序检查令牌中的声明,并发回适当的响应(步骤7)。
相当简单!
这种方法的优点是它非常适合用于ASP.NET提供程序模型。
使您的ASP.NET应用程序变得能感知声明的过程非常简单。
为了让开发人员的工作更轻松,Microsoft引入了WindowsIdentityFoundation(WIF)SDK。
它能够完成分析SAML2.0令牌方面的所有繁重工作,让开发人员能够将精力集中于应用程序上,而不必担心底层安全技术。
首先需要下载WIF和WIFSDK。
一旦将它们安装好,您就已获得让应用程序感知声明所需要的一切。
在包含您的ASP.NETWeb应用程序的VisualStudio解决方案中,右键单击并选择“添加”|“添加新网站”。
选择“ASP.NET安全令牌服务网站”模板。
然后,您便可以为您的开发环境设置STS。
在您创建STS之后,便可通过右键单击您的应用程序并单击“添加STS引用”添加对STS的引用。
这将启动一个向导,您可依照其指示逐步完成在应用程序与STS之间建立关系的过程。
对您的站点,指向应用程序的web.config文件,并指定应用程序URI(请参见图3)。
图3启动联合实用工具向导
在下一步中,选择“使用现有STS”,然后指定STS项目中FederationMetadata.xml文件的位置(请参见图4)。
在此过程中其余部分中选择默认设置。
图4配置STS
请看一下web.config文件。
您将看见FedUtil.exe向导更改了大量的代码。
最重要的更改是对web.config文件的microsoft.identityModel节点做出的。
您将在此处看到对STS项目的引用,以及应用程序所需要的声明类型。
为了确保您的应用程序能够相应地接收到从STS返回的声明,请将以下代码放入default.aspx页面(请注意,您将必须从WIFSDK添加对Microsoft.IdentityModel的引用):
IClaimsIdentityici=
(IClaimsIdentity)Thread.CurrentPrincipal.Identity;
foreach(Claimcinici.Claims){
Response.Write(c.ClaimType+"
-"
+c.Value+"
<
br/>
"
}
接下来,当您运行应用程序时,会自动将您重定向到您的STS。
默认情况下,STS将允许您作为“AdamCarter”进行身份验证。
您只需单击“登录”按钮即可(无需密码)。
STS对登录进行身份验证之后,您就会重定向回您的Web应用程序,并获得身份验证需要的SAML令牌。
您的应用程序将接受该令牌,并允许default.aspx页面运行。
因为WIF模块将拦截您的安全凭据,您将能够把标识主体强制转换为IClaimsIdentity,因而还能够从标识对象提取出声明类型和值(请参见图5)。
图5标识对象的声明类型和值
现在Web应用程序已能感知声明,因此它很容易适应现有标识模型。
只需更新您的配置文件,让它指向您的生产STS,并确保您已将应用程序配置为依赖方。
此外,您还可以使用此信息来创建自定义角色提供程序,以便将声明类型转换为角色。
这是一种极为强大的方法,通过这种方法,您能够把应用程序迁移到几乎任何环境—内部部署环境、云环境甚至合作伙伴数据中心,并且仍然可通过公开的STS对标识存储进行验证。
应用程序兼容性
WindowsAzure是一个应用程序平台,因此了解适合WindowsAzure平台的应用程序类型很重要。
虽然您能够运行本机代码,并且能以完全信任级别运行应用程序,但您必须在将应用程序部署到云之前把它打包,这就是说,评估应用程序是否合适很重要。
例如:
我们在WindowsAzure迁移实验室的一个客户有一个在IIS上运行的现有应用程序,它由一个SQLServer2005后端、一个LINQtoSQL数据访问层以及一个使用MVCFramework1.0和ASP.NET3.5SP1的前端组成。
该应用程序位于一个含有传送流量的负载平衡器的Web场中。
该应用程序本身是没有状态的,因此,用户最终定向到哪个服务器无关紧要。
一个与此应用程序有关的有趣细节是:
该MVC应用程序管理着超过220个独立的网站。
该公司结合使用MVC路由和存储在SQLServer数据库中的信息来确定应该对每个网站加载哪些内容。
对于这些网站的集合,在负载平衡器背后,有五个Web服务器每月对超过4百万个页面访问提供服务。
该公司面临的主要挑战是为其环境提供新Web服务器所需要的时间:
长达数月!
当该公司考虑将应用程序迁移到WindowsAzure时,其主要动机是节省大量的时间。
向外扩展将成为一个配置细节,而不是持续整个季度的噩梦。
迁移到WindowsAzure的过程实际上相当简单。
下面就是我们使用的一般过程:
1.验证应用程序是否在开发环境中正常运行。
2.使用“SQLAzure迁移向导”将SQLServer后端迁移到SQLAzure(我们将在本文稍后部分详述)。
3.更新本地应用程序,使之使用SQLAzure数据库。
这个过程非常简单,只需改一下连接字符串即可。
4.将应用程序转换为“Web角色”项目。
5.验证应用程序是否在本地开发结构中运行。
6.将“Web角色”打包,并将它部署到WindowsAzure。
7.验证应用程序是否可从WindowsAzure运行。
为了缩小“Web角色”包的大小,我们最后将所有图像和CSS文件从它们的内容文件夹中取出,并把它们放入WindowsAzureBlob存储空间。
因为所有内容都在WindowsAzureBlob存储空间中,GGP便可以利用WindowsAzure内容传送网络(CDN)。
这样,数据缓存能够更接近于最终用户。
有关开发、测试和部署WindowsAzure的概述,请参见WindowsAzure:
在VisualStudio2010中开发和部署WindowsAzure应用程序这篇文章(发表于MSDN杂志2010年4月刊)。
若要更深入地了解存储问题,请参见云存储:
使用WindowsAzure存储增强应用程序的引擎(发表于2010年1月刊)。
数据库兼容性
在SQLAzure出现之初,我们就将我们的几个SQLServer数据库迁移到了其中。
再加上我们运作WindowsAzure迁移实验室的经验,我们学到了您在开始迁移过程之前应该考虑的很重要的几件事。
首先,需要检查数据库的大小以及它是否符合SQLAzure使用的数据库限量范围,这很重要。
目前,SQLAzure提供1GB和5GB大小的WebEdition以及10、20、30、40和50GB大小的BusinessEdition。
您需要检查您的数据库并确保它的大小不超过50GB。
如果您的数据库大于50GB,则需要检查该数据库是否可以拆分为较小的数据库(换句话说,将数据库分片)或者将大数据移至Blob。
SQLAzure仅支持SQL身份验证,因此您需要考虑是否需要更改您的应用程序所使用的身份验证方案。
另外,SQLAzure还有一个限制连接时间的资源限制。
我们稍后将在本文中讨论这两个问题。
您的SQLServer数据库的版本是在将数据库迁移到SQLAzure之前需要考虑的另一个问题。
SQLAzure是基于SQLServer2008构建的。
这就是说,如果您想将SQLServer2000或SQLServer2005数据库迁移到SQLAzure,则需要确保您的数据库与SQLServer2008兼容。
例如,SQLServer的早期版本支持旧式的TSQL联接,如WHERE子句中的*=和=*运算符。
SQLServer2008仅支持ANSI式样的联接。
例如:
SELECTProcessClassTypeName
bpa.PropertyMetadataASPropertyMetadataOverride
act.PropertyMetadataASPropertyMetadataDefault
FROMdbo.BusinessProcessActivitiesbpa
LEFTJOINdbo.ActivitiesactONact.Activity_ID=bpa.Activity_ID
当数据库的兼容性级别设置为SQLServer2005或SQLServer2008时,不支持旧式TSQL联接(*=和=*)。
这只是您在迁移到SQLServer2008时会发现的兼容性问题的一个示例。
详述迁移到SQLServer2008的过程超出了本文的范围。
如果您对数据库迁移最佳实践感兴趣,请查阅升级到SQLServer2008的终极指南。
在MSDNSQLServer开发人员中心也提供了丰富的资源。
您将发现最好的途径是从与SQLServer2008兼容的数据库迁移到SQLAzure。
这就是说,如果您想将SQLServer2000或2005数据库迁移到SQLAzure,则可以在迁移到SQLAzure之前进行到SQLServer2008的内部升级。
Microsoft提供了一个名为SQLServerUpgradeAdvisor的出色工具,该工具分析SQLServer2000和SQLServer2005的实例,以识别可能会影响升级的功能和配置更改。
它提供了指向一个文档的链接,该文档描述识别出的每个问题并说明如何解决这些问题。
一旦您已验证您的数据库与SQLServer2008兼容,便可以快速将数据库迁移到SQLAzure。
虽然如此,您还需要知道,SQLAzure并不支持所有的SQLServer2008新功能。
例如,目前在SQLAzure中不支持文件流。
在迁移到SQLAzure时,有几种方式可以检查兼容性问题。
粗暴的方法就是疯狂测试:
对SQLAzure运行您的TSQL脚本并查找错误。
更正出现的所有错误,再次运行。
重复此过程,直至成功。
这样做可能并不能最好地利用您的时间,但这由您决定。
您可以使用SQLServerManagementStudio脚本生成器向导来生成TSQL脚本。
请注意,当您根据向导指示逐步执行操作时,请确保选择高级脚本编写选项,并对“数据库引擎类型的脚本”属性选择SQLAzure数据库。
如果您错过这个步骤,则SQLServer将生成与SQLAzure不兼容的TSQL。
另一个选择是从下载SQLAzure迁移向导(SQLAzureMW)。
SQLAzureMW将尽力识别兼容性问题,尽可能解决这些问题,并将它所了解的所有问题都通知给您。
要更好地理解SQLAzure的一般指导原则和限制,请参见
一旦您在SQLAzure中拥有了数据库架构(表、视图、存储过程等),您将需要上载您的数据。
下面是最常见的方法:
▪SQLServerIntegrationServices
▪大容量复制程序(BCP)
▪用于数据迁移的SqlBulkCopy
▪SQLAzure迁移向导(在后台使用BCP)
使用SQLAzureMW
George创建了SQLAzureMW来帮助我们的客户完成SQL数据库迁移过程。
图6显示了运行中的SQLAzureMW。
图6使用SQLAzureMW
SQLAzureMW分析SQLServer数据库是否存在与SQLAzure的兼容性问题。
它还允许您将数据库对象和数据从源数据库迁移到SQLAzure。
通过使用SQLAzureMW,数据库开发人员可以了解在将其数据库迁移到SQLAzure时将需要执行多少工作。
如果SQLAzureMW标记出与SQLServer2000或2005数据库的许多兼容性问题,我们建议首先将您的数据库升级到SQLServer2008,然后再迁移到SQLAzure。
已有很多文献说明迁移到SQLServer2008的过程,您可以利用大量的指导和专业意见。
有关迁移到SQLServer2008的更多信息,请参见SQLServer2008升级技术参考指南(在MSDNSQLServer开发人员中心(也提供了丰富的资源。
请注意,如果您没有SQLServer2008R2,则您可以继续升级过程,而并不会因此受到影响。
只需下载SQLServer2008R2ExpressEdition,并执行并行升级过程即可。
还有其他一些较好的资源可以帮助数据库开发人员了解SQLServer与SQLAzure之间的区别,比如哪些部分兼容和哪些部