我希望减少Web服务器从给定查询的API服务器请求/接收数据的完整时间。
假设MySQL是瓶颈,我将API服务器db更新为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
BOTTOM LINE:在这种情况下,我们如何减少完成所需的时间?
如果需要,请随时询问更多详细信息。感谢
答案 0 :(得分:2)
总结聊天:
观察:在您的小型EC2实例上,100个线程可能很多太多了。请记住,每个线程都会产生一个占用内存和资源的Python进程 - 即使没有做任何事情。减少线程会减少:
推荐:您应该只运行尽可能多的线程来最大化CPU(但如果它们在内存或其他资源上最大化则更少)。运行更多线程会增加开销并降低吞吐量。
观察:在单线程模式下,您的最佳性能时间可能会为每个请求提供0.05 CPU秒的最佳成本。假设有一些延迟(等待IO),您的CPU成本可能会低很多)。假设CPU是您的架构中的瓶颈,您可能只需要在EC2服务器上进行20-40次事务处理,只需进行线程调整。
推荐:使用标准的Python分析器来分析系统(使用最佳线程数运行时)。分析器将指示CPU花费最多时间的位置。区分等待(即数据库返回,磁盘读取或写入数据)与代码的固有CPU成本。
其他想法:考虑测试工具如何传递HTTP请求 - 它是否尽可能快地执行(例如尝试同时打开10k TCP套接字?)如果是这样,这可能会使您的结果。使用不同的加载模式和工具可能更好。
答案 1 :(得分:0)
Cassandra在高负荷下工作得更快,在世界不同侧面的两个系统上平均时间为3-4秒。