首页 文章

Azure架构和角色通信

提问于
浏览
0

我有一个应用程序,包括Azure中的多个托管服务 . 两个是Web角色,一个是工作者角色 . 问题是,现在需要沟通两个角色 . 一个是用作管理界面的Web角色 . 另一个是 Worker 角色 . 管理界面需要发出命令,例如暂停任何正在运行的作业,报告状态等 . 第二个Web角色只是一个站点,与前两个无关 .

(仅作为序言,我想确保我对Azure术语的使用是正确的):

  • 托管服务:Azure“应用程序” . 具有两个部署, 生产环境 和暂存的多个角色

  • 部署:具有单个外部 endpoints (* .cloudapp.net)的所有角色的特定实例( 生产环境 或登台)

  • 角色:单个“工作”,可以是Web角色,也可以是工作角色 .

  • 实例:为角色提供服务的VM

还要验证:是否可以向现有托管服务添加角色?也就是说,如果我从一个解决方案部署2个角色,我可以从另一个解决方案中在另一个部署中添加第三个角色吗?

因为每个角色都在自己的托管服务中,所以它会带来一些挑战 . 以下是我对他们如何沟通的选择的理解:

  • 服务总线:从架构的角度来看,这似乎是最好的 . 每个托管服务都可以将WCF服务连接到服务总线,管理员可以向工作者角色发出命令 . 缺点是这是相当昂贵的成本 .

  • 内部 endpoints :如果将成本考虑在内,这似乎是最好的 . 缺点是您必须立即部署所有角色,并且Web角色不能具有唯一的地址 . 从外部访问两个Web角色的唯一方法是使用端口转发 . 据我所知,从一个解决方案部署2个角色,从另一个解决方案部署1个角色是不可能的?

  • 外部WCF服务:每个组件可以位于单个项目和单个托管服务中 . 缺点是现在有一个外部可见的管理服务 .

  • 队列/表存储:管理员可以将命令写入Azure队列,工作者角色可以将其响应写入表存储 . 这对于生成报告似乎很好,但对于发出同步命令似乎并不好 .

所有服务“应用程序”的多个角色是否都应该进入同一个Azure托管服务?如果从逻辑角度来看它是最有意义的,那么我很乐意选择#2来处理端口转发 .

1 回答

  • 1

    首先,你的定义看起来很不错,我认为你很清楚这个问题 .

    此外,对于每个部署,每个外部 endpoints 只能分配给一个角色 . 因此,如果您想在端口80上运行两个站点,那么它们必须是in the same role . 这就像在具有相同端口的IIS上设置两个站点(这正是您想要进行的努力,或者如果您想单独部署站点,那么您将需要放置您的独立站点在自己的服务/ Cloud 项目中 .

    对于通信部分,您错过的一个选项是服务总线队列 . 微软发布了library using service bus queues that is specifically designed for inter-role communication .

    除此之外,对你的要点有额外的评论:你是正确的内部终点是最便宜的方式,但你将自己滚动它 . 当然,它可以设置WCF服务来监听这些内部 endpoints .

    外部WCF服务可能正常工作,但如果您有多个角色实例,则所有WCF调用都将通过负载均衡器,并且该消息将仅发送到其中一个实例 . 您需要进行多次调用以确保所有实例都收到该消息,即使这样,您也无法确定它是否在没有其他反馈方法的情况下工作 .

    存储队列遇到类似的问题 . 如果您有两个实例并希望它们都收到相同的消息,则无法保证会发生这种情况 .

相关问题