将 Windows 服务移植到 Azure 的最佳实践是什么?应该将其更改为 Worker 角色还是移至 VM 角色?还有其他选择吗?假设我的服务写入外部持久性源(MSMQ、数据库、WCF)而不是直接写入文件系统。
3 回答
将 Windows 服务转换为 Worker-Roles 比 VM 角色要好得多。VM 角色旨在容纳需要复杂的非自动化安装过程的应用程序。管理它们也是一个更大的痛苦,您希望尽可能远离 VM 角色。如果您能找到一种通过 Worker-Roles 自动部署现有 Windows 服务的方法,那么这绝对是可行的方法。
您还可以查看 HPC 角色,并根据本地/非本地和负载/计算要求,将 Azure 机器添加到您的 HPC 集群中可能会有所帮助。
所有类型的角色(Web/Worker/VM/HPC)都是无状态的,并且需要能够根据需要从头开始启动或拆卸。所有类型的角色都意味着一次运行多个 VM 实例。
高温高压
不久前我写了一篇关于这个的博客文章。是这里:
http://blogs.msdn.com/b/golive/archive/2011/02/11/installing-a-windows-service-in-a-worker-role.aspx
请注意,Windows 服务不会直接与结构控制器通信,因此您需要定期 ping 它以检查运行状况,然后根据需要采取补救措施。
将 Windows 服务放入工作人员或 Web 角色是公认的做法。使用 VM 角色的主要原因是是否需要大量(> 10 分钟)设置。我的博客文章详细介绍了如何安装您的服务。
当然,如果你想把代码移到 worker 角色中,那也没问题。在这种情况下,您不需要任何特殊步骤来确保结构控制器了解其运行状况。
如果成本是一个问题,将功能组合到 web/worker 中也是公认的做法。而且您可以通过不处理您的代码来将其保存到网络/工作人员中来保存。
Azure 有一种特殊类型的 Web 角色,称为“WCF 服务 Web 角色”,它对应于 Windows WCF 服务。这是迁移现有服务的好方法。理想情况下,迁移之后应该利用 Azure 的特定功能,例如使用队列和工作角色来最大限度地提高性能和可扩展性。