1

我已经看到了这个问题的变体,但找不到任何处理我们特定场景的问题。

我们有一个链接到 SQL Server 数据库的现有 aps.net 网站。该数据库具有 clr 用户定义的类型,因此它只能托管在 Azure VM 中,因为云服务不支持所述类型。

我们最初想使用 vm 作为数据库和云服务作为前端,但后来出现了一些问题:

  1. 我们使用 StateServer 来存储状态,但 Azure 不支持。我们需要配置表存储、SQL 数据库或专用于状态管理的 Worker 角色(新的 Worker 角色是额外的成本)。由于性能,表存储并不理想。其他 2 个选项更可取,但它们会带来成本或应用程序重新配置的缺点。
  2. 我们使用 SimpleMembership 进行用户管理。我们需要将成员表从我们的 vm 实例 sql 服务器迁移到 Azure 的 SQL 数据库。这是一个不便,因为我们希望将所有表保存在同一个数据库中,并且拆分 2 个可能需要进行一些代码更改。

我们正在寻找一种快速的解决方案,以使该应用程序尽快上线,并且成本可控。我们正在拼命地避免重构我们的代码,以适应在 Azure 云服务中托管应用程序的一部分。

问题:

  • 我们应该只使用虚拟机路线来托管所有内容吗?
  • 利用 VM 实例(用于 sql server)和云服务实例(用于前端)是否有任何成本优势?
  • 在我看来,每个添加到云服务的“后台进程”都需要一个新的工作者角色。例如,如果我们想为电子邮件服务启用 smtp,这将需要一个新角色,因此需要更多成本。这个对吗?
4

2 回答 2

0

要使用 CLR 等运行 SQL Server,您需要在虚拟机中运行 SQL Server。

对于 Web 层,云服务(Web 角色)具有优势,因为它们是无状态的- 非常容易横向扩展/缩减,而无需担心操作系统设置。应用程序设置是在启动时通过启动脚本完成的。如果您可以适当地托管您的会话内容,那么无状态模型将更易于扩展和维护。但是:如果您有任何类型的复杂安装需要一段时间(或手动干预)来执行,那么虚拟机确实可能是更好的途径,因为您可以构建虚拟机,然后从该虚拟机创建主映像. 就像在本地环境中一样,您仍然需要解决操作系统和应用程序维护问题。

让我更正你关于后台进程的第三个项目符号。云服务的 Web 角色(或工作者角色)实例只是 Windows Server VM 的,带有一些用于启动和进程监控的脚手架代码。您不需要为每个角色设置单独的角色。随意在单个 Web 角色上运行您的整个应用程序并进行横向扩展;你只会在一个非常粗粒度的级别上进行缩放。

于 2013-08-27T18:06:27.253 回答
0

有些事情要考虑...

如果你想便宜,你可以通过添加 RoleEntryPoint 让你的 web/worker 角色在一台机器上共享相同的代码。这是一篇实际上展示了如何发送电子邮件的帖子:http: //blog.maartenballiauw.be/post/2012/11/12/Sending-e-mail-from-Windows-Azure。 aspx

SQL Azure DB 中的会话管理速度非常慢,如果可以的话,我会使用 Azure 缓存......它很快。

带有 VM 的 SQL Server 会给你带来麻烦,因为你还需要在它和任何云服务之间创建一个虚拟网络。这真的很愚蠢,但是如果您部署云服务和虚拟机,它们会通过公共负载平衡器进行通信,从而导致潜在的安全问题和网络延迟。因此,首先您需要对它们进行虚拟网络(这是额外费用)。然后您还需要托管 DNS 服务器来寻址 SQL Server VM。是的,这真的很愚蠢,除非您的网络/工作人员角色可以通过 Internet 与 SQL Server 通信:)

编辑:将“公共互联网”更改为“公共负载均衡器”(并注意延迟)

编辑:与下面大卫的评论相反,上述信息是 100% 正确的。请在此处阅读 Microsoft 的指南:

http://msdn.microsoft.com/library/windowsazure/dn133152.aspx#scenario

直接来自 MICROSOFT GUIDANCE 谈到跨云服务通信(VM->web/worker 角色):

“我们建议您实施第一个选项,因为连接过程不需要通过公共 Internet。因此,它会提供更好的网络性能。”

截至今天(2013 年 8 月 29 日),Azure 虚拟机和 Worker/Web 角色已部署到不同的“云服务”中。因此,它们之间的通信需要通过在实例之间公开私有 IP 地址的虚拟网络来保护。

要跟进 David 的以下观点,即关于添加 ACL。您仍在使用 TDS(SQL Server 协议)通过 Internet 发送数据包。这可以加密,但没有理智的架构师/企业治理/安全治理会“允许”这种情况在生产环境中发生。

于 2013-08-29T01:24:16.060 回答