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

5
我目前与一个遗留的asp.net Web应用程序一起工作,未来的一个要求是它可以部署到Windows Azure上。我想知道管理向Azure和传统IIS Web服务器的部署会有多困难。Azure似乎需要一个特定定制版本的Web应用程序项目,一旦转换完成,是否可能将定制的Web应用程序部署到标准的IIS实例中呢?
编辑:这是一个ASP.NET Web应用程序,而不是Web站点(将所有内容编译成一个dll)。
更新:最终,由于将应用程序转换为在Azure上运行所需的工作量以及Azure与其他云解决方案相比的成本,决定选择传统的云托管虚拟服务器。感谢你提供的非常好的答案。
3个回答

8
是否能将应用程序几乎原封不动地部署到 Azure 取决于您的应用程序如何工作。Azure 几乎要求您的应用程序是无状态的。如果它是一个只在会话或应用程序缓存中存储数据并仅将数据保存到数据库的普通网络应用程序,那么您可以将其部署到 Azure。
如果您正在运行有状态服务(这本身就很糟糕),或者如果您将数据保存到文件系统(除了临时缓存之外),则可能会出现问题。实际上,移动到 Azure 的问题与移动到任何多服务器负载平衡解决方案的问题基本相同。其中一个注意点是永久存储。
如果您需要将数据存储在数据库以外的地方,则最好使用 Azure 的存储解决方案,该方案具有用于存储二进制数据、键值数据(称为表,但实际上并不是表)和队列的 API 和客户端库。他们还提供透明的 blob 作为文件系统选项以实现兼容性。如果您希望在应用程序中使用它们,并且该应用程序也在 Azure 外部使用,则需要在您的代码和支持 Azure 服务和标准本地服务的 Azure 客户端库之间编写额外的层。Azure SDK 包括 Azure 服务的仿真器,但它们肯定不适用于生产环境。
至于 Azure 特定项目的机制,实际上并不那么困难。是的,您需要在解决方案中创建一个 Azure 特定的项目,定义 Web 角色和部署内容,但它将引用您现有的 Web 应用程序,而不是反过来。您可以将 Azure Web 角色部署到 Azure 或者继续以常规方式将现有应用程序部署到 IIS 并行进行部署。
Web 站点、Web 应用程序、MVC 实际上并没有太大的区别。实际上也不必是 .NET。可以是 PHP 或 Java 或任何你想放在 VM 上的语言。就 Azure 而言,它们都可以正常工作。
微软喜欢将 Azure 推销为平台即服务(PaaS)解决方案,在该解决方案中,他们提供了大量服务,您可以在其标准平台上运行应用程序,并将其与称为基础设施即服务(IaaS)的 Amazon AWS 相对比,后者“只是”虚拟机。然而,微软实际上与 AWS 一样是 IaaS 解决方案,甚至可能更多。AWS 和 Azure 的唯一区别是 AWS 允许您选择要安装在 VM 上的内容,而 Azure 必须使用 Windows Server 2008 R2 作为 VM 的基础(但您可以自定义 VM 映像以安装在 Windows 之上的自定义软件)。在 Azure 和 AWS 上,主机提供了额外的 PaaS 服务,您可以利用这些服务进行数据存储和消息路由。AWS 还提供了大量额外的服务,如视频流。
请注意,使用Azure(以及我认为的AWS)可以在非托管应用程序中使用它们提供的服务。如果您想从非Azure应用程序中使用Azure的数据存储,您可以这样做,只需进行HTTP REST调用即可获取/放置数据。唯一的区别在于数据中心和您的非数据中心托管应用程序之间的数据输入/输出费用,如果应用程序也在数据中心内,则免费(仅数据中心内的数据输入/输出是免费的,您仍需要支付存储和交易费用)。

谢谢,我认为这实际上回答了我的大部分问题。是的,我们确实使用文件系统,因此一旦我理解了Web角色的工作原理,我们将需要一个文件系统访问接口层,这似乎是最费力的部分。 - eaglestorm

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

我在一篇类似的StackOverflow问题的答案中提供了一些额外的细节,在这里


谢谢,我还没有考虑过发送电子邮件,所以需要将其添加到待办事项列表中。另外,写入锁定可能会成为一个问题,因为我们将有一个 Web 角色和一个工作角色访问同一 Azure 磁盘。 - eaglestorm

0

是的,它已经宕机了,我找不到任何关于它所在位置的信息。 - Chandermani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接