我有一个在 Azure 中包含多个托管服务的应用程序。两个是 Web 角色,一个是工作者角色。问题是,现在需要两个角色进行通信。一种是用作管理界面的 Web 角色。另一个是工人角色。管理界面需要发出命令,例如暂停任何正在运行的作业、报告状态等。第二个 Web 角色只是一个站点,与前两个无关。
(作为序言,我想确保我对 Azure 术语的使用是正确的):
托管服务:Azure“应用程序”。具有两个部署、生产和登台的多个角色
部署:具有单个外部端点 (*.cloudapp.net) 的所有角色的特定实例,无论是在生产中还是在暂存中
角色:一个单一的“工作”,可以是网络角色或工作者角色。
实例:为角色服务的虚拟机
还要验证:是否可以向现有托管服务添加角色?也就是说,如果我从一个解决方案部署 2 个角色,是否可以在来自不同解决方案的另一个部署中添加第三个角色?
因为每个角色都在它自己的托管服务中,所以它提出了一些挑战。以下是我对他们如何沟通的选择的理解:
服务总线:从架构的角度来看,这似乎是最好的。每个托管服务都可以将 WCF 服务连接到服务总线,并且管理员可以向辅助角色发出命令。缺点是这非常昂贵。
内部端点:如果将成本考虑在内,这似乎是最好的。缺点是您必须一次部署所有角色,并且 Web 角色不能有唯一的地址。从外部访问这两个 Web 角色的唯一方法是使用端口转发。据我所知,不可能从一个解决方案部署 2 个角色,从另一个解决方案部署 1 个角色?
外部 WCF 服务:每个组件都可以在单独的项目和单独的托管服务中。缺点是现在有一个外部可见的管理服务。
队列/表存储:管理员可以将命令写入 Azure 队列,辅助角色可以将其响应写入表存储。这对于生成报告似乎很好,但对于发出同步命令似乎不是很好。
所有服务“应用程序”的多个角色都应该进入同一个 Azure 托管服务吗?如果从逻辑的角度来看它是最有意义的,那么我很乐意使用 #2 并只处理端口转发。