我可以将我的 asp.net 应用程序移动到云端吗?

Posted

技术标签:

【中文标题】我可以将我的 asp.net 应用程序移动到云端吗?【英文标题】:Can I move my asp.net application to the cloud? 【发布时间】:2012-03-01 21:07:20 【问题描述】:

我们公司正在考虑迁移到云端。我们是否仍然能够满足我们当前的所有要求(如下)。我们希望能够在未来轻松扩展而无需高成本。

5 个 ASP.net 4.0 网站正在运行(使用 sql 数据库,见下文) SQL Server 2008 Express(8 个数据库) 2 个调度服务正在运行(通过电子邮件发送夜间报告,例如数据库中的新订单) MongoDB 和 Memcached 也安装在服务器上

出于安全原因,目前这些网站与数据库服务器位于不同的服务器上。

我们考虑将Windows Azure 和Amazon Web Services (AWS) 作为提供者,哪个最符合我们的要求?

还有其他我们需要考虑的因素吗?

【问题讨论】:

如果你能支付他们的价格,你当然可以将你所有的东西转移到 Amazon EC2 实例上。从小而便宜的东西开始并建立起来甚至很容易。 EC2 实例是云中完全可远程控制的虚拟机。非常酷的东西。 如果您已经在 .net 中做所有事情,那么 Azure 可能会是一个更好的选择,因为它对您的开发人员来说会感觉更自然。我正在从 IIS 迁移到 Azure,这非常酷:如果您不想利用 Azure 的独特功能(例如用于缓存的 AppFabric),那么几乎没有什么可改变的。 我可以使用 azure 轻松运行 Windows 服务吗? amazon 和 azure 哪个更便宜 @frenchie 很高兴知道 Azure 移植到无功能是多么容易。运行 EC2 实例就像在某个地方运行 IIS 服务器一样,因此也非常简单。 【参考方案1】:

Re: SQL 数据库: 在 Windows Azure 上,这将映射到 SQL Azure。最大 100 MB 实例的成本从 5 美元/月开始 - 一直到 150 GB - 并且使用联合的成本更高。

回复:5 个 ASP.net 4.0 网站正在运行:这些自然映射到 Windows Azure Web 角色。 “小”实例是 0.12 美元/小时/实例,您通常需要两个实例(以避免在少数情况下出现单点故障)。根据您的负载,您可以将所有 5 个站点放在同一个实例上。如果您的网站使用率非常低,请考虑 0.05 美元/小时/实例的“超小”实例。

回复:出于安全原因,目前网站与数据库服务器位于单独的服务器上:当然这也是可行的。

Re: 2个调度服务正在运行:运行Windows服务没问题。

回复:通过电子邮件发送夜间报告,例如db 中的新命令: 没问题,虽然不是直接嵌入到 Windows Azure 中,但是有很多简单的方法可以做到这一点(甚至免费,例如通过SendGrid)。

回复:我们希望将来能够轻松扩展而无需高成本:您需要根据实际成本进行计算,但 Windows Azure 肯定可以扩展。

Re: MongoDB 和 Memcache 也安装在服务器上:它们都可以在 Azure 上运行。查看 https://github.com/mongodb/mongo 获取 MongoDB。此外,Azure 缓存服务也可用(为您管理)。

回复:我们曾考虑将 Azure 和 Amazon 作为提供商,这将最符合我们的要求:它们在功能上非常相似(在能力和成本方面),但有一些值得注意的差异。

    Windows Azure 是平台即服务,这意味着您无需担心虚拟机,而只需担心应用程序。换句话说,您将(基本上)压缩的应用程序包上传到云中以供执行。使用 Amazon,您将自己处理虚拟机。在 Azure 中,您将获得一份为您管理的 Windows Server 2008 副本,但您也可以根据需要对其进行管理。如果您的应用是旧的、杂乱无章的安装,而且不是很干净(尽管无论如何可能不是一个好的高价值云候选者),这将远没有优势。 Windows Azure 有一个运行良好的模拟器 - 从 Visual Studio 中直接使用 F5 即可使用存储系统和 VM 以及更多流行的功能。

回复:是否还有其他我们需要考虑的因素:是的。对于任何云应用程序,您都需要准备好处理横向扩展(而不是向上),处理瞬时重试(您可能需要重试对云服务的操作 - 任何云服务)。这样做的好处是更好(并且更具成本效益)的可扩展性和更高的可靠性(当您跨节点运行时,您没有单点故障)。请务必了解 VM 上的存储何时/何地是持久的还是短暂的。还有更多考虑因素,但这些是主要考虑因素。

您可能想查看Windows Azure Pricing calculator。

祝你好运!欢迎来到云端。

