【问题标题】:Deploy web site to azure and traditional IIS将网站部署到 azure 和传统 IIS
【发布时间】:2011-05-26 00:39:22
【问题描述】:

我目前使用的是旧版 asp.net Web 应用程序,未来的要求之一是它可以部署到 Windows azure。

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

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

编辑:

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

更新:

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

感谢您提供非常好的答案。

【问题讨论】:

    标签: asp.net azure


    【解决方案1】:

    您能否将应用程序按原样部署到 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 站点、Web 应用程序、MVC 并没有太大的区别。实际上也不必是.NET。可以是 PHP 或 Java 或任何你想放在你的 VM 上的东西。就 Azure 而言,它的工作原理都是一样的。

    MS 喜欢将 Azure 推广为平台即服务 (Paas) 解决方案,他们提供大量服务,您可以在他们的标准平台上运行应用程序,并将其与他们称之为基础设施的亚马逊 AWS 进行对比——即服务(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 调用来获取/放置数据。您为数据中心和非数据中心托管的应用程序之间的数据输入/输出支付的唯一区别是,如果应用程序也在数据中心内(只是数据输入/输出在数据中心内是免费的,您仍然有存储和交易费用)。

    【讨论】:

    • 谢谢,我认为这实际上回答了我的大部分问题。是的,我们确实使用了文件系统,因此我们需要一个用于文件系统访问的接口层,一旦我了解了 Web 角色的工作原理,这看起来是最有效的工作。
    【解决方案2】:

    一些事情:

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

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

    【讨论】:

    • 谢谢,还没有考虑过发送电子邮件,所以需要将其添加到待办事项列表中。此外,写锁定可能是一个问题,因为我们将有一个 Web 角色和一个工作角色访问同一个 azure 驱动器
    【解决方案3】:

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

    【讨论】:

    • 是的,它已经关闭,我找不到任何关于它下落的信息。
    猜你喜欢
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2012-03-05
    • 2012-10-22
    相关资源
    最近更新 更多