将网站部署到azure和传统IIS

时间:2011-05-26 00:39:23

标签: asp.net azure

我目前正在使用传统的asp.net Web应用程序,其中一个要求是可以部署到windows azure。

我想知道管理Azure和传统IIS Web服务器的部署有多困难。

Azure似乎需要Web应用程序项目的特定自定义版本,可以在转换后将自定义Web应用程序部署到标准IIS实例。

修改

它是一个ASP.NET Web应用程序而不是一个Web站点(将所有内容编译成一个dll)

更新

最后,由于将应用程序转换为Azure工作所涉及的工作量以及Azure与其他云解决方案相比的成本,因此决定采用传统的云托管虚拟服务器。

谢谢你们给出了非常好的答案。

3 个答案:

答案 0 :(得分:8)

您是否可以将应用程序部署到Azure几乎取决于应用程序的工作方式。 Azure几乎要求您的应用程序是无状态的。如果它是一个简单的vanilla Web应用程序,仅将数据存储在会话或应用程序缓存中,并仅将数据保存到数据库,则可以将其部署到Azure。

如果有状态服务像后台线程一样运行(无论如何都是坏的),或者如果将数据保存到文件系统(除临时缓存之外),那么您可能会遇到问题。实际上,迁移到Azure的问题与迁移到任何多服务器负载平衡解决方案的问题非常相似。一个警告是永久存储。

如果您需要将数据存储在数据库以外的其他位置,那么您最好使用Azure的存储解决方案,该解决方案具有用于存储二进制数据,键/值数据的API和客户端库(他们称之为表,但实际上,这不是表格,而是队列。它们还具有透明的blob-as-file-system选项以实现兼容性。如果要在也在Azure之外使用的应用程序中使用这些,则需要在代码和支持Azure服务和标准本地服务的Azure客户端库之间编写一个额外的层。 Azure SDK确实包含Azure服务的模拟器,但它们绝对不适合生产使用。

就Azure特定项目的机制而言,实际上并不那么困难。是的,您需要在解决方案中创建一个特定于Azure的项目,该项目定义Web角色以及部署的内容,但它将引用您现有的Web应用程序,而不是相反。您可以将Azure Web角色部署到Azure,也可以继续正常并发地将现有应用程序部署到IIS。

网站,Web应用程序,MVC,确实没有多大区别。实际上也不一定是.NET。可以是PHP或Java或您想要放在VM上的任何内容。就Azure而言,它们的工作方式都是一样的。

MS喜欢将Azure推广为平台即服务(Paas)解决方案,在这种解决方案中,他们提供大量服务并在其标准平台上运行应用程序,并将其与Amazon AWS(称为基础架构)进行对比as-a-Service(Iaas),它“只是”一个虚拟机。但是,MS实际上就像AWS一样是IaaS解决方案,可能更是如此。 AWS和Azure之间的唯一区别是AWS允许您选择要在VM上安装的内容,而使用Azure,您必须使用Windows Server 2008 R2作为VM的基础(但您可以自定义VM映像以在顶部安装自定义软件窗户)。通过Azure和AWS,主机提供额外的PaaS服务,您可以利用这些服务进行数据存储和消息路由。 AWS还提供大量额外服务,如视频流。

另请注意,使用Azure(我认为是AWS),您甚至可以在非托管应用程序中使用它们提供的服务。如果您想从非Azure应用程序使用Azure的数据存储,您可以这样做,它只是用于获取/放置数据的HTTP REST调用。您为数据中心和非数据中心托管的应用程序之间的数据输入/输出唯一的差异,如果应用程序也位于数据中心内,则可以免费(只是数据输入/输出是免费的数据中心,您仍然有存储和交易费用。)

答案 1 :(得分:4)

一些事情:

  • Samuel Neff的回答提到在blob(云端驱动器)中安装文件系统。只有一个实例可以锁定此云驱动器进行写入,因此它不像网络文件共享。你需要为此做好计划。
  • 您需要与Windows Azure诊断子系统集成,以便了解应用程序的运行状态(例如性能计数器,跟踪日志等)。
  • 如果您的网络应用程序依赖第三方应用程序,则需要安装这些应用程序。这些实际上是作为角色实例的启动过程的一部分安装的,可以通过OnStart()事件处理程序安装,也可以作为startup task安装。后者允许管理级安装(包括注册表更改,COM组件安装等)。您需要仔细管理这些安装,因为它们会影响实例的启动时间。
  • 对于asp.net应用程序,您需要考虑会话状态。进程内会话状态不起作用,因为每个实例在内存中都有自己的状态存储。 SQL Azure会话状态提供程序没有后台清理代理,因此您需要将其构建到Web或辅助角色实例中(请参阅SQL Azure团队的this blog post以获取实现)。最好的选择是使用AppFabric Cache,这是刚刚投入生产的新服务。此缓存即服务也为asp.net提供自定义会话状态提供程序。注意:截至今天,AppFabric Cache服务只能通过.NET接口访问;它没有REST接口(所有其他存储服务 - 表,blob,队列 - 都有REST interface)。 .NET,JavaPHP都有存储客户端库。 Ruby有一个来自开源社区。
  • 当需要时,您必须管理扩展到多个实例。这不是今天的内置服务,但有第三方服务,如ParaLeap的AzureWatch。还有Microsoft的System Center Operations Manager,它现在具有Windows Azure监控支持。您还需要处理缩减情况,减少服务器实例的数量。

我在回答类似的StackOverflow问题here时有一些其他详细信息。

答案 2 :(得分:0)

我个人没有试过Windows Azure Migration Scanner,但如果它像宣传的那样有效,那么这真的会派上用场。