tornado 连续踩了两次坑,看来想驾驭好它还不容易啊

2016-03-16 22:14:03 +08:00
 sujin190
最近访问量上来了点,连续挂了两次,异步 io 的高并发反而成坑了,都是管理 mysql 连接管理的问题,想驾驭好它还不易啊
8548 次点击
所在节点    Python
52 条回复
xxxcat
2016-03-17 17:38:00 +08:00
曾经看到过一篇老外的文章,说是 python 的异步调用比同步调用的代价高很多,所以随着接近数据库瓶颈,异步会更容易出问题,我觉得访问量比较高的系统,框架就不应该直联数据库
sujin190
2016-03-17 18:48:14 +08:00
@xxxcat 多了很多 callback ,消耗时间自然多了很多
darkbill
2016-03-17 21:37:25 +08:00
Mark 一下~~
AndyCrz
2016-03-17 21:51:18 +08:00
我用 tornado 抗过大流量项目(其实也没没多少每天十万条写入),个人经验是这样, 80%是 Mysql 没有配置好,用 dbutils 维持一个连接池,数据用事务进行批量提交已经跑了一年多了,至今没出现过问题
zonghua
2016-03-17 21:58:50 +08:00
部署 py 的工程,因为配置的路径少了一条杠,耗费了我一个下午的时间。
alexapollo
2016-03-17 22:02:50 +08:00
明显是存储瓶颈,换 redis 就好了,或者加个缓存
alexapollo
2016-03-17 22:03:17 +08:00
no business with tornado
sujin190
2016-03-17 23:58:24 +08:00
@AndyCrz 我们现在已经数十万写入,数百万 request 了。。 dbutils 同步读写吧
AndyCrz
2016-03-18 09:14:39 +08:00
@sujin190 这种问题你确定是异步的问题吗?你测试了 profile 了?看一下数据库的 log 了
lixm
2016-03-18 10:14:16 +08:00
数据库这里慢, 换什么都不行, 把数据库的问题解决了,一切都 OK 了
clino
2016-03-18 16:30:00 +08:00
楼主我自己写了写代码来测试,异步用的是 gevent,感觉还好,如果故意在处理请求的时候改成比较慢的比如说等待一下 shell 子进程的结束等,确实数据库那边会有问题,但是只要调大一下连接池的最大连接数,然后再配置一个合适的数据库连接获取 timeout 的时间,虽然 rps 会变低很多,但是数据库这里不会抗不住才对呢

楼主你应该有用连接池吧?

我这里测试用的是 uliweb gevent sqlalchemy postgresql
dingyaguang117
2019-12-31 09:23:54 +08:00
单线程模型确实是很容易死锁的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/264048

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX