首页 文章

我选择哪一个在azure VM或Azure Worker Role中运行服务?

提问于
浏览
0

我有两个应用程序用于我的客户端,一个是用户安排一些操作的Web应用程序,另一个是每3分钟运行一次的Windows服务并执行计划任务和电子邮件到客户端,两者都独立工作 .

以前这两个应用程序都托管在Azure VM中

最近,我已将我的应用程序转换为Azure Web角色以实现可伸缩性 .

现在我正在为Windows服务实现worker角色 . 但我很少混淆客户端web项目需要可扩展性,所以我将web项目转换为azure web角色

  • 但在什么情况下使用Windows Service作为Azure Worker角色比在VM中运行服务更好?

  • 我是否继续在Azure VM中运行服务?

1 回答

  • 1

    但在什么情况下使用Windows Service作为Azure Worker角色比在VM中运行服务更好?

    将Windows服务移动到Azure辅助角色有几个好处 - 恕我直言,前三个是:

    • Azure Worker Roles are PaaS (Platform as a Service) - 您提供了一个运行代码的'platform'(一个Windows Server VM,但它是从您身上抽象出来的) - 无需管理底层基础架构操作系统,网络,磁盘等 . 这意味着您可以专注于您的代码以及如何工作/扩展/执行等,而不必担心VM是否已启动并正在运行 . 此外,底层Azure Fabric将为您管理故障,如果底层硬件出现故障,则启动一个新的工作实例 .

    • Azure Worker Roles give you the benefit of scale - 因为它们在Azure PaaS平台上运行,所以只需点击几下鼠标,您的代码_2412497就可以通过Azure门户扩展到多个实例 . 扩展可以在队列长度上自动(由底层Azure Fabric触发)(如果您从队列接收消息)或基于平均CPU使用率;或者,您可以手动或按设定的时间表(例如'we do lots of processing overnight so increase the number of workers to 4 from 1am - 6am and then back to 2 for the rest of the day')进行缩放 . 有关扩展工作者角色(aka . 'Cloud Services')的更多信息,请参阅https://azure.microsoft.com/en-gb/documentation/articles/cloud-services-how-to-scale/

    • Similar API to Windows Services - Azure辅助角色的API与Windows服务中公开的API几乎完全相同 - 您有一个OnStart(),OnStop()和Run()方法^允许您轻松地将现有Windows服务移植到 Worker 角色最小化 .

    ^好吧,这些可能不太正确,因为我上次使用WR 's and I can'时已经完全记住界面了几个月左右,但你得到了主意;-)

    我是否继续在Azure VM中运行服务?

    让我在你的问题(我的重点)的背景下回答这个问题:

    我有两个应用程序用于我的客户端,一个是web应用程序,其中用户 schedule some action 和另一个是Windows服务 runs every 3 min 并执行计划任务和 email to client .

    我认为(恕我直言)你需要考虑为 Cloud 开发,而不是传统的开发模式 . 我从中读到的是你有一个web应用程序,它将东西写入持久存储(可能是数据库表);然后,您有第二个服务(您希望迁移到Azure工作者角色)以特定间隔轮询持久性存储,检测是否有任何新客户端要发送电子邮件并发送电子邮件 .

    如果我们要为 Cloud 重新构建这个,我会保持工作者角色,但执行以下操作:

    • Web应用程序向队列发布消息以指示客户端需要通过电子邮件发送 - 此消息可能包含其姓名,电子邮件地址以及可能会进入电子邮件正文的一些数据(如果需要) .

    • 辅助角色将轮询此队列中的消息 . 对于收到的每封邮件,工作者角色将通过您首选的电子邮件提供商发送基于邮件内容的电子邮件(希望他们有一个很好的.Net API - 请不要使用原始SMTP!) . 成功发送电子邮件后,工作者角色将删除队列中的消息 .

    这种方法既可扩展又可重复 - 真正的 Cloud 架构!

    仅供参考,如果您对使用队列方法感兴趣,Azure存储队列或Azure服务总线队列可以在这里工作 . 听起来你有简单的排队要求,因此,存储队列将是一个完美的选择 . 看看他们在这里的比较:https://azure.microsoft.com/en-gb/documentation/articles/service-bus-azure-and-service-bus-queues-compared-contrasted/ .

    希望这可以帮助!

相关问题