我已经看到了这个问题的变体,但找不到任何与我们的特定场景有关的内容。
我们现有一个链接到SQL Server数据库的aps.net网站。 数据库具有clr用户定义的类型,因此它只能在Azure VM中托管,因为云服务不支持所述类型。
我们最初想使用vm作为前端的数据库和云服务,但随后出现了一些问题:
我们正在寻找一种快速解决方案,让这款应用程序尽快上线,并且成本可控。我们正在拼命试图避免重新分解我们的代码,以适应Azure云服务中托管部分应用程序。
问题:
答案 0 :(得分:0)
要使用CLR等运行SQL Server,您需要在虚拟机中运行SQL Server。
对于Web层,云服务(Web角色)具有优势,因为它们是无状态 - 非常容易扩展/扩展而无需担心操作系统设置。应用程序设置是在启动时通过启动脚本完成的。如果您可以适当地托管会话内容,则无状态模型将更易于扩展和维护。但是:如果您要执行任何类型的复杂安装需要一段时间(或手动干预),那么虚拟机可能确实是更好的路径,因为您可以构建VM,然后从该VM创建主映像。您仍然需要处理操作系统和应用程序维护问题,就像在本地环境中一样。
让我在关于后台流程的第3篇子弹中纠正你。云服务的Web角色(或工作者角色)实例仅仅是Windows Server VM,其中包含一些用于启动和进程监视的脚手架代码。每个人都不需要单独的角色。随意在单个Web角色上运行您的整个应用程序并向外扩展;你只是在非常粗糙的水平上进行缩放。
答案 1 :(得分:0)
要考虑的一些事情......
如果您想要便宜,可以通过添加RoleEntryPoint让您的web / worker角色在一台计算机上共享相同的代码。这是一篇文章,实际上展示了如何通过发送电子邮件来做你想做的事情: http://blog.maartenballiauw.be/post/2012/11/12/Sending-e-mail-from-Windows-Azure.aspx
在SQL Azure数据库中会话管理非常缓慢,如果可以,我会使用Azure缓存。这很快。
带有VM的SQL Server会给您带来麻烦,因为您还需要在该服务与任何云服务之间创建虚拟网络。这真的很愚蠢,但如果您部署云服务和VM,它们会通过PUBLIC LOAD BALANCER进行通信,从而导致潜在的安全问题和网络延迟。所以,首先你需要虚拟网络(这是一个额外的成本)..然后你还需要托管DNS服务器来解决SQL Server VM。是的,这真的很愚蠢,除非您的网络/工作人员角色可以通过互联网与您的SQL Server进行通信:)
编辑:将“公共互联网”更改为“公共负载均衡器”(并注明延迟)
编辑:上述信息100%正确,与David下面的评论相反。请阅读Microsoft的指导:
http://msdn.microsoft.com/library/windowsazure/dn133152.aspx#scenario
直接来自MICROSOFT GUIDANCE谈论跨云服务通信(VM->网络/工作者角色):
“我们建议您实施第一个选项,因为连接过程不需要通过公共互联网。因此,它将提供更好的网络性能。”
截至今天(2013年8月29日)Azure虚拟机和工作人员/ Web角色已部署到不同的“云服务”中。因此,需要通过在实例之间公开私有IP地址的虚拟网络来保护它们之间的通信。
跟进David的观点,关于添加ACL。您仍在使用TDS(SQL Server协议)通过Internet发送数据包。这可以加密,但没有理智的架构师/企业治理/安全治理会“允许”在生产环境中发生这种情况。