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