如何设计用于数据查询和数据更新的系统


How to design the system used for data query and data update

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

我做了什么:nginx + php-cgi(使用php)来服务HTTP请求,PHP使用节俭的RPC从仅用于查询和更新DB(mysql)的DB代理中检索数据。DB代理使用mysql连接池和thrift的TNonblockingServer。(在我国,有2个ISP,DB代理将部署在多ISP机器中,数据库也是如此,Web服务器可以根据经验部署在单ISP机器上)

困扰我:当我进行压力测试(当>500/秒时),我发现" TSocket:无法连接到172.19.122.32:9090(连接被拒绝[111]"。我认为这可能是由于端口用完引起的(可能是不正确的结论)。所以我设计使用节俭连接布尔来减少节俭连接。但是 php 中没有连接池(似乎有一些数据库连接池技术),并且 php 不支持该功能。

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

谢谢。

php log 中的"无法连接到 172.19.122.32:9090(连接被拒绝 [111])"显示端口因短时间内连接过多而耗尽。所以我使用以下方法将 tcp TIME_WAIT状态配置为及时回收端口:sysctl -w net.ipv4.tcp_timestamps=1sysctl -w net.ipv4.tcp_tw_recycle=1

它有效!让我感到困惑的是,但更改内核参数会影响 NAT。这不是一个完美的解决方案。我认为这个系统的新好的设计可以继续讨论。