我的客户端有两个应用程序,一个是用户安排一些操作的Web应用程序,另一个是每隔3分钟运行一次的Windows服务,执行计划任务并通过电子邮件发送给客户端,两者都独立工作。
以前两个应用程序都托管在Azure VM中
最近,我已将我的应用程序转换为Azure Web角色以实现可伸缩性。
现在我正致力于为Windows服务实现辅助角色。但我很少混淆客户端web项目需要可扩展性,所以我将web项目转换为azure web角色
但在什么情况下使用Windows Service作为Azure Worker角色比在VM中运行服务更好?
我是否继续在Azure VM中运行服务?
答案 0 :(得分:1)
- 但在什么情况下使用Windows Service作为Azure Worker角色比在VM中运行服务更好?
醇>
将Windows服务移动到Azure辅助角色有几个好处 - 恕我直言,前三名是:
Azure工作者角色是PaaS(平台即服务) - 您将获得运行代码的“平台”(Windows Server VM,但是它已从中抽象出来) ()) - 无需管理底层基础架构操作系统,网络,磁盘等。这意味着您可以专注于您的代码及其工作原理/扩展/执行等,而无需担心VM是否已启动并正在运行。此外,底层Azure Fabric将为您管理故障,如果底层硬件发生故障,则启动一个新的工作实例。
Azure工作者角色为您提供扩展优势 - 因为它们在Azure PaaS平台上运行,您的代码“包”可以通过Azure门户扩展到多个实例鼠标点击。扩展可以在队列长度上自动(由底层Azure Fabric触发)(如果您从队列接收消息)或基于平均CPU使用率;或者,您可以手动或按照设定的时间表进行扩展(例如,“我们会在一夜之间进行大量处理,因此将工作人员数量从凌晨1点增加到4点,然后在当天余下时间再增加到2点”)。有关扩展工作者角色(又名“云服务”)的更多信息,请参阅https://azure.microsoft.com/en-gb/documentation/articles/cloud-services-how-to-scale/
与Windows服务类似的API - Azure辅助工具角色的API与Windows服务中公开的API几乎完全相同 - 您有一个 OnStart(), OnStop()和 Run()方法^允许您轻松地将现有Windows服务移植到辅助角色。
^好吧,这些可能不太正确,因为我上次使用WR的时间已经过了几个月左右,而且我完全记不起界面,但是你明白了这一点; - )
我是否继续在Azure VM中运行服务?
让我在你的问题(我强调)的背景下回答这个问题:
我的客户端有两个应用程序,一个是用户安排一些操作的Web应用程序,另一个是每3分钟运行一次的Windows服务并执行计划任务和向客户发送电子邮件 。
我认为(恕我直言)你需要考虑为云开发,而不是传统的开发模式。我从中读到的是你有一个web应用程序,它将东西写入持久存储(可能是数据库表);然后,您有第二个服务(您希望迁移到Azure工作者角色)以特定间隔轮询持久性存储,检测是否有任何新客户端通过电子邮件发送电子邮件。
如果我们要为云重新构建这个,我会保持工作者角色,但执行以下操作:
Web应用程序向队列发布消息,指示客户端需要通过电子邮件发送 - 此消息可能包含其姓名,电子邮件地址以及可能包含的一些数据。电子邮件正文(如果需要)。
Worker Role会轮询此队列中的消息。对于收到的每封邮件,工作者角色将通过您首选的电子邮件提供商发送基于邮件内容的电子邮件(希望他们有一个很好的.Net API - 请不要使用原始SMTP!)。成功发送电子邮件后,工作者角色将删除队列中的消息。
这种方法既可扩展又可重复 - 真正的云架构!
仅供参考,如果您对使用队列方法感兴趣,Azure存储队列或Azure服务总线队列可以在这里工作。听起来你有简单的排队要求,因此,存储队列将是一个完美的选择。在这里查看他们的比较:https://azure.microsoft.com/en-gb/documentation/articles/service-bus-azure-and-service-bus-queues-compared-contrasted/。
希望这有帮助!