【问题标题】:ZeroMQ Choosing Correct Client-Worker Model for a Call CenterZeroMQ 为呼叫中心选择正确的 Client-Worker 模型
【发布时间】:2018-02-08 11:49:29
【问题描述】:

我有一个项目需要用 Perl 编写,所以我选择了 ZeroMQ。

有一个客户端程序,为可变数量的工人生成工作。工人是真正的人类操作员,他们将完成一项任务然后请求一项新任务。客户端程序的工作是让所有可用的工作人员整天忙碌。这是一个呼叫中心。

所以每个工人一次只能处理一个任务,并且可能需要一段时间才能请求新任务。并且一天中工作人员的数量可能会有所不同。

客户端需要保留一个任务队列,以便在工人请求时将其提供给他们。每当客户端队列变低时,客户端可以生成更多任务来填充队列。

我应该为此使用什么设计模式(即什么 ZeroMQ 套接字组合)?我浏览了 0MQ 指南中的所有模式,但找不到与此匹配的任何内容。

谢谢

【问题讨论】:

  • ZMQ 看起来更像是用于进程间通信。 SQL表可以很方便地用作队列,并且具有持久性。
  • 谢谢。这就是我们开始的地方,不幸的是,我们最终遇到了 MySQL 表上的锁定问题。
  • select for update 不会引起问题。 Redis 列表也可以用作队列。
  • 《指南》中的负载平衡代理听起来很合适。可能会扩展一些可靠性模式。

标签: perl design-patterns zeromq


【解决方案1】:

当然。 ...没有一个单一的、单独的原型来匹配需求列表
使用几个 ZeroMQ 可扩展的正式通信模式

典型的软件项目使用许多 ZeroMQ 套接字(具有各种原型)作为某种形式的节点-节点信号和消息传递平台。

需要注意的是,自动化负载平衡器可能适用于自动化流程,但对于由人类执行或与人类交互的流程并非总是如此。

人类(呼叫中心座席和他们的线路主管)引入了另一层需求 - 有时需要引入非循环工作负载分配逻辑,有时需要将呼叫从座席 A 切换到另一个代理 B(如果它的硬连线逻辑遇到冲突,那么一个微不足道的原型根本无法做到并且可能会遇到麻烦(相互阻塞的REQ-REP stale-mate 就是这样一个例子)。

因此,只需忘记等待一个超级强大的原型,而是创建一个智能行为网络,这将涵盖您的分布式计算问题所需的事件处理。

还有很多其他方面,在使用第一个 ZeroMQ 套接字之前应该学习。

  • 故障恢复能力

  • 性能扩展

  • 延迟分析(高优先级语音流量与低优先级日志记录)

  • 看门狗确认和超时情况处理

  • 交叉兼容性问题(版本 2.1x vs 3.x vs 4.+ API)

  • 对故障代理/恶意攻击/致命虚假流量风暴的处理稳健性......仅举几个问题

所有这些在ZeroMQ工具箱中都有一些内置,其中一些可能需要一些高级思考,以便处理已知的约束。


最好的下一步?

A 会提倡 Pieter HINTJENS 的精彩著作“Code Connected, Volume 1”——对于认真对待分布式处理的每个人来说,这是一本必读的书——不要犹豫,check other my posts 寻找此 ZeroMQ 圣经的 PDF 版本 的直接 URL。

值得付出时间和眼泪和汗水。

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 2022-07-11
    • 2020-12-23
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    • 2023-03-26
    相关资源
    最近更新 更多