最合适的节点服务器通信设计

时间:2019-04-06 16:25:50

标签: python oop asynchronous concurrency parallel-processing

我努力设计项目的一部分。 这个想法是,N个节点(每个节点带有一个摄像机)将不断向服务器发送帧以进行对象检测,然后服务器将向每个节点重新发送一些信息。

目标是可能独立处理每个节点,并能够接收下一帧并同时处理前一帧。

就像在Python中一样,不选择并行运行线程,我正在考虑几种方法(假设我有一个能够并行处理N * 2个线程的CPU:

1)服务器将为每个节点生成两个进程(相互通信)(一个用于接收帧,一个用于对象检测)。 (那些进程将独立于主进程运行)

2)服务器将是单线程且异步的。每个接收到的帧都将提交给进程池进行检测。

3)服务器将为每个节点生成一个线程(一个线程将处理从一个节点接收帧)。每个接收到的帧都将提交到进程池以进行对象检测。

4)服务器将为每个节点生成一个线程,并在该线程中生成两个单独的线程,一个用于接收,一个用于对象检测

哪种方法似乎最有意义?您会提出一些不同的建议吗?

1 个答案:

答案 0 :(得分:1)

我喜欢建筑方面的问题,如果需要执行此项目,我该怎么办。:
工作流程:

  1. 节点将向服务器发送请求,包括帧和节点 ID
  2. 基于节点ID和帧,服务器将使用内存中的redis在队列中创建作业,以跟踪节点发送的作业,并将每个请求存储到数据库中
  3. 服务器将通过在服务器上运行一个工作程序来处理每个作业,该工作程序将从redis队列中获取并处理每个作业。
  4. 更新作业记录:完成后,该作业将被标记为已完成并保存结果。
  5. 节点可以调用服务器以获取节点发布的每个作业的状态。

您需要在服务器上创建REST API接口,以从节点发布作业并将该请求保存到DB,并基于该请求创建作业,并将其推送到Redis队列。工作人员将自动从redis队列中取出作业,并根据处理结果更新数据库记录。

您需要在服务器端进行以下操作:
-REST API
-Redis队列(RQ)Link
-数据库服务器

使用此体系结构,您可以轻松地将轻量级结果立即返回给客户端,并使所有作业都在处理中。 RESTful体系结构是一种广泛使用的体系结构,但是对于耗时的工作,我们使用队列处理器,客户端将向我们发出请求,以检查发布到服务器的任何工作的状态。如果需要,我可以绘制包含更多细节的体系结构。

简而言之::如果客户端服务器架构具有客户端服务器体系结构,则使用REST API进行通信并在内存队列存储中发布每个请求,如果客户端发布的请求是耗时的过程并且具有多个步骤工作要做。使用这种架构,您可以发布任意数量的作业以及多个工作程序,负载平衡器以提高性能。