python - 以下场景必须使用哪种 ZMQ 模式?

标签 python zeromq

我最近开始学习 ZMQ (Python)。我必须承认,我发现很难理解 PUSH/PULLDEALER/ROUTER 模式。

我的问题陈述如下:

  1. N 个客户端(例如 100)将在 10:00:00(小时:分钟)发送请求(查询某些数据、访问资源等) :秒)上午
  2. 服务器必须在上午 10:00:00 处理所有 N 请求。
  3. 假设一个请求需要 30 秒才能完成,所有客户端 (100) 必须在上午 10:00:30 收到响应
  4. 我应该使用哪种 ZMQ 模式?

I understood that REQ/REP is synchronous and I can't use that pattern to solve the particular problem. (Server can process only one request at a time)

请帮助我提供示例程序/链接以使用 ZMQ 开发客户端/服务器应用程序。 (服务器必须至少一次处理 100 个请求)

如果第二天请求的数量增加,我可以使用 ZMQ 进行扩展吗?
如果可以,如何扩展?

最佳答案

你有 N 客户端和 1 个服务器。
服务器将无法完成 N 同时请求。
显然,服务器可以开始处理N使用 crontab 或其他调度机制在上午 10:00:00 整请求。

合适的 ZMQ 模式似乎是 PUSH/PULL 。参见 http://zguide.zeromq.org/page:all

并导航到 Figure 6 - Fair Queuing.

回答您的缩放问题:您可以将服务器视为请求的单个入口点,在服务器后面有一定数量 ( >= N ) 的并行工作程序。此架构显示在 Figure 20 - Multithreaded Server 中。 .

该架构理论上可以解决并发问题,但有几点重要说明:

  1. 真正的并行执行只有在您为每个工作人员配备单独的 CPU 内核时才可用(注意:它们可能分布在使用 tcp:// 地址的多台机器上)。如果你有 < N内核可用,您最终会遇到并行工作而操作系统再次使其顺序工作的情况。

  2. 如果 worker 上的执行时间受 I/O 限制(即数据库查询、文件系统访问等),请将您的图形分割成更小的节点,并只使受 CPU 限制的任务并行。

  3. 单个服务器,即使它只将请求转发给工作池,也是可扩展性的限制。在您的设计中,您需要做出与 CAP theorem 相关的选择。 .

关于python - 以下场景必须使用哪种 ZMQ 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008032/

相关文章:

python - 为什么这个用于分布式计算的 Python 0MQ 脚本会在固定输入大小时挂起?

real-time - 从主机 A 向主机 B 发送消息的最快(最低延迟)消息队列解决方案是什么?

python - 从源构建 TensorFlow 时,生成 `gen_io_ops.py` 文件的 bazel 规则在哪里?

python - 使用 Flask 的 Apache Web 服务器,部署我的 Web 应用程序

javascript - 如何让 ZMQ 路由器在繁忙时引发错误?

bash - 如何修复 "missing some pkg-config macros"错误?

sockets - ZeroMQ:我们可以 .bind() 100+ 个套接字到同一个端点吗?

python - 我如何在 python tornado 中使用日志记录并写入文件

python - 如何修改 gzip 压缩的 tar 文件中的文件?

Python 类属性