当前位置: 首页 > 编程语言 > C#

高负载服务器的负载均衡,使用WCF和MSMQ分享

时间:2023-04-10 15:35:51 C#

高负载服务器的负载均衡,使用WCF和MSMQ目前正在开发一个空间数据处理服务器。以下是要求:服务器必须能够每秒接收和处理大约150-200条小消息(GPS定位,一些其他数据)。它必须是可扩展的。例如,在多台机器上运行并平衡负载本身(没有nlb)目前我已经测试了这种架构:Incomingmessageservice,responsibleforgettingmessagesonly(withoutmsmqwcfbindings)Messageparserservice.从msmq获取消息,解析它们并写入数据库,同时向下一个服务发送通知(再次使用正常的MSMQ互操作)。这可以在多台PC数据发布服务上工作。包含小缓存并负责从数据库中获取请求的数据。通过wcf使用TCP绑定向客户端发送通知。此外,所有服务都有配置方法和一些通过WCFTCP绑定调用的其他任务。小型性能测试表明它工作得非常快,但我想知道这是否是将这些MSMQ和WCF一起用于此特定应用程序的最佳方式。或者也许有人可以给我一个指导方向?我不太确定你有什么具体问题,它看起来更像是一个一般的设计问题,但因为我喜欢MSMQ,所以我会在这里问。MSMQ确实有一些缺点,尤其是在负载平衡事务性消息方面,但总的来说它非常棒。但是,您的要求都没有提到使用MSMQ的任何具体原因:持久性、可恢复的消息传递、断开连接的客户端等。所以我假设您有其中一些要求,但没有明确指出它们。要求#1应该很容易满足/击败,特别是如果这些是小消息并且没有执行明显的逻辑(例如,只是香草插入/更新)并且MSMQ可以很好地处理竞争消费者。要求#2除非您将MSMQ用于事务性消息传递,否则不可能对MSMQ进行负载平衡以进行扩展,但它有一些注意事项。如何负载平衡MSMQ?请参阅如何对MSMQ进行负载平衡:一些简短的讨论(如果您还没有)。除了负载平衡MSMQ的潜在问题(没有一个是无法克服的)之外,这种方法没有任何问题。扩展MSMQMSMQ在垂直方向(同一台机器)和适度水平方向(多台机器)上都能很好地扩展。然而,MSMQ真正做到高可用却很难,这可能是问题,也可能不是问题。请参阅此答案中已有的链接,了解如何使其高度可用。垂直扩展当垂直扩展MSMQ时,有许多队列读取器在一台机器上运行,从一个队列读取。MSMQ处理得很好。我们所有的队列数据都临时存储在本地机器上。如果我们丢失了托管队列的机器会怎样?客户端可以发送并且消息将堆积在客户端的传出队列中,但在服务器恢复之前我们无法接收它们。队列中的消息会怎样?如果不引入某种高可用性支持磁盘子系统,它们很可能会消失。即便如此,将另一个队列“连接”到该数据文件仍然是一个挑战。理论上,你可以把它们找回来。实际上,从边缘系统重新发送消息可能更容易。根据交易量的不同,队列大部分时间可能是空的,因此需要在数据丢失的风险和使其高度可用的工作量/成本之间进行权衡。水平缩放当水平缩放MSMQ时,每个处理机器有一个队列实例。每台机器可能有[n]个阅读器,用于在机器上运行,从队列中接收消息。我们所有的队列数据都临时存储在几台机器上。您可以使用文档中描述的任何方法对MSMQ进行负载平衡,但是,我的经验几乎总是与应用程序负载平衡有关,称为软件负载平衡:客户端有一个可用的msmq端点列表。.托管队列的每个服务器都受到与单个队列相同的可用性问题的影响。您可能还想查看商业证书MSMQ的九个技巧,以获取一些额外的MSMQ相关信息。感谢您的回答和链接。我正在寻找msmq作为大量消息的可靠传输方式。每天1-2毫克。另外,保证服务器端的这些消息在服务器工作过程中不会丢失是非常重要的。所以我认为我需要持久性、可恢复的消息传递、断开连接的客户端等。至于负载平衡:主要负载将是数据解析和数据发布服务。这个想法是将原始消息推送到一个队列中,例如在不同的PC上有3个数据解析服务实例来解析来自它的消息并将它们存储在一个数据库中。与数据发布服务相同。或者,就像在StockTrader中一样,将通道缓存到节点并使用wcf向它们发送消息。此外,我找不到有关msmqwpf绑定的性能和可伸缩性的信息。尝试过StockTrader,但它对于测试目的和快速分析来说有点太复杂了。再次感谢您的回答。真的只是听谈话,但我认为MSMQ实际上会通过缓冲消息来帮助提高并发性。服务器永远不会因为从队列中读取而被淹没吗?这将改变处理混乱的组件的问题,从“基于事件的”并发(如在Web服务器上)到更简单的拉动机制。如果您仍处于新建设计阶段,您可能还想看看CCR和DSS,它们也可以帮助提高并发性。非常令人印象深刻的东西,但是如果您只需要将消息存储在数据库中,它可能对您没有帮助。以上就是C#学习教程:高负载服务器的负载均衡,使用WCF和MSMQ分享全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: