天蓝云队列的可扩展性

时间:2016-01-22 09:11:10

标签: wcf azure azure-storage servicebus

在当前的项目中,我们目前并排使用8个工作者角色机器,实际上与天蓝色实际上有点不同

系统简介:

  • 每个工作人员最多启动8个实际连接到云队列并处理消息的进程
  • 每个进程访问三个不同的云队列,用于收集不同用途的消息(增量识别,备份,元数据)
  • 每封邮件都会导致向ERP系统发出WCF调用以收集信息,最后在Re​​Dis缓存中添加已撤消的响应
  • 由于成本和性能,已经在许多小型机器上选择了这种方法。虽然24台单核机器可以执行400次呼叫/ ERP系统,但8台4核机器可以执行800多个呼叫/秒。

现在提出的问题是:当甚至增加机器数量以将性能提高到1200个呼叫/秒时,我们遇到了Cloud Queue的中断。在同一时刻,80%的机器进程不再处理消息。

这里有两个问题:

  1. 这些进程无法进行远程调试,但可以使用dile来获取一些信息。
  2. 我们使用Cloud Queue的GetMessages方法从队列中获取最多4条消息。 Cloud Queue始终以0消息回答。重新连接云队列没有帮助。
  3. 重新启动工作人员确实有帮助,但很快就会导致同样的问题。 我们是否达到了Cloud Queue可扩展性的自然结束,应该切换到Service Bus?

    更新

    我无法完全理解这个问题,我在the natual borders of Cloud Queue中进行了描述。

    总结:

    • TCP连接的数量令人印象深刻。实际上太令人印象深刻(数百个)
    • 返回原始内存大小,让系统再次正常运行

2 个答案:

答案 0 :(得分:1)

根据我的经验,我可以从Azure Cloud Queues获得比服务总线更好的原始性能,但Service Bus具有更好的企业功能(可靠,主题等)。 Azure Cloud Queue每个队列最多可处理2K /秒。

https://azure.microsoft.com/en-us/documentation/articles/storage-scalability-targets/

如果有一些自然分区键,您还可以尝试分区到多个队列。

确保您的进程没有某种线程死锁,这是真正的罪魁祸首。您可以通过在队列挂起并尝试从队列中提取消息时连接到队列来对此进行测试。如果可行的话,那就是你的过程,而不是队列。

另外看看这个设置其他一些显示器: https://azure.microsoft.com/en-us/documentation/articles/storage-monitor-storage-account/

答案 1 :(得分:0)

解决这个问题需要一些时间:

首先概述存储帐户的用法:

  • 我们每天都使用blob存储一次。
  • " normal" Azure提供的开箱即用的对角线也使用相同的存储帐户。
  • 一些控制进程使用小表来每小时存储和读取一次信息。 20分钟
  • 最多可能有800个呼叫/ s试图增加一个数字来计算对ERP系统的呼叫。

当识别出存储帐户处于高负荷状态时,我们会将其拆分。

  • 现在有三个物理存储帐户会占用2个队列。
  • 最初的一个仍然保持高达800 / s的呼叫以增加计数器
  • 诊断仍然是最初的
  • 控制信息也已移动

系统现在运行2周,就像魅力一样。我们从中学到了一些东西:

  • 不,基础设施是"不只是那里"并且它不会无休止地扩展。
  • 即使我们认为我们没有使用"那么多"总结我们使用了相当多的和不受控制的。
  • 没有"最佳做法"在网络的任何地方讲述完整的故事。 ESP。当开始使用存储帐户时,MS的指南会非常有用

存储中的异常处理非常糟糕。即使存储帐户被过度使用,我也会期待某种异常,而不仅仅是在没有任何周围信息的情况下返回零消息 阅读完整的故事:natural borders of cloud storage scalability

更新: 可扩展性有很多影响。您可能对Azure Service Bus: Massive count of listeners and senders感兴趣了解更多陷阱。