1

目标很简单:客户端通过一些key发送http请求来查询数据和更新记录。 最高请求:500/sec(越高越好,但最好是满足这个要求,同时使系统易于实现,使用更少的mashine )

我做了什么:nginx + php-cgi(使用php)服务http请求,php使用thrift RPC从仅用于查询和更新DB(mysql)的DB代理检索数据。DB代理使用mysql连接池和thrift的TNonblockingServer。(在我的国家有2个ISP,DB Proxy会部署在多isp机器上,db也是,web服务器根据经验可以部署在单isp机器上)

什么麻烦我:当我做压力测试时(当> 500 /秒),我从php日志中发现“ TSocket:无法连接到172.19.122.32:9090(连接被拒绝[111]”。我认为这可能是由端口用完了(可能是错误的结论)。所以我设计使用thrift connection bool来减少thrift连接。但是php中没有连接池(似乎有一些DB连接池技术)并且php不支持该功能。

所以我认为这个项目可能从一开始就以错误的方式设计(比如使用 php ,thrift)。有没有根据我所做的解决这个问题的好方法?而且我认为大多数人都会怀疑我的尴尬计划。嗯,你的新方案会有很大帮助

谢谢。

4

1 回答 1

0

php日志中的“TSocket:无法连接到172.19.122.32:9090(连接被拒绝[111])”显示由于短时间内短连接过多而导致端口耗尽。因此,我使用以下命令配置 tcp TIME_WAIT 状态以及时回收端口: sysctl -w net.ipv4.tcp_timestamps=1 sysctl -w net.ipv4.tcp_tw_recycle=1

有用!让我烦恼的是sloved,但是改变内核参数会影响NAT。这不是一个完美的解决方案。我觉得这个系统的新的好设计可以继续讨论。

于 2013-10-21T06:35:43.917 回答