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

2016-03-16 22:14:03 +08:00
 sujin190
最近访问量上来了点,连续挂了两次,异步 io 的高并发反而成坑了,都是管理 mysql 连接管理的问题,想驾驭好它还不易啊
8523 次点击
所在节点    Python
52 条回复
gx
2016-03-17 00:23:57 +08:00
对于这种密集读写风暴还是应该交给上层处理,还有异步数据库驱动的确太坑。
cevincheung
2016-03-17 00:50:54 +08:00
所以还是中间件吧。要不 postgresql 欢迎你
lecher
2016-03-17 01:41:48 +08:00
数据库业务设计有问题,至少合理设计缓存处理可以做到 Web 读取的请求不需要穿透到数据库。

就数据库的处理性能而言,不应该比单机 Web 服务差,要是扛不住单机 Web 的请求,改改读写数据库的业务优化才是上策,一个每秒查询才几百就拖垮的数据库业务,用什么语言都一样会挂。

数据库扛每秒几千的请求才是合理的,正常的单机业务瓶颈应该出在带宽或者 Web 容器上。
janxin
2016-03-17 07:14:21 +08:00
@sujin190 上面都提到了,跟语言无关,还是架构设计的问题
clino
2016-03-17 08:44:40 +08:00
同感 如果瓶颈在数据库上应该想办法做数据库优化
一个就是能不能配置 nginx 的访问频率限制呢
clino
2016-03-17 08:46:10 +08:00
@cevincheung postgres 这方面有什么好处?
deben
2016-03-17 08:58:21 +08:00
LS 的各位大神, 如果对于我这种外行人来做数据库频繁写入的业务, 会不会用类似 阿里云 的 RDS 这种产品会更少一些麻烦呢?
bobuick
2016-03-17 09:00:55 +08:00
RDS 只是机器性能方便扩展而已, 数据库方面并没什么特别的。同样的配置该它瓶颈还是一样会瓶颈。
不然地球人就不用分表分库,做分布式分布数据了
lecher
2016-03-17 10:10:37 +08:00
RDS 用不好一样挂。
遇到过个电商团队问过类似的问题,他们才几万用户,每秒一百多 HTTP 请求,还是处理不过来,一查业务, SQL 读写处理各种多级联表,最多的有五级联表,如果都没有命中索引,五个 join 把五个表的记录一乘起来就是非常恐怖的运算量。

这种情况直接在数据库加冗余字段,减少联表查询,性能一下就上去了。能单表查询尽量单表查询,不行也要把索引规划好,减少联表的消耗。在加上缓存处理,把读取查询结果缓存在内存,数据库基本负载就都在处理写入,可以提高更多性能。
ainimuyan
2016-03-17 10:30:27 +08:00
@sujin190 有没测试过多少并发的时候开始出现这样的问题呢
justfly
2016-03-17 10:34:46 +08:00
你现在数据库是瓶颈了就去解决瓶颈的问题,就算不用异步的 MySQL 驱动,数据库到瓶颈不会出现这个问题,也会出现拒绝连接的问题
realpg
2016-03-17 10:50:18 +08:00
一看描述,就是不会写 SQL 的问题……
跟同步异步、 tornado 、 python 都没啥关系……
zhicheng
2016-03-17 11:58:02 +08:00
@realpg 见了少切肉剁到手嫌菜刀快的。
wingyiu
2016-03-17 12:15:16 +08:00
我们的 tornaod 的 sql 查询都是同步的,只要 sql 足够快, tornado 进程足够多,就没问题了。 py 异步 mysql 库还没有比较稳定健壮的吧
sujin190
2016-03-17 13:10:19 +08:00
@lecher 恩,测试下来, mysql 每次查询数确实过万的,没有 join 查询的话
sujin190
2016-03-17 13:13:49 +08:00
@ainimuyan 其实说起来 mysql 并未到瓶颈,测试下来,每秒过万查询完全没问题,只是 tornado 完全异步,确实查询数据库等待不接受其他连接这个缓冲,使得突然高并发削峰,连接管理上和同步模式有些不一样
sujin190
2016-03-17 13:15:08 +08:00
@wingyiu 是的,使用同步 sql 方式来管理思考查询过程,到了异步来说,似乎问题不太一样,也正在尝试调整
sujin190
2016-03-17 13:17:36 +08:00
@ainimuyan 并发其实不是太高,大概 300-600 左右吧,单机,只是因为我们客户端的原因,有时可能超过数倍,所以突然升高的负载会使得 mysql 连接管理,负载出现异样整个不可用,也正在调整尝试
strwei
2016-03-17 15:46:58 +08:00
本站用的就是 tornado ,你们有何异议
tempuseraccount
2016-03-17 16:01:27 +08:00
都是垃圾,用 C 从头写吧

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

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

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

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

© 2021 V2EX