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

问题描述 投票:0回答:1

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

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

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

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

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

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

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

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

python oop asynchronous concurrency parallel-processing
1个回答
1
投票

我喜欢建筑类的问题,如果我必须做这个项目,我会怎么做: 工作流程:

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

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

您需要在服务器端关注: - REST API - Redis队列(RQ)Link - 数据库服务器

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

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

© www.soinside.com 2019 - 2024. All rights reserved.