SignalR 参与者或无状态服务
SignalR Actors or Stateless Services
我正在考虑将应用程序迁移到 Azure 上的 Service Fabric 运行。这是一个使用 SignalR 的实时聊天式应用程序。我想要一个服务 运行 的实例,为用户在其中进行通信的每个 "affinity group" 自托管一个 SignalR 集线器(通过 OWIN)。这样我就可以避免使用背板横向扩展 SignalR。我希望能够在用户组进入和离开我的应用程序时上下旋转这些服务。我希望我可以在每个 VM 上托管数十个这样的服务,典型的负载是每组数百个用户。
我的想法是我有一个服务定位器,客户端最初连接到该服务定位器以发现哪个服务(端口)正在托管他们的组。当该组的第一个请求进入时,我还会有一个启动聊天服务实例的服务。
我如何在 Azure 上的 Service Fabric 中构建它,以便 a) 每个 services/actors 都可以通过 SignalR 客户端从 Internet 访问? b) 在 n
个总群组中,我只提供 运行 个必要的服务来为 m
个活跃群组提供服务?对这个应用程序的需求是非常短暂和尖锐的,所以我希望利用服务是简单的过程,可以在几秒钟内提供的事实,而不是我当前的场景,我必须启动整个云服务并等待数十分钟来处理尖峰(此时为时已晚)
你会做几件事:
有一个 "service manager service" 拦截初始加入请求并动态创建新的 Service Fabric 服务(如果它们尚不存在)或者如果它们已经存在则解析服务的当前位置和然后 return 给客户端的地址
- 或者,他们可以只传回内部服务名称(如果您可以公开该信息),客户端可以进行解析,然后进行连接。在某种程度上,这将取决于您想要向客户端公开多少信息,您是否可以或想要将其修改为 "know about" Service Fabric 等。
然后客户端将直接连接到实际的支持服务
你必须想出某种机制让实际的聊天服务知道没有人离开并删除自己或通过管理器返回。
您最好将聊天服务建模为 Reliable Service 而不是 actor,因为 Reliable Services 堆栈允许更灵活地围绕通信 protocols/stacks.
我正在考虑将应用程序迁移到 Azure 上的 Service Fabric 运行。这是一个使用 SignalR 的实时聊天式应用程序。我想要一个服务 运行 的实例,为用户在其中进行通信的每个 "affinity group" 自托管一个 SignalR 集线器(通过 OWIN)。这样我就可以避免使用背板横向扩展 SignalR。我希望能够在用户组进入和离开我的应用程序时上下旋转这些服务。我希望我可以在每个 VM 上托管数十个这样的服务,典型的负载是每组数百个用户。
我的想法是我有一个服务定位器,客户端最初连接到该服务定位器以发现哪个服务(端口)正在托管他们的组。当该组的第一个请求进入时,我还会有一个启动聊天服务实例的服务。
我如何在 Azure 上的 Service Fabric 中构建它,以便 a) 每个 services/actors 都可以通过 SignalR 客户端从 Internet 访问? b) 在 n
个总群组中,我只提供 运行 个必要的服务来为 m
个活跃群组提供服务?对这个应用程序的需求是非常短暂和尖锐的,所以我希望利用服务是简单的过程,可以在几秒钟内提供的事实,而不是我当前的场景,我必须启动整个云服务并等待数十分钟来处理尖峰(此时为时已晚)
你会做几件事:
有一个 "service manager service" 拦截初始加入请求并动态创建新的 Service Fabric 服务(如果它们尚不存在)或者如果它们已经存在则解析服务的当前位置和然后 return 给客户端的地址
- 或者,他们可以只传回内部服务名称(如果您可以公开该信息),客户端可以进行解析,然后进行连接。在某种程度上,这将取决于您想要向客户端公开多少信息,您是否可以或想要将其修改为 "know about" Service Fabric 等。
然后客户端将直接连接到实际的支持服务
你必须想出某种机制让实际的聊天服务知道没有人离开并删除自己或通过管理器返回。
您最好将聊天服务建模为 Reliable Service 而不是 actor,因为 Reliable Services 堆栈允许更灵活地围绕通信 protocols/stacks.