单独的工作者角色与 Windows 服务以及另一个角色

Separate Worker Role vs Windows Service alongside Another Role

Windows 服务应用程序可用于创建具有自己的会话的长 运行ning 应用程序。它们对 运行 在后台很有用,不会干扰主要(或业务线)应用程序。在 Azure 上 运行 这些应用程序的方法可以通过启动任务定义与实际角色一起完成(参见 1, 2)。

另一方面,Worker Role 本身一直在后台工作,就像长期运行ning 任务一样。在 RoleEntryPoint 定义之上,开始、停止和 运行ning 过程可以更容易地处理,我想通了(OnStart()OnStop()Run() 方法)。事实上,该角色还提供了更新实时配置的能力。另外,还给出了性能指标。同样,您可以在提升模式下 运行 辅助角色。

在这方面,如果我们将 运行 后台任务与 Windows 服务以及另一个角色和单独的 Worker 角色进行比较,后一种方法似乎更有优势。仍然有任何理由选择前者吗?如果有,有什么优势?

假设这里的任务是监控。后台任务将收集应用程序 运行ning 在其他角色上输出的 ETW 事件,并将它们保存到持久性存储中。

两者并不相互排斥。您仍然可以安装 Windows 服务,即使是辅助角色(特别是如果软件 ID 专门为 运行 设计并以这种方式进行管理)。要以工作者(或网络)角色执行此操作,您只需要捆绑(或下载)适当的安装程序来设置您的服务。

worker / web 角色脚手架本身可以让你 运行 在你的 Windows VM 中几乎任何东西。不要将其视为后台任务。您拥有完整的虚拟机供您使用。您需要通过启动 cmd 脚本 and/or OnStart() 进行设置。并且您需要通过处理 Run() 来管理 VM 实例的生命周期(以防止重新启动)。您可以启动线程、设置并行任务等等。

现在:无论您是选择编写新服务还是仅依赖 web/worker 脚手架:这取决于您和您的特定应用,我不想将其设为 subjective/opinion-based 答案. :)

还有一件事:当您构建 Windows 虚拟机(而不是 web/worker 类型)时,您没有角色实例的脚手架,服务可能是在那种环境下更有价值。