1

我知道这是两个不同的系统,目的略有不同,但在某些情况下,它们可以服务于相同的目标,我想知道将我们的一些服务从 NServiceBus (NSB) 迁移到 Orleans 或 MS 有多容易服务结构。我花了几个小时从高层次上了解 Orleans 和 MS Service Fabric 是什么,但有些问题没有得到解答。我能否列出一些我想在迁移中保留的 NSB 功能,希望您能判断 Orleans 或 Service Fabric 是否支持类似的功能:

  1. 在 NSB 中,我们可以设置服务应该运行的最大线程数,以便我们可以优先考虑具有低延迟的服务而不是具有高延迟的不太关键的服务。我可以在单个或多个应用程序服务器上配置最大数量的实例,特定于 Orlean 的谷物应该在其下运行吗?我说的是具有不同 ID 的谷物

  2. 我们的一些服务依赖于可能暂时不可用的第三方服务调用。如果抛出异常并且消息通过配置的重试次数运行。如果处理该消息的所有进一步尝试都结束了(服务仍然不可用),则该消息将被放入错误队列中,我们可以在其中看到它并在第三方服务恢复正常时随时重新处理。我知道我们可以在 Orleans 之上实施其他工具以拥有类似的系统,但是 Orleans 或 MS Service Fabric 是否在消息重试和在特殊位置或特殊状态下失败的消息/呼叫存储方面提供开箱即用的东西?

  3. 在极少数情况下,当我们的系统因客户端发起的传入消息而过载时,消息会卡在传入队列中,系统会尽其所能处理,而所有其余消息都在等待轮流按照“先到 -先到先得”的原则。我猜奥尔良不能满足这个要求,因为它听起来更像是一个纯粹的排队概念,但以防万一有人知道如何将它迁移到奥尔良,比如集成到某种排队系统

4

2 回答 2

1

Orleans 或 Service Fabric Reliable Actors:这些是(虚拟)actor 的类似解决方案,但有不同的权衡。https://richorama.github.io/2016/07/08/orleans-vs-service-fabric/

Orleans 和 Service Fabric无状态服务:您可以在 SF 上运行 Orleans,您可以获得 Orleans 版本的虚拟演员和 SF 的弹性。

NServiceBus vs Orleans(注意:我只有非常基础的 NServiceBus 知识):NServiceBus 来自无状态世界,您可以在其中持久化消息以提供可靠性,Orleans 来自有状态世界,您可以在其中持久化参与者状态以提供可靠性。是的,NServiceBus 中有 Sagas,Orleans 有 Streams,所以你可以在任何地方实现任何东西,尽管这些不同的方法(应该)会影响你的架构设计。

答1:奥尔良粮(演员)不是服务,千、百万、亿粮给你一个服务。所以你不能微调grain之间的调度。Orleans grain 并不是所有 T 类型消息的处理程序,通常你有大量的 grain,grains 更像是一个对象而不是一个类。

答案 2、3:您可以使用 Orleans 流实现这些传入和传出消息队列(这基本上是一个好概念),尽管 Orleans 没有为您的错误队列、重新处理等提供开箱即用的解决方案。但是Orleans流不是一个简单的队列,通常你有大量的流,流是grain的运行时可变通信图,因为grain的数量很大,所以流的数量也很大。由于 Orleans 为您提供了 async/await 抽象,而不是处理谷子之间的低级双向消息传递,因此流是多个单向消息的抽象。

于 2017-10-15T08:57:37.447 回答
0

NServiceBus 端点可以完美地托管在 Service Fabric 中。如果您选择无状态托管,则不会发生任何变化。请参阅示例https://docs.particular.net/nservicebus/hosting/service-fabric-hosting/,它展示了如何在 Service Fabric 中设置托管

于 2017-10-12T08:47:03.353 回答