将网站部署到Azure和传统的IIS

问题描述

| 我目前使用的是传统的asp.net Web应用程序,未来的要求之一是它可以部署到Windows Azure。 我想知道管理到Azure和传统IIS Web服务器的部署将有多困难。 Azure似乎需要Web应用程序项目的特定自定义版本,一旦转换后就可以将自定义Web应用程序部署到标准IIS实例。 编辑: 它是一个ASP.NET Web应用程序而不是网站(将所有内容编译到一个dll中) 更新: 最后,由于将应用程序转换为Azure所需的工作量以及Azure与其他云解决方案相比的成本,因此决定与传统的Cloud托管虚拟服务器一起使用。 并感谢您的非常好的回答。     

解决方法

是否可以几乎照原样将应用程序部署到Azure很大程度上取决于应用程序的工作方式。 Azure几乎要求您的应用程序是无状态的。如果它是普通的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形成对比。 -服务(Iaas),它“只是”虚拟机。但是,MS实际上与AWS一样,也是IaaS解决方案,甚至可能更多。 AWS和Azure之间的唯一区别是AWS允许您选择要在VM上安装的内容,而使用Azure必须使用Windows Server 2008 R2作为VM的基础(但是您可以自定义VM映像以在顶部安装自定义软件Windows)。通过Azure和AWS,主机可以提供其他PaaS服务,您可以利用这些服务进行数据存储和消息路由。 AWS还提供大量额外服务,例如视频流。 还要注意,借助Azure(我认为是AWS),您甚至可以在非托管应用程序中使用它们提供的服务。如果要从非Azure应用程序中使用Azure的数据存储,则可以这样做,这只是HTTP REST调用来获取/放入数据。您为数据中心和非数据中心托管的应用程序之间的数据输入/输出支付的唯一区别是免费的,如果该应用程序也位于数据中心内(如果数据输入/输出是数据中心内的免费输入,则您仍具有存储空间和交易费用)。     ,一些东西: 塞缪尔·内夫(Samuel Neff)的答案提到在blob(云驱动器)中安装文件系统。只有一个实例可以锁定此云驱动器以进行写入,因此它的行为不像网络文件共享。您需要为此进行计划。 您需要与Windows Azure诊断子系统集成,以了解应用程序的运行状态(例如性能计数器,跟踪日志等)。 如果您的网络应用程序依赖于第三方应用程序,则需要安装它们。这些实际上是通过您的OnStart()事件处理程序或作为启动任务在角色实例的启动过程中安装的。后者允许管理员级别的安装(包括注册表更改,COM组件安装等)。您需要仔细管理这些安装,因为它们会影响实例的启动时间。 对于asp.net应用,您需要考虑会话状态。进程内会话状态将不起作用,因为每个实例将在内存中拥有自己的状态存储。 SQL Azure会话状态提供程序没有后台清理代理,因此您需要将其构建到Web或辅助角色实例中(有关实现,请参见SQL Azure团队的此博客文章)。最好的选择是使用AppFabric缓存,这是一项刚刚投入生产的新服务。此服务即缓存也为asp.net提供了自定义会话状态提供程序。注意:从今天开始,只能通过.NET界面访问AppFabric缓存服务。没有REST接口(所有其他存储服务-表,blob,队列-都有REST接口)。 .NET,Java和PHP都有存储客户端库。 Ruby有一个来自开源社区的人。 当需要时,您将不得不管理扩展到多个实例。这不是今天的内置服务,但是有第三方服务,例如ParaLeap的AzureWatch。还有Microsoft的System Center Operations Manager,它现在具有Windows Azure监视支持。您还需要处理缩减情况,减少服务器实例的数量。 在类似的StackOverflow问题的答案中,我还有一些其他详细信息。     ,我还没有亲自尝试过Windows Azure迁移扫描程序,但是如果它能像宣传的那样工作,那将真的派上用场。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...