SignalR演员或无状态服务

时间:2016-05-04 02:03:32

标签: azure azure-service-fabric

我正在考虑将应用程序迁移到在Azure上运行的Service Fabric。它是使用SignalR的实时聊天式应用程序。我想让一个服务实例运行,为每个"亲和团队自我托管一个SignalR中心(通过OWIN)"用户正在进行通信。这样我就可以避免使用背板扩展SignalR。我希望能够在用户组进入和离开我的应用程序时上下旋转这些服务。我希望我可以为每个VM托管数十个这样的服务,每个组的典型负载为数百个用户。

我的想法是,我有一个服务定位器,客户端最初连接到该服务定位器以发现哪个服务(端口)正在托管其组。我还有一个服务,当第一个对该组的请求进入时,该服务会启动聊天服务的实例。

我如何在Azure上的Service Fabric中构建这一点,以便a)每个服务/演员都可以通过互联网上的SignalR客户端访问?和b)我只运行尽可能多的服务,以便在m个小组中提供n个有效群组?对这个应用程序的需求是非常短暂和尖锐的,所以我希望利用这样一个事实,即服务只是简单的流程,并且可以在几秒钟内配置,而不是我当前的情况,我必须整个云服务并等待数十分钟来处理峰值(此时为时已晚)

1 个答案:

答案 0 :(得分:2)

你会做一些事情:

  • 有一个“服务管理器服务”拦截初始加入请求并在运行时创建新的Service Fabric服务(如果它们尚不存在)或者它们是否已存在解析服务的当前位置然后返回该地址给客户

    • 或者他们可以只传回内部服务名称(如果您可以公开该信息),客户端可以进行解析然后连接。在某种程度上,这将取决于您希望向客户端公开多少信息,您是否可以或想要将其修改为“了解”Service Fabric等。
  • 然后,客户端将直接连接到实际的支持服务

  • 您必须为实际的聊天服务提供某种机制才能知道没有人离开,要么自行删除,要么通过管理员返回。

  • 您可能最好将聊天服务建模为可靠服务而不是演员,因为可靠服务堆栈允许更灵活地围绕通信协议/堆栈。