簡體   English   中英

如何設計用於數據查詢和數據更新的系統

[英]How to design the system used for data query and data update

目標很簡單:客戶端通過一些鍵發布http請求以查詢數據和更新記錄。最高請求:500 / sec(越高越好,但是最好的是滿足此要求,同時使系統易於實現並使用更少的mashines )

我做了什么:nginx + php-cgi(使用php)服務於HTTP請求,php使用Thrift RPC從數據庫代理檢索數據,該代理僅用於查詢和更新數據庫(mysql)。 數據庫代理使用mysql連接池和節儉的TNonblockingServer。 (在我國,有2個ISP,根據經驗,DB Proxy將部署在多isp機器上,數據庫,Web服務器也將部署在單isp mashine上)

是什么困擾我:當我進行壓力測試(> 500 / sec)時,我從PHP日志中發現“ TSocket:無法連接至172.19.122.32:9090(連接被拒絕[111]”。我認為這可能是由於端口用完了(可能是錯誤的結論),所以我設計使用Thrift連接布爾來減少Thrift連接。但是php中沒有連接池(似乎有些數據庫連接池技術),並且php不支持該功能。

因此,我認為也許該項目從一開始就以錯誤的方式進行設計(例如使用php,Thrift)。 有沒有一種好的方法可以根據我的工作來解決此問題? 而且我認為大多數人都會懷疑我的尷尬方案。 好吧,您的新方案會有所幫助

謝謝。

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

有用! 困擾我的是麻煩,但是更改內核參數會影響NAT。 這不是一個完美的解決方案。 我認為可以繼續討論該系統的新設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM