-----------------------------------------------------------------------------------------------------------------------------------------------------------------
go單機壓力測試
壓測go單機時,采用了2台同規格的8核16G服務器作為發起壓力的A機,A機使用Jmeter工具發起壓力請求。1台同規格的8核16G服務器作為接受壓力的B機。
此外,由於登錄接口會使用用戶code來調用騰訊的openid接口,但是目前只有幾個用戶code,因此無法模擬不同的用戶海量登錄,故此次測試采用了1台同規格的8核16G服務器作為C機來模擬騰訊openid接口以供B機的調用。測試時,B機隨機生成不同的用戶code發送給C機,C機再據此返回不同的openid給B機。
go單機壓力測試結果
當B機達到滿負載(CPU 90%~100%)時,2台A機的壓力測試結果如下
A機一:
A機二:
由上圖可知,go登錄接口的最大並發數為11000RPS左右。
go單機壓力測試結果分析
go登錄接口最大並發數為11000RPS,但由於此次是采用模擬騰訊接口的方式,延時會比實際低一些,若實際采用騰訊接口,換算后並發數約為9000RPS左右。所以,當服務器在正常符合范圍內(CPU <= 70%)運轉時,go登錄單機並發數應為9000*70%=6300PRS左右。而目標登錄並發數為500000RPS,故共需要500000/6300=79.36台8核ecs服務器即可達到登錄的需求。
壓力測試結論與建議
結論1:滿足當前每秒50萬登錄並發+每秒1.5萬訂單,至少需要512G以上Redis緩存和60核MySql數據庫。
結論2:當前php單機性能為最大每秒處理2000請求數。
結論3:系統滿足橫向線性擴展。
建議1:如不能修改應用情況下,應至少使用250台8C16G ECS+1T版Reids+60核RDS,建議400台8C32G ECS。
建議2:修改應用,提升單機性能,如單機性能提升10倍至20000,則最少只需25台ECS。
建議3:由於php本身並不適合高並發場景,可以考慮使用其它高並發框架,如Golang的echo框架等。
主要內容大概是這樣,從去年拖到現在總算填完了,而我基本全程都是打醬油的,現在回想起來,實際執行起來要難很多,你需要熟悉阿里雲服務(快速的搭建測試環境)、編寫測試組件、以及各種中間件知識,包括系統架構、網絡、數據庫等等,讓我首次參與從服務端視角開展的性能測試,果然你知道得越多,不知道的也就越多。有興趣的可以看看阿里巴巴 PTS 團隊的性能測試分享