我是用nginx转发到workerman, 经过测试,访问http是访问https的qps十倍左右. 就算ssl加密有消耗也不会这么多吧? 后来又测试tp框架下http和https的差距,只是60/30的差距 现在怀疑问题和proxy_pass转发有关系,请问有没有什么方法优化
你这个测试场景,可以分成以下几个耗时环节:
① HTTP 请求(https 或者 http,前者开销要大很多)
② Nginx 转发和回传(proxy_pass 或者 fastcgi_pass,前者开销大一些,但总体影响应该不大)
③ PHP 程序执行过程(TP 或者 WM)
重点在第 ③ 个环节,倒不是 PHP 程序本身效率高低的问题(虽然 TP 框架复杂一点),主要是两者的进程模型不一样,TP 是在 PHP-FPM 里面跑的,受进程数的限制,测试过程中会有很多 request 处于等待状态;而 WM 是单进程异步处理,更适合高并发,在你这个测试规模下几乎不会有等待。
所以再看你的测试结果,WM 时 http 比 https 性能高十倍,这个大体上可以看做是 SSL 真实的性能比,而在 TP 时,即使用 http,第 ① 个环节全速跑起来,到了第 ③ 个环节还是堵住了,所以无法达到十倍。
你这个测试场景,可以分成以下几个耗时环节:
① HTTP 请求(https 或者 http,前者开销要大很多)
② Nginx 转发和回传(proxy_pass 或者 fastcgi_pass,前者开销大一些,但总体影响应该不大)
③ PHP 程序执行过程(TP 或者 WM)
重点在第 ③ 个环节,倒不是 PHP 程序本身效率高低的问题(虽然 TP 框架复杂一点),主要是两者的进程模型不一样,TP 是在 PHP-FPM 里面跑的,受进程数的限制,测试过程中会有很多 request 处于等待状态;而 WM 是单进程异步处理,更适合高并发,在你这个测试规模下几乎不会有等待。
所以再看你的测试结果,WM 时 http 比 https 性能高十倍,这个大体上可以看做是 SSL 真实的性能比,而在 TP 时,即使用 http,第 ① 个环节全速跑起来,到了第 ③ 个环节还是堵住了,所以无法达到十倍。