我最近开始学习 ZMQ (Python)。我必须承认,我发现很难理解 PUSH/PULL
和 DEALER/ROUTER
模式。
我的问题陈述如下:
N
个客户端(例如 100)将在 10:00:00(小时:分钟)发送请求(查询某些数据、访问资源等) :秒)上午- 服务器必须在上午 10:00:00 处理所有
N
请求。 - 假设一个请求需要 30 秒才能完成,所有客户端 (100) 必须在上午 10:00:30 收到响应
- 我应该使用哪种 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
中。 .
该架构理论上可以解决并发问题,但有几点重要说明:
真正的并行执行只有在您为每个工作人员配备单独的 CPU 内核时才可用(注意:它们可能分布在使用
tcp://
地址的多台机器上)。如果你有< N
内核可用,您最终会遇到并行工作而操作系统再次使其顺序工作的情况。如果 worker 上的执行时间受 I/O 限制(即数据库查询、文件系统访问等),请将您的图形分割成更小的节点,并只使受 CPU 限制的任务并行。
单个服务器,即使它只将请求转发给工作池,也是可扩展性的限制。在您的设计中,您需要做出与 CAP theorem 相关的选择。 .
关于python - 以下场景必须使用哪种 ZMQ 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008032/