gpt4 book ai didi

python - 加快 API 响应时间

转载 作者:行者123 更新时间:2023-11-28 17:50:14 25 4
gpt4 key购买 nike

我希望减少 Web 服务器针对给定查询从 API 服务器请求/接收数据的完整时间。

假设 MySQL 是瓶颈,我将 API 服务器数据库更新到 Cassandra,但完成时间仍然相同。可能是其他东西是我无法弄清楚的瓶颈。

环境:

Number of Request Estimated per minute: 100
Database: MySQl / Cassandra
Hardware: EC2 Small
Server Used: Apache HTTP

当前观察:

Cassandra Query Response Time: .03 Secs 
Time between request made and response received: 4 Secs

必需:

Time between request made and response received: 1 Secs

底线:我们如何才能减少在这个给定案例中花费的完整时间?

如有需要,请随时询问更多详细信息。谢谢

最佳答案

聊天总结:

  • 环境:
    • 在小型 Amazon EC2 实例(1 个虚拟 CPU,1.7GB RAM)上运行
    • 网络服务器是 Apache
    • 100 个工作线程
    • Python 使用 Pylons(暗示 WSGI)
    • EC2 中的测试客户端
  • 测试:
    • 1.8k 请求,单线程
      • 未知的 CPU 成本
      • Cassandra 请求时间:0.079 秒(传播 0.048->0.759)
      • MySQL请求时间:0.169s(传播0.047->1.52)
    • 10k 请求,多线程
      • CPU 运行率为 90%
      • Cassandra 请求时间:2.285 秒(传播 0.102->6.321)
      • MySQL 请求时间:7.879s (spread 0.831->14.065)

观察:在您的小型 EC2 实例上,100 个线程可能很多太多了。请记住,每个线程都会生成一个占用内存和资源的 Python 进程——即使什么都不做也是如此。减少线程会减少:

  • 内存争用(和内存分页杀死性能)
  • CPU 缓冲区未命中
  • CPU 争用
  • 数据库争用

建议:您的目标应该是只运行尽可能多的线程,以最大限度地利用您的 CPU(但如果它们在内存或其他资源上达到极限,则运行更少的线程)。运行更多线程会增加开销并降低吞吐量。

观察:单线程模式下的最佳性能时间给出的最佳情况成本可能为每个请求 0.05 CPU 秒。假设有一些延迟(等待 IO),您的 CPU 成本可能会低很多)。假设 CPU 是您架构中的瓶颈,您可能仅通过线程调整就可以在 EC2 服务器上每秒处理 20-40 个事务。

建议:使用标准的 Python 分析器来分析系统(当以最佳线程数运行时)。分析器将指出 CPU 花费最多时间的地方。区分等待(即等待数据库返回、磁盘读取或写入数据)与代码的固有 CPU 成本。

  • 您的 CPU 固有成本很高:您能否降低成本?如果这不在您的代码中,您可以通过做一些不同的事情来避免该代码路径吗?缓存?使用其他库?
  • 存在延迟的地方:鉴于您的单线程结果,延迟不一定是坏事假设CPU 可以处理另一个请求。实际上,您可以通过计算来大致了解所需的线程数:(总时间/(总时间 - 等待时间)) 但是,检查一下,在 Python 等待时,数据库(例如)没有努力返回结果。

其他想法:考虑测试工具如何传送 HTTP 请求 - 它是否尽可能快地传送(例如尝试同时打开 10k TCP 套接字?)如果是这样,这可能会扭曲您的结果。使用不同的加载模式和工具可能会更好。

关于python - 加快 API 响应时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11623303/

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