python – 以下场景必须使用什么模式的ZMQ?

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

我的问题陈述如下:

> N个客户端(例如100个)将在10:00:00(小时:分:秒)发送请求(查询某些数据,访问资源等)AM
>服务器必须在上午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个请求.显然,服务器可以使用crontab或其他调度机制在10:00:00 AM开始处理N个请求.

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

并导航到图6 – 公平排队.

要回答缩放问题:您可以将服务器视为请求的单个入口点,服务器后面有一个(> = N)个并行工作者.该架构如图20所示 – 多线程服务器.

该架构理论上可以解决并发问题,但有一些重要的评论:

>只有每个工作人员都有一个单独的CPU核心时,才能使用真正的并行执行(注意:它们可能使用tcp://地址分布在多台计算机上).如果你有< N核可用,您最终会将工作并行,并且OS会使其再次顺序.
>如果worker上的执行时间受I / O限制(即数据库查询,文件系统访问等),请在较小的节点中剪切图形,并仅使CPU绑定的任务并行.
>单个服务器,即使它只向工作池发送请求,也是可扩展性限制.在您的设计中,您需要做出与CAP theorem相关的选择.

点赞