我使用 tornado 做的一个 web api,里面没有数据库存储业务,主要业务是调用第三方 web api 接口。 刚开始时使用的是 requests 模块来做 http 请求,结果发现并发稍高一点的时候 nginx 里大量请求超时的日志,后来通过搜索相关资料,发现 tornado 需要使用异步 httpclient,踩了第一个坑。
后面将请求第三方接口全部替换成 AsyncHTTPClient 后,上述问题立马解决,并发能力大大提升,nginx 错误日志也没有了。 再后来根据业务需求,需要在请求第三方接口的时候使用 proxy,AsyncHTTPClient 不支持 proxy 设置,需要改用 CurlAsyncHTTPClient,按照官方文档修改好代码后,又出现了并发超时问题,将 CurlAsyncHTTPClient 改回 AsyncHTTPClient 问题就消失。
而当使用 CurlAsyncHTTPClient 或 requests 的时候,每个进程下面就只有一个子进程了,也就产生了并发瓶颈问题。
按照文档要求,重新编译服务器 curl 。c-ares 也支持了,但还是无法解决问题。
以上就是问题的描述了,希望大佬能帮忙提供一下解决思路。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.