gpt4 book ai didi

performance - 批量生成http响应

转载 作者:可可西里 更新时间:2023-11-01 17:35:11 26 4
gpt4 key购买 nike

我正在尝试为以下场景寻找架构。我正在构建一个 REST 服务,该服务执行一些可以快速批量计算的计算。假设计算 1 个“项目”需要 50 毫秒,计算 100 个“项目”需要 60 毫秒。

但是,客户端的性质是一次只需要处理1个项目。因此,如果我有 100 个并发客户端,并且我编写了发送一个项目并生成响应的典型请求处理程序,我将最终使用 5000 毫秒,但我知道我可以在 60 毫秒内计算相同的时间。

我正试图找到一种在这种情况下运行良好的架构。也就是说,我想要一些东西来合并来自许多独立请求的数据,处理批处理,并为每个单独的客户端生成等效的响应。

如果你很好奇,所讨论的服务是基于 python+django+DRF 的,但我很好奇这里应用了什么样的架构解决方案/模式,以及是否已经有任何解决方案可用。

最佳答案

首先,您可能会想到反向代理检测所有特定于模式的查询,收集所有这些查询并通过 HTTP 1.1 管道 将其发送到您的应用程序(管道是一种发送大量数据的方式一个接一个的查询数量,并在最后以相同的顺序接收所有 HTTP 响应,而无需在每次查询后等待响应)。

但是:

  1. 流水线很难做好
  2. 你必须编写反向代理代码,因为我不知道如何做
  3. 管道中的一个缓慢响应会阻塞所有其他响应
  4. 您需要一个能够对您的应用程序语言提供多个查询的 http 服务器,如果 http 服务器没有直接编码在您的应用程序中,这种情况永远不会发生,因为通常 http 只处理一个查询(就像您永远不会收到PHP 环境中的 2 个查询,您收到第一个,发送响应,然后接收下一个,即使连接包含 2 个查询)。

所以最好的办法是在应用程序方面。您可以识别匹配的查询,并等待一小段时间(10 毫秒?)以查看是否还有其他一些查询。您将需要一种在此处的多个并行工作人员之间进行通信的方法(例如您有 50 个应用程序工作人员,其中 10 个收到了可以在同一批处理的查询)。这种通信方式可以是数据库(一种非常快的方式)或一些共享内存,具体取决于所使用的技术。

然后,当等待时间过长(10 毫秒?)或收到大量查询时,其中一个工作人员可以收集所有查询,运行批处理,并告诉所有其他工作人员有一个结果(这里你又需要一个中心通信点,比如 PostgreSQL 中的 LISTEN/NOTIFY、共享内存、消息队列服务等)。

最后,每个工作人员都有责任发送正确的 HTTP 响应。

这里的关键是拥有一个系统,在该系统中,您在尝试共享请求处理时所浪费的时间不如在将多个查询批处理在一起时节省的时间重要,并且在这次低流量的情况应该保持合理(因为在这里你总是会浪费时间等待什么)。当然,您还会在系统上添加一些复杂性,更难维护等。

关于performance - 批量生成http响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com