【讨论】:

【参考方案2】:

除了扩展问题和 2 台物理服务器之外,您可以将此功能移动到托管环境中,从技术上讲,您将处于“云”中。这可以是专用服务器或 VPS(虚拟专用服务器),如果您很小,甚至可以是共享服务器。

这些可以随着时间的推移而增长......您只需要升级您在提供商处拥有的东西。

您还可以使用托管服务提供商的托管服务器,这基本上意味着您将硬件放在托管服务提供商的机架中,并使用他们的电力和带宽。他们根据带宽使用情况收费。

由于您使用的是 SQL Express,请记住每个数据库限制为 8gb。所以这会在某个时候限制你的成长。如果您不想重新设计任何东西,这将需要从 Express 升级到常规 SQL。

【讨论】:

【参考方案3】:

你考虑过AppHarbour吗?它具有 Memcached、MongoDB、SQL Server 和 so on,并且比 Azure 部署得更快。我喜欢 Azure,但学习曲线相当长,而且我发现与 SQL Azure 的连接非常糟糕 - 这意味着重新设计你的 DAL 以使用类似 SQL Transient Failure Library 的东西 = 有点是现有项目的麻烦。

AppHarbour 没有 Blob 存储 - 因此,如果您要上传文件,则需要使用 Azure Blob 存储或 Amazon S3 或类似的东西。

希望这会有所帮助。

【讨论】:

【参考方案4】:

不是专家,但由于 Asp.net 是 Microsoft 产品,因此迁移到 azure 应该更容易,尽管据我所知 AWS 应该不难。您可能要考虑的另一件事是成本。我上次检查 AWS 的成本要低得多,除非您已经为 MSDN 订阅付费。

【讨论】:

【参考方案5】:

您总结的所有要求在 Windows Azure 中部署都不是问题。您可以在 Internet 上找到很多有关如何执行此操作的信息。

请记住,如果要将服务部署到 Windows azure,则需要对应用程序进行一些代码审查,以修复 Web 应用程序上的会话状态、输出缓存等。

由于您想扩展它们并且它们位于非粘性循环负载平衡器后面,如果将会话状态保存在机器本身上,您将遇到问题。例如,您需要将会话状态分配给 SQL Azure 或 Windows Azure 表存储。

在 Azure 中安装 MongoB 和 Memcache 不是问题,您会发现很多有关如何操作的信息,但需要一些信息来设置您的角色和脚本

【讨论】:

【参考方案6】:

codingoutloud 给出了非常详细的答案。在将任何应用程序迁移到 Azure(或者实际上是许多其他云提供商)时,我会添加两个非常重要的考虑因素。

当地状态 使用普通 Azure,他们保留随时关闭角色的任何一个实例以移动或升级它的权利。这意味着您始终需要任何一个角色的至少两个实例,并且它们将被透明地负载平衡。如果您当前的网站当前在单独的服务器上运行,那么它们可能依赖于会话状态或本地目录中的文件等。现在,有一些方法可以解决这个问题(比如将会话状态放在 SQL 中,使用 cookie 提供程序获取临时数据,使用共享驱动文件等),或者实际上,绕过 Azure 的许多好处并使用他们的“虚拟服务器”概念,这意味着您不会获得规模优势等。 但是,严重依赖本地状态的网站可能难以迁移到云端。

时区 所有 Azure 服务器均按 UTC 时间运行。如果您习惯于在为单个时区的用户提供服务的专用服务器上运行,那么您很可能会使用 DateTime.Now() 之类的东西,而这与用户的需求并不相符。

我认为上述任何一项都不是 Azure 的限制,我发现它们在迫使您从一开始就构建全局和可扩展的解决方案方面非常有用。但是,在移植现有应用程序时,即使有变通方法,上述问题也可能难以适应。

正如在其他地方也提到的,Azure 有一个学习曲线,并且不知何故,文档 - 尽管它很丰富 - 出于某种原因似乎并没有帮助。但是,一旦你“了解”了它,我就会发现 Azure 非常棒,并且有许多微妙的功能可以帮助你构建可扩展的解决方案,比如整个排队基础设施、blob 存储和表存储。在某些方面,学习因选择过多而受到阻碍。

祝你好运!

【讨论】:

以上是关于我可以将我的 asp.net 应用程序移动到云端吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以将我的 Web 应用程序 Vuejs 移动到 NativeScript-Vue 吗?

我需要在 asp.net Core 中创建 XSRF 中间件吗?

我正在将我的 asp.net web api 迁移到 asp.net core。 Cors 迁移

升级到 ASP.NET 3.x

离线Phonegap构建

将生成的asp.net内容的内容向左移动