将应用程序迁移到云的技巧.docx

上传人:b****7 文档编号:9216798 上传时间:2023-02-03 格式:DOCX 页数:17 大小:205.23KB
下载 相关 举报
将应用程序迁移到云的技巧.docx_第1页
第1页 / 共17页
将应用程序迁移到云的技巧.docx_第2页
第2页 / 共17页
将应用程序迁移到云的技巧.docx_第3页
第3页 / 共17页
将应用程序迁移到云的技巧.docx_第4页
第4页 / 共17页
将应用程序迁移到云的技巧.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

将应用程序迁移到云的技巧.docx

《将应用程序迁移到云的技巧.docx》由会员分享,可在线阅读,更多相关《将应用程序迁移到云的技巧.docx(17页珍藏版)》请在冰豆网上搜索。

将应用程序迁移到云的技巧.docx

将应用程序迁移到云的技巧

WindowsAzure

将应用程序迁移到云的技巧

GeorgeHuey和WadeWegner

关于技术,最让人着迷的一个方面就是它会不断发展变化,让人活到老学到老!

作为云计算的学生和追随者,WindowsAzure平台让我们感到无比欣喜。

作为Microsoft的技术推广者,我们十分荣幸能与客户一起工作以采用新技术。

我们也因此见证了应用WindowsAzure的许多不同方式。

以前,George出于某种个人原因而想要使用WindowsAzure。

George投身参与许多社区活动,他发现,快速启用临时应用程序,并在不再需要这些程序时停用它们的能力被证明极为有用。

对于具有Microsoft.NETFramework编码经验的开发人员,几乎不需要任何学习过程:

只需构建、部署然后运行应用程序即可。

由于我们的许多公司客户都对WindowsAzure表示出兴趣,我们决定在Microsoft技术中心开展一系列WindowsAzure迁移实验。

我们的初衷是让客户将他们的应用程序带入实验室,并将它们实际地迁移到WindowsAzure。

通过这一过程,每个客户都能够将其Web应用程序和SQL数据库成功迁移到WindowsAzure平台。

结果不出所料:

我们掌握了有关WindowsAzure的丰富经验,并且有信心让我们的客户获得成功。

但是,在帮助实验参与者迁移其各种应用程序的过程中,我们学到了不少有助于顺利迁移的技巧。

在本文中,我们将分享我们在真实世界的迁移中与客户合作时发现的一些技巧和窍门。

迁移基本知识

在决定将应用程序从内部部署迁移到云(或基于云服务创建新应用程序)时,需要考虑应用程序体系结构的以下几个方面:

▪应用程序管理

▪应用程序安全性

▪应用程序兼容性

▪数据库兼容性

我们在迁移实验中最常听到的问题和关注点就以这四个方面为中心。

因此,我们将围绕这些主题进行讨论。

我们常遇到一种误解,就是在使用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=

newPerformanceCounterConfiguration();

procAvailMemory.CounterSpecifier=@"\Memory\AvailMBytes";

procAvailMemory.SampleRate=

System.TimeSpan.FromSeconds(30.0);

config.PerformanceCounters.DataSources.Add(procAvailMemory);

//AddeventcollectionfromWindowsEventLog

//(SystemandApplicationeventlogs).

config.WindowsEventLog.DataSources.Add("System!

*");

config.WindowsEventLog.DataSources.Add("Application!

*");

//Alloftheinformationmonitoredsofarisbeingstoredlocally.

//Telldiagnosticmonitorwhatscheduleperiodshouldbeusedwhen

//transferingtheevents.

config.Directories.ScheduledTransferPeriod=

TimeSpan.FromMinutes

(1);

config.Logs.ScheduledTransferPeriod=

TimeSpan.FromMinutes

(1);

//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+"
");

}

接下来,当您运行应用程序时,会自动将您重定向到您的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之间的区别,比如哪些部分兼容和哪些部

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